☰
czsc 十一笔形态分类信号 cxt_eleven_bi_V230622:A/B/C 结构识别与类买卖点判定的源码级解析
2026/10/10 8:53:07 网站建设 项目流程
  • 金融科技

【免费下载链接】czsc

缠中说禅技术分析工具;缠论;股票;期货;Quant;量化交易

项目地址:https://gitcode.com/gh_mirrors/cz/czsc
点击查看免费下载

本文以 czsc(缠中说禅技术分析工具)中 K 线级信号cxt_eleven_bi_V230622(十一笔形态分类信号)为主题,完整讲解其参数模板、7 段式信号字符串格式、11 笔结构的形态判定逻辑(A5B3C3、A3B3C5、A3B5C3、类二买卖、类三买等),并结合crates/czsc-signals/src/cxt.rs的 Rust 实现逐条对照源码条件,说明如何在CzscSignals/CzscTrader中配置使用。读完本文,你将能够理解该信号的输出含义、掌握其数据门槛与触发条件,并能在自己的 signals_config 中正确引用它。

信号概览:面向长结构分类的笔形态信号

cxt_eleven_bi_V230622是 czsc 信号体系中cxt(缠论上下文)模块的一个 K 线级信号(category = "kline"),源码位于 cxt.rs。它在 cxt 模块信号索引 中被归类为「十一笔形态分类信号」,是整个 cxt 模块 41 个信号中窗口最长的一类形态分类器。

与同模块的cxt_three_bi_V230618(三笔)、cxt_five_bi_V230619(五笔)、cxt_seven_bi_V230620(七笔)、cxt_nine_bi_V230621(九笔)形态信号相比,本信号一次取样11 笔,面向更长、更完整的中枢与趋势结构:

  • 三笔/五笔:偏短周期波动与局部转折;
  • 七笔/九笔:中等周期的中枢-离开结构;
  • 十一笔:可容纳「A 段 + B 中枢 + C 段」的完整三段式结构(如 A5B3C3 = 左侧 5 笔 + 中间 3 笔 + 右侧 3 笔),因此其输出标签带有明确的 A/B/C 结构语义。

源码注释与仓库文档均明确标注:该信号与 Pythonczsc.signals.cxt_eleven_bi_V230622保持一致(见 关联文档),即 Rust 实现是 Python 版的直接对齐移植,行为完全一致。

参数模板与 7 段式信号字符串

参数模板

"{freq}_D{di}十一笔_形态V230622"

模板由三部分组成:

模板片段含义示例
{freq}K 线周期60分钟、日线、周线
D{di}从倒数第di笔开始取样D1(默认,取最近 11 笔)
形态V230622信号名(k3 段)与版本标签固定不变

在源码中(cxt.rs),三段键值按如下方式拼装:

let di = get_usize_param(params, "di", 1); let k1 = c.freq.to_string(); let k2 = format!("D{}十一笔", di); let k3 = "形态V230622";

di 参数

di是唯一可配置参数,语义为「从倒数第di笔开始取样」,默认值1:

  • di = 1:取bi_list中最后 11 笔;
  • di = 2:跳过最新一笔,取倒数第 2 笔起往前 11 笔(用于历史回看、事件确认场景)。

参数解析复用通用工具函数get_usize_param(sig.rs),它同时支持数值与数字字符串两种取值方式,取不到时回退到默认值1。取样逻辑则由get_sub_elements(elements, di, n)完成(sig.rs),语义对齐 Python 切片elements[-n-di+1 : -di+1],即「截止到倒数第 di 个元素的前 n 个元素」。

输出的 7 段式信号字符串

czsc 信号统一采用 7 段格式k1_k2_k3_v1_v2_v3_score(SKILL.md 中有完整说明)。本信号通过make_kline_signal_v1构造输出(sig.rs),v2、v3固定为任意、score固定为0:

60分钟_D1十一笔_形态V230622_A5B3C3式类一买_任意_任意_0 ├─k1────┤ ├k2─────┤ ├k3──────────┤ ├v1────────────┤ ├v2┤ ├v3┤ ├s┤

信号列表示例(与文档一致):

  • Signal('60分钟_D1十一笔_形态V230622_A5B3C3式类一买_任意_任意_0')
  • Signal('60分钟_D1十一笔_形态V230622_类二卖_任意_任意_0')

其中v1是核心形态标签,共 10 种具名形态 + 1 个兜底标签其他。

数据门槛:更高的笔数与确认度要求

源码在进入形态判定前设置了严格的前置门槛(cxt.rs):

