CZSC / 信号体系

czsc 信号函数:220+ 信号怎么组织、怎么调用

信号是这套框架里最容易误解的一层:它不是下单指令,而是「可组合的判断」。框架先产出信号,再把信号按与、或、非组合成事件,事件才驱动持仓。这一页把信号的层级、子模块划分、命名规范与调用路径讲清楚,也把官方内部两处数字口径的差异如实列出来。

体系:信号-事件-交易组合:all / any / not子模块:Python 端 7 个命名:带版本后缀
Signal 信号可组合的判断
Event 事件all / any / not
Position 持仓开仓+平仓+风控
CzscTrader交易器管理
「信号-事件-交易」三层示意(依据官方 README 项目贡献说明与 API 手册的对象定义);示意非官方流程图,接口以官方文档为准。
Three layers

信号、事件、持仓各是什么

官方在 README 的项目贡献里把这件事写得很直接:定义并实现「信号-事件-交易」量化交易逻辑体系,事件通过 signals_all、signals_any、signals_not 实现信号的逻辑组合。

对象职责实现位置适用场景注意点
信号Signal单个判断结果的数据表达crates/czsc-core/src/signal.rs把结构与特征转成可比较的取值信号本身不产生任何交易动作
事件Event信号的逻辑组合(与、或、非)crates/czsc-trader/src/event.rs表达「多个条件同时成立」这类策略逻辑事件是策略逻辑与执行之间的隔离带,改逻辑不必改执行
持仓Position开仓事件、平仓事件与风控的组合crates/czsc-trader/src/position.rs把事件变成可回放的仓位变化持仓描述目标状态,不等于实际成交
组合函数signals_all / signals_any / signals_not分别实现「全部成立」「任一成立」「取反」官方 README 项目贡献构造复合条件这三者是官方点名的组合机制,不要自己另起一套
批量生成generate_czsc_signals在 K 线序列上批量生成信号并返回 DataFramecrates/czsc-trader回放整段历史底层依赖 K 线合成、交易器与信号注册表
联立分析CzscSignals / CzscTrader多周期联立:只出信号 / 出信号并管仓位crates/czsc-trader/src多级别决策详见多级别联立页
Python modules

Python 端暴露的 7 个信号子模块

信号函数在 Python 侧按主题分成 7 个子模块,这是官方开发文档明确写出的划分。

子模块主题方向适用场景注意点
barK 线本身的形态与结束特征判断某根 K 线是否具备特定形态命名里常见 bar_end 这类前缀
cvolp量价关系相关信号成交量与价格的配合关系成交量口径受数据源影响,跨源比较要谨慎
cxt缠论上下文(结构状态)相关信号基于笔与中枢状态的判断这是与缠论结构结合最紧的一组
obv能量潮类量能指标信号量能趋势判断属指标派生,不依赖缠论结构
pressure压力与支撑相关信号位置判断计算口径由实现定义
tas技术分析算子派生信号均线、平滑类判断底层 TA 算子由 Rust 提供,仅供信号内部使用
vol波动率相关信号波动状态判断窗口长度直接改变结论,需固定参数
Python 侧的定位:官方开发文档写明「不存在 Python 回退」,信号函数由 Rust 实现后经 PyO3 暴露;Python 端只负责把这些符号透传出来。因此这里的 7 个子模块是暴露面,不是实现面。
Rust sources

Rust 侧的源文件清单与官方口径差异

官方开发文档写「底层 crates/czsc-signals/src/ 有 22 个 .rs 源文件,可用 ls crates/czsc-signals/src/ 自查」;本文在 2026-09-16 实测该目录为 23 个 .rs 文件。两个数字都列出来,并给出自查方式。

来源数字口径观测方式建议
官方开发文档(CLAUDE.md)22 个 .rs 源文件文档原文以文档为准了解设计意图
本文实测23 个 .rs 文件GitHub contents API 读取 crates/czsc-signals/src/以你拉取的版本实际文件数为准
README220+ 信号函数;同一份 README 另一处写 246README 两处文本以 czsc._native.signals 实际导出为准
实测存在的 .rs 模块(2026-09-16)分组
ang、bar、byi、cat、clv、coo、cvolp、cxt、cxt_trader信号实现模块(前九个)
jcc、kcatr、ntmdk、obv、pressure、pos、tas、vol信号实现模块(其余)
xl、zdy、zdy_trader信号实现模块
params、registry、types辅助模块(参数、注册表、类型定义)
utils(目录)工具函数
自查命令:在仓库根目录执行 ls crates/czsc-signals/src/ 即可得到你所用版本的实际清单。数字差异不影响使用,但引用时不要把它当成固定事实。
Naming

命名规范与调用路径

信号函数名带版本后缀,这是官方约定。理解这套命名,才能看懂示例里那一串点号。