if c.bi_list.len() < di + 16 || c.bars_ubi.len() > 7 { return make_kline_signal_v1(&k1, &k2, k3, "其他"); } let bis = get_sub_elements(&c.bi_list, di, 11);

两点值得注意:

  1. 笔数门槛bi_list.len() >= di + 16:虽然只取 11 笔参与判定,但要求总笔数比取样起点多出 16 笔以上。文档中「该信号面向更长结构分类,要求笔数和确认度更高」即指此门槛——多出的历史笔用于保证 11 笔窗口处于稳定、可确认的结构中,避免在结构未完成时误判。
  2. 未完成笔长度bars_ubi.len() <= 7:当前未完成笔(UBI)超过 7 根 K 线即视为延伸过长、结构未定,直接输出其他。这与同模块多个信号(如cxt_bi_end_V230224、cxt_bi_zdf_V230601)的 UBI 上限约定一致,保证信号只在「结构刚完成、可确认」的时点触发。

窗口取满后,信号首先统计 11 笔的整体极值(cxt.rs):

let max_high = bis.iter().map(|x| x.get_high()).fold(f64::NEG_INFINITY, f64::max); let min_low = bis.iter().map(|x| x.get_low()).fold(f64::INFINITY, f64::min);

max_high与min_low是后续所有分支的第一层判别依据——先确认整个 11 笔窗口的「首末极值关系」,再进入具体形态匹配。

形态判定逻辑总览

信号以「最后一笔方向 + 首末极值」为顶层开关,分三大分支(cxt.rs):

bi11 向下(最后一笔为向下笔) ├─ 首末极值成立:min_low == bi11.low 且 max_high == bi1.high(首笔最高、末笔最低,典型下跌末端) │ ├─ A5B3C3式类一买 │ ├─ A3B3C5式类一买 │ ├─ A3B5C3式类一买 │ └─ a1Ab式类一买 ├─ 否则:类二买(两种子形态,OR 关系) └─ 否则:类三买(依赖前 3 笔构造中枢 GG/ZG/ZD/DD) bi11 向上且首末极值对称成立(max_high == bi11.high 且 min_low == bi1.low,首笔最低、末笔最高,典型上涨末端) ├─ A5B3C3式类一卖 ├─ A3B3C5式类一卖 └─ A3B5C3式类一卖 否则(阶梯下跌结构) └─ 类二卖 未命中任何分支 → 其他

下面逐形态拆解源码判定条件,帮助你理解每个标签背后的结构语义。

类一买系列:下跌末端的 A/B/C 三段结构

类一买(缠论第一类买点)出现在下跌趋势末端:最后一个向下笔创出 11 笔窗口新低(min_low == bi11.get_low()),同时 11 笔最高点锁定在首笔(max_high == bi1.get_high()),整个窗口呈现「高开低走、末笔破位」的完整下跌结构。在此基础上按中间结构形态细分为四种:

A5B3C3式类一买

结构拆解为「左侧 5 笔(A 段) + 中间 3 笔(B 段) + 右侧 3 笔(C 段)」,源码条件(cxt.rs):

  • bi5.get_low()是 bi1、bi3、bi5 三者低点中的最小值(左侧 A 段下跌依次创新低);
  • bi9.get_low() > bi11.get_low()且bi9.get_high() > bi11.get_high()(右侧 C 段末笔破位创新低);
  • bi8.get_high() > bi6.get_low()(中间 B 段存在价格重叠,构成震荡区间);
  • bi1.get_high() - bi5.get_low() > bi9.get_high() - bi11.get_low()(A 段跌幅大于 C 段跌幅,即末段下跌力度衰减——背驰特征)。

A3B3C5式类一买

结构为「左侧 3 笔 + 中间 3 笔 + 右侧 5 笔」,条件(cxt.rs):

  • bi1.get_high() > bi3.get_high()且bi1.get_low() > bi3.get_low()(A 段向下逐笔降低);
  • bi7.get_high()是 bi7、bi9、bi11 三者高点中的最大值(C 段内部高点逐级下移的确认);
  • bi6.get_high() > bi4.get_low()(B 段价格重叠);
  • bi1.get_high() - bi3.get_low() > bi7.get_high() - bi11.get_low()(A 段力度大于 C 段,背驰特征)。

A3B5C3式类一买

结构为「左侧 3 笔 + 中间 5 笔 + 右侧 3 笔」,条件(cxt.rs):

  • bi1.get_low() > bi3.get_low()(A 段向下);
  • bi4.get_high().min(bi6.get_high()).min(bi8.get_high()) > bi4.get_low().max(bi6.get_low()).max(bi8.get_low())(中间 3 笔重叠区间非空,即 B 段构成中枢);
  • bi9.get_high() > bi11.get_high()(C 段末笔未创新高,力度衰减);
  • bi1.get_high() - bi3.get_low() > bi9.get_high() - bi11.get_low()(背驰特征)。

a1Ab式类一买

小级别嵌套结构,条件(cxt.rs):

  • bis[1].get_low() > bi4.get_high()且bi4.get_low() > bi6.get_high()(连续两级下行破位);
  • bi5.get_low() > bi7.get_low();
  • bi10.get_high() > bi8.get_low()(末段存在反抽重叠)。

从源码结构看,a1Ab可以理解为「小 a、1、A、b」四段式的下跌-反弹-下跌嵌套,是类一买系列中对内部波动细节要求最高的变体。

类一卖系列:上涨末端的对称镜像

当 11 笔窗口满足max_high == bi11.get_high()且min_low == bi1.get_low()(首笔最低、末笔最高,典型上涨末端)时,进入类一卖判定(cxt.rs),条件与类一买完全镜像:

  • A5B3C3式类一卖:bi5.get_high()为 bi1/bi3/bi5 高点最大值;bi9.get_low() < bi11.get_low()且bi9.get_high() < bi11.get_high();bi8.get_low() < bi6.get_high();bi11.get_high() - bi9.get_low() < bi5.get_high() - bi1.get_low()(C 段上涨力度小于 A 段,顶背驰特征)。
  • A3B3C5式类一卖:bi7.get_low()为 bi7/bi9/bi11 低点最小值;bi1.get_high() < bi3.get_high()且bi1.get_low() < bi3.get_low()(A 段逐级抬高);bi6.get_low() < bi4.get_high();bi11.get_high() - bi7.get_low() < bi3.get_high() - bi1.get_low()。
  • A3B5C3式类一卖:bi1.get_high() < bi3.get_high();中间 3 笔(bi4/bi6/bi8)重叠构成中枢;bi9.get_low() < bi11.get_low()(C 段末笔再创新低,力度衰减);bi3.get_high() - bi1.get_low() > bi11.get_high() - bi9.get_low()。

类二买 / 类二卖 / 类三买:中枢后的回踩确认

类二买

类二买不要求首末极值成立,而是捕捉「第一类买点之后回调不创新低」的结构。源码给出两种子形态(OR 关系,cxt.rs):

形态一(中枢回踩确认):

  • bi7.get_power() < bi1.get_power()(第 7 笔力度弱于第 1 笔,力度递减);
  • min_low == bi7.get_low()(窗口最低点落在第 7 笔);
  • bi7.get_low()低于第 2/4/6 笔低点的最大值,且max(bis[1].low, bi4.low, bi6.low) < min(bis[1].high, bi4.high, bi6.high)(前段构成中枢);
  • min(bis[1].high, bi4.high, bi6.high) < max(bi9.high, bi11.high) < bi1.get_high()(中枢上沿低于后段高点、后段高点低于首笔高点);
  • bi11.get_low()高于中枢下沿(末笔回调不破中枢下沿,即回踩确认);
  • min(bi9.high, bi11.high) > max(bi9.low, bi11.low)(bi9/bi11 自身重叠)。

形态二(简化确认):

  • max_high == bi1.get_high()且min_low == bi7.get_low();
  • bi9/bi11 重叠;
  • max(bi9.high, bi11.high) > max(bi4.high, bi6.high)且min(bi9.low, bi11.low) > min(bi4.low, bi6.low)(后段整体高于中段,中枢重心上移)。

类三买

类三买依赖前 3 笔构造中枢的四个极值(cxt.rs):

  • gg= bi1/bi2/bi3 高点最大值,zg= 三者高点最小值,zd= 三者低点最大值,dd= 三者低点最小值(GG/ZG/ZD/DD 四值即缠论中枢判定标准量);
  • 要求max_high == bi11.get_high()、bi11.get_low() > zg、zg > zd(中枢有效且末笔向上突破后回踩不破中枢上沿 ZG);
  • 同时gg > bi5.low / bi7.low / bi9.low、dd < bi5.high / bi7.high / bi9.high(中枢区间完整覆盖中段各笔)。

满足全部条件即判定类三买——这是缠论第三类买点(中枢离开后回抽不回中枢)在 11 笔窗口中的实现。

类二卖