要素写法含义注意点
完整调用路径czsc._native.signals.<子模块>.<函数名>从扩展模块到具体信号函数0.9.X 时代的 czsc.signals 命名空间层已在 1.0 中删除
示例一czsc._native.signals.bar.bar_end_V230331K 线结束类信号来自官方 README 信号生成示例
示例二czsc._native.signals.cxt.cxt_bi_status_V230101缠论笔状态类信号同属官方示例
版本后缀_V230331 / _V230101标识该信号函数的版本版本号是命名的一部分,不能省略
注册方式czsc-signal-macros 提供的注册宏信号函数在编译期登记进注册表这是 Rust 侧的事,Python 端不必关心
文档解析parse_signal_doc解析信号函数的文档字符串可用于自动生成信号文档
Parsing API

信号解析:把序列变成可用配置

写信号序列之后,需要把它翻译成运行时可用的配置与周期集合。官方 API 手册把这一组函数列在「交易器与信号管理」分类下。

API作用适用场景注意点
get_signals_config把信号序列解析为运行时配置列表生成信号前的第一步配置格式由实现定义,不要手工拼
get_signals_freqs从信号配置中提取涉及的周期决定需要合成哪些周期漏掉周期会导致信号函数拿不到数据
derive_signals_config从信号 key 列表派生信号配置已有信号 key 时与 get_signals_config 的输入形式不同
derive_signals_freqs从信号配置列表派生周期列表二次推导与 derive_signals_config 配套使用
get_unique_signals从持仓列表中提取去重的唯一信号 key统计一笔持仓用到了哪些信号用于复盘与文档化
generate_czsc_signals直接在 K 线序列上批量生成信号省掉手工串联的步骤返回 DataFrame,字段以官方实现为准
Migration

从 0.9 迁移:调用路径变了两处

1.0 把核心迁到 Rust 之后,信号层的调用方式也变了。这两条是升级时最先撞到的。

0.9.X 写法1.0.X 写法后果怎么改
信号命名空间从 czsc.signals 导入信号函数该 Python 命名空间层已在 Phase J 彻底删除旧的 import 语句直接报错改用 czsc._native.signals 或经 czsc.traders 调用
实现归属Python 实现Rust 实现,Python 仅透传不能再去改 Python 源码定制行为改行为要改 Rust 或选择不同参数
TA 算子Python 侧可能直接调用czsc._native.ta 仅供信号内部使用;Python 顶层保留 ema、sma、rolling_rank、boll_positions、ultimate_smoother 五个别名使用其它算子的代码会失败改用顶层保留别名,或自行实现
信号更新遇错静默继续rc.8 起更新方法返回可失败结果,硬错抛 ValueError批量回放时会中断补异常处理,或在入数据前清洗
信号文档靠注释parse_signal_doc 可解析文档字符串;仓库另有导出脚本不适用可用脚本导出信号目录做本地索引
FAQ

常见问题

信号相关的口径以官方 README 与 API 手册为准;数量类表述本文并列两个官方数字。

信号函数到底有多少个?

官方内部就有两处口径:README 的「项目贡献」与「架构概览」写 220+,同一份 README 的「使用案例」一节写 246 个信号函数。本文不替你选一个数字,建议直接查你安装版本里 czsc._native.signals 的实际导出。

信号可以直接拿来下单吗?

按官方设计不行。信号只是「可组合的判断」,需要用 signals_all、signals_any、signals_not 组合成事件,再由事件驱动持仓。跳过事件层会让策略逻辑与执行耦合在一起,之后改条件就会牵动执行代码。

signals_all 和 signals_any 有什么区别?

官方定义里的三个组合函数分别对应「全部成立」「任一成立」与「取反」。它们是构造复合条件的标准手段:需要多条件同时满足用第一个,只需要命中之一用第二个,需要排除某个条件用第三个。

为什么从 czsc.signals 导入会报错?

因为原 czsc/signals/ 这层 Python 命名空间在 1.0 的清理中已被彻底删除。信号函数现在的暴露路径是 czsc._native.signals,或者经 czsc.traders 封装后的接口。0.9.X 的教程代码需要按这条路径改写。

Rust 侧到底有多少个信号源文件?

官方开发文档写 22 个 .rs 文件,并给出了 ls crates/czsc-signals/src/ 的自查方式;本文在 2026-09-16 实测为 23 个。差异不影响使用,但引用时建议直接跑一次那条命令看你自己的版本。

信号这块 EasyClaw 能替我做吗?

不能。EasyClaw 本机的技术分析类技能计算的是指标与形态(均线、MACD、K 线形态、量价关系),输出的是指标结论;czsc 的信号是缠论结构派生的可组合判断,再经事件与持仓层驱动交易。两者层级不同,也没有已证实的集成关系。

信号有了,就该谈多级别怎么联立

单周期信号只看到一段走势,czsc 用 K 线合成与多级别交易器把多个周期拼起来,下一页说明这条链路。