类二卖是独立分支(cxt.rs),识别「阶梯式下跌」结构:

  • max_high == bi9.get_high();
  • 高点/低点逐级下移的阶梯链:bi9.high > bi8.low > bi6.high > bi6.low > bi4.high > bi4.low > bis[1].high(右侧逐段压低,形成规则下行台阶);
  • min_low == bi1.get_low()且bi11.get_high() < bi9.get_high()(末笔未能上破前高,反弹力度衰竭)。

输出兜底与信号构造机制

所有分支都不命中时,信号输出其他(cxt.rs):

make_kline_signal_v1(&k1, &k2, k3, v1)

make_kline_signal_v1是 K 线级信号的统一构造入口(sig.rs),内部调用make_signal7拼装 7 段字符串并做严格格式校验(sig.rs),生成非法信号会直接 panic,从而在编译/测试期拦截模板与实现的失配。

从注册机制看,cxt_eleven_bi_V230622通过#[signal(...)]属性宏声明(cxt.rs),宏生成的SignalDescriptor元数据(类别、名称、模板、opcode、参数类型等,见 types.rs)由inventory::collect!自动收集(lib.rs),并在 registry.rs 的注册完整性测试中被显式断言——这意味着信号名一旦声明即进入全局注册表,可被list_all_signals枚举并被策略配置直接引用。

在 CzscSignals / CzscTrader 中配置使用

该信号可直接写入signals_config参与信号计算(配置方式见 SKILL.md 的「使用示例」):

signals_config = [ # 默认 di=1,读取最近 11 笔 {"name": "cxt_eleven_bi_V230622", "freq": "60分钟", "di": 1}, # 跳过最新一笔,用于历史结构回看 {"name": "cxt_eleven_bi_V230622", "freq": "日线", "di": 2}, ]

运行时相关能力:

  • 通过list_all_signals(include_kline=True, include_trader=True)可枚举到该信号及其参数模板(返回项含name、param_template、category、namespace);
  • 通过derive_signals_config([信号字符串])可从60分钟_D1十一笔_形态V230622_A5B3C3式类一买_任意_任意_0反推出完整的配置项;
  • 通过derive_signals_freqs(config)可提取该信号所需的 K 线周期。

在策略回测中,cxt_eleven_bi_V230622输出的类一买/类二买/类三买标签可与交易级信号(如持仓止损、止盈类pos_*信号)联动,形成「形态识别 → 仓位管理」的完整事件驱动链路。需要注意其触发频率较低:由于要求bi_list.len() >= di + 16且 UBI 长度不超过 7,该信号天然是低频确认型信号,适合作为趋势反转的确认信号而非高频择时器。

与 Python 侧的对齐关系

仓库文档(关联文档)与源码注释均声明:本信号与 Pythonczsc.signals.cxt_eleven_bi_V230622保持一致。这意味着:

  • 信号名称、参数模板、输出标签(含中文形态名与任意占位)在两侧完全一致;
  • Rust 侧的 7 段式信号字符串可直接被 Python 侧的信号分发与策略框架解析,cxt_eleven_bi_V230622是「同一信号、双语实现」的典型样例(czsc-python 的派发器按短名直接映射到 Rust 实现,见 czsc_signals.rs)。

如果你正在从 Python 版 czsc 迁移到 Rust 内核(rs_czsc),或在CzscTrader中构建跨语言一致的信号集,可以直接将cxt_eleven_bi_V230622视为已验证的对齐基准信号之一。

小结

cxt_eleven_bi_V230622是 czsc 中最具结构深度的 K 线级形态信号:它以 11 笔为窗口、以首末极值为顶层开关,将缠论的类一买卖、类二买卖、类三买思想落实为 A5B3C3 / A3B3C5 / A3B5C3 / a1Ab 等 10 种可计算的形态标签。理解它的关键在于记住三个约束:窗口取 11 笔但总笔数须达到 di+16(确认度门槛)、UBI 不得超过 7 根 K 线(结构完成度约束)、以及所有判定都基于笔的高低点与力度比较(而非原始 K 线)。配合 cxt.rs 的源码逐条阅读,你可以在策略研发中准确预判其触发时点与输出分布,并将其作为长周期结构反转确认的可靠组件。

  • 金融科技

【免费下载链接】czsc

缠中说禅技术分析工具;缠论;股票;期货;Quant;量化交易

项目地址:https://gitcode.com/gh_mirrors/cz/czsc
点击查看免费下载

相关推荐

上一篇:三大核心技术革新:OnmyojiAutoScript重新定义阴阳师自动化体验
下一篇:GitBook Prompt 块 UI 重构:拆分为 "Open in" 下拉与 "Copy prompt" 按钮的设计与实现

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询