关于 zigzag-pattern-classifier
zigzag-pattern-classifier 是按价格关系和市场状态分类双枢轴与三枢轴 ZigZag 摆动形态的参考 skill。它定义完整分类体系、容差规则,以及基于 FD 的细分方法。
主要功能
- 01双枢轴与三枢轴形态分类
- 02高于、等于、低于的比较规则
- 03Epsilon 容差指南
- 04Freedman-Diaconis 细分类
- 05市场状态标注
- 06qta Rust crate 实现参考
适用场景
- 01分类已确认的 ZigZag 摆动
- 02在 Rust 或 Python 流水线中标注形态
- 03根据摆动结构解读市场状态
- 04设置容差与分箱规则
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ terrylica/ cc-skills --skill zigzag-pattern-classifier安装后在 Claude Code 中输入/zigzag-pattern-classifier确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/binning-methodology.mddata-pipeline.mdepsilon-tolerance-detail.mdeurusd-validation-scenarios.mdnotation-definitions.mdthree-pivot-variants.mdtwo-pivot-variants.md详细介绍
ZigZag 摆动模式分类器
根据结构和市场状态对 ZigZag 摆动模式进行完整分类。每个已确认的 ZigZag 序列都恰好对应一个变体——没有遗漏,也没有重叠。
自我演进技能:此技能会在使用过程中不断改进。如果说明有误、参数发生漂移,或需要采用变通方案,请立即修复此文件,不要拖延。只有出现真实且可复现的问题时才更新。
适用场景
- 对已确认的 L₀→H₁→L₂(双转折点)或 L₀→H₁→L₂→H₃(三转折点)摆动进行分类
- 查询特定模式对市场状态的影响
- 回答“存在多少种不同的模式?”并证明分类完备
- 在代码中实现模式标记(Rust
qtacrate、Python 流水线) - 理解定义“相等”的 ε 容差带
- 使用 Freedman-Diaconis 分箱进行子分类
符号说明(唯一事实来源)
| 符号 | 定义 | 示例 |
|---|---|---|
| L₀ | 初始低点(第一个已确认的转折点) | 1.0800 |
| H₁ | 摆动高点(反转峰值) | 1.0850 |
| L₂ | 第二个低点(回撤) | 1.0810 |
| H₃ | 第二个高点(仅适用于三转折点) | 1.0870 |
| W | 摆动幅度:H₁ − L₀ | 0.0050 |
| z | 标准化回撤:(L₂ − L₀) / (H₁ − L₀) | 0.20 |
| o | 波动率标准化超调:(L₀ − L₂) / ATR₁₄ | 0.35 |
| ε | “相等”分类的容差带 | 5 点 |
| τ | ZigZag 反转阈值 | 6.6 点 |
价格水平比较
| 代码 | 含义 | 条件 |
|---|---|---|
| HL | 更高的低点 | L₂ > L₀ + ε |
| EL | 相等的低点 | |L₂ − L₀| ≤ ε |
| LL | 更低的低点 | L₂ < L₀ − ε |
| HH | 更高的高点 | H₃ > H₁ + ε |
| EH | 相等的高点 | |H₃ − H₁| ≤ ε |
| LH | 更低的高点 | H₃ < H₁ − ε |
第 1 部分:双转折点模式(上行-下行)
模式:L₀ → H₁ → L₂(一段上行腿,一段下行腿)
基础分类(3 类)
每个上行-下行三元组都恰好属于以下一类:
| 类别 | 条件 | 含义 | 频率 |
|---|---|---|---|
| EL | |L₂ − L₀| ≤ ε | 相等的低点(回测) | ~20–30% |
| HL | L₂ > L₀ + ε | 更高的低点(回调) | ~50–60% |
| LL | L₂ < L₀ − ε | 更低的低点(跌破) | ~10–20% |
细粒度分类:9 种 FD 分箱变体
HL 和 LL 均使用 Freedman-Diaconis 分箱,根据标准化坐标细分为 4 个子类:
- HL 分箱使用 z = (L₂ − L₀) / (H₁ − L₀),范围为 0 到 1
- LL 分箱使用 o = (L₀ − L₂) / ATR₁₄,范围为 0 到 ∞
| 变体 | z 或 o 范围 | 市场状态 | 概率 |
|---|---|---|---|
| EL | |z| ≤ ε_r | 回测——支撑位重新确立 | 20–30% |
| HL-FD1 | 0.75 < z < 1.0 | 浅回调——买方掌控局势 | 20–25% |
| HL-FD2 | 0.50 < z ≤ 0.75 | 中度回调——Fib 38–50% | 15–20% |
| HL-FD3 | 0.25 < z ≤ 0.50 | 深度回调——Fib 61.8% | 10–15% |
| HL-FD4 | 0 < z ≤ 0.25 | 几乎完全回撤——勉强守住 | 5–10% |
| LL-FD1 | o ≤ q₂₀ | 微幅跌破——短暂的假突破 | 8–12% |
| LL-FD2 | q₂₀ < o ≤ q₄₀ | 浅幅跌破——中度恐慌 | 4–8% |
| LL-FD3 | q₄₀ < o ≤ q₆₀ | 深幅跌破——结构性破位 | 2–5% |
| LL-FD4 | o > q₆₀ | 极端跌破——尾部事件 | <2% |
交易含义
| 类型 | 入场信号 | 止损 | 目标 |
|---|---|---|---|
| EL | 从 L₀+ε 做多 | L₀−ε | H₁ + ΔH |
| HL-FD1 | 从 L₂ 做多 | L₂−ε | H₁ + ΔH |
| HL-FD2 | 确认时做多 | L₂−ε | 前高 + ΔH |
| HL-FD3 | 缩小仓位;等待 | L₂−ε | 支撑位 + ΔH |
| HL-FD4 | 风险极高;避免 | L₂−ε | 关键位 |
| LL-FD1 | 做空尖峰行情 | L₂+尖峰 | L₀ |
| LL-FD2 | 等待反转 | 突破 | L₀ |
| LL-FD3 | 做空延续行情 | 反转 | 新低 |
| LL-FD4 | 危机模式;对冲 | 恐慌性抛售 | 待定 |
可选的子分类标记
可附加到任意类型,以提供更丰富的背景信息:
| 标记 | 含义 | 信号 |
|---|---|---|
| +C | H₁→L₂ 之间任一收盘价 < L₀ | 看跌承诺更强 |
| +S | L₂ 在单根 K 线内出现(尖峰) | 急剧反转;均值回归 |
| +X | 仅影线跌破 L₀,收盘价未跌破 | 流动性扫荡;假突破 |
示例标签:HL-FD2+C、LL-FD4+S+C、EL+X
第 2 部分:三枢轴形态(上涨-下跌-上涨)
形态:L₀ → H₁ → L₂ → H₃(上涨段、下跌段、上涨段)
9 种穷尽性类型
两个相互独立的维度,各有 3 种取值 = 3×3 = 9 种互斥且穷尽的类型。
维度 1 — L₂ 与 L₀ 的关系:{HL,EL,LL}
维度 2 — H₃ 与 H₁ 的关系:{HH,EH,LH}
| # | L₂ 与 L₀ 的关系 | H₃ 与 H₁ 的关系 | 名称 | 市场状态 |
|---|---|---|---|---|
| 1 | HL | HH | 延续性冲动 | 牛市趋势延续 |
| 2 | HL | EH | 双顶测试 | 震荡区间,看涨倾向 |
| 3 | HL | LH | 三角形收敛 | 中性盘整 |
| 4 | EL | HH | 区间向上突破 | 看涨转变 |
| 5 | EL | EH | 矩形 | 多空均衡区间 |
| 6 | EL | LH | 平底处的较低高点 | 震荡区间,看跌倾向 |
| 7 | LL | HH | V 形反转 / 弹簧效应 | 看涨反转 |
| 8 | LL | EH | 下破后停滞 | 波动区间 |
| 9 | LL | LH | 反弹失败 | 熊市趋势延续 |
穷尽性证明
所有类型均满足以下必要约束:
- L₀ < H₁(存在第一段上涨趋势)
- L₂ < H₁(回撤未超过峰值)
- H₃ > L₂(存在第二段上涨趋势)
L₂ 与 L₀ 恰有 3 种关系(更高、相等、更低)。H₃ 与 H₁ 恰有 3 种关系(更高、相等、更低)。这两个维度相互独立,没有任何约束会排除任何组合。因此共有 3 × 3 = 9 种类型,全部可行,无一遗漏。
自然分组
- 看涨(4):HL+HH、EL+HH、HL+EH、LL+HH
- 中性(3):HL+LH、EL+EH、LL+EH
- 看跌(2):EL+LH、LL+LH
市场状态分类
| 市场状态 | 类型 |
|---|---|
| 趋势延续 | HL+HH(牛市)、LL+LH(熊市) |
| 区间盘整 | HL+LH、EL+EH、LL+EH |
| 看涨转变 | EL+HH、HL+EH |
| 看跌转变 | EL+LH |
| 反转 | LL+HH |
第 3 部分:27 种扩展
将 H₃ vs L₀ 添加为第三个独立维度:
- L₂ vs L₀:{HL, EL, LL}
- H₃ vs H₁:{HH, EH, LH}
- H₃ vs L₀:{Above, Equal, Below}
由此得到 3×3×3 = 27 种子变体。由于约束条件,其中一些在数学上不可能成立(例如,HL+LH+H₃<L₀ 要求 H₃ < L₀ < L₂ < H₃,这自相矛盾)。
分析师通常会将这个第三维度简化为二元分类:“重新收复 L₀”与“未能重新收复 L₀”。
Epsilon 容差带
容差带 ε 决定了“相等”的含义。它会根据波动率和微观结构进行调整。
核心公式
ε = min(ε_max, max(ε_min, √[(a·S)² + (b·ATR₁₄)²]))
其中:
- S = 滚动点差中位数(买卖价差)
- ATR₁₄ = 14 根 K 线的真实波幅均值
- a = 2.0(点差缩放系数)
- b = 0.05(M5-M30)或 0.07(H1-D1)
上下界(EURUSD 默认值)
ε_min = max(3 ticks, 1×S) = max(0.00003, S)
ε_max = min(5 pips, 0.20 × swing) = min(0.00050, 0.20 × W)
使用 ε 进行分类
ε_r = ε / W (relative tolerance)
EL if |z| ≤ ε_r
HL if z > ε_r
LL if z < −ε_r
实用备用方案
如果无法获取买卖价差:
- 仅使用 ATR:ε = 0.05 × ATR₁₄(M5-M30),0.07 × ATR₁₄(H1-D1)
- 固定区间:3 点(盘中)、5 点(波段)、10 点(日线)
如需查看完整的计算示例和敏感性分析,请阅读 references/epsilon-tolerance-detail.md。
Freedman-Diaconis 分箱
FD 规则根据数据计算统计意义上的最优分箱边界:
h = 2 × IQR(X) × n^(-1/3) (bin width)
K = clip(⌈(max−min) / h⌉, 3, 6) (number of bins)
edges = linspace(min, max, K+1)
HL 形态的处理流程
- 收集 2-3 年的 UP-DOWN 三元组
- 筛选 HL(z > ε_r)
- 将 z 缩尾至 0.5%-99.5%
- 根据 z ∈ (ε_r, 1) 计算 FD 分箱边界
- 标记:从最浅的 HL-FD1 到最深的 HL-FDK
LL 形态的处理流程
- 筛选 LL(z < −ε_r)
- 计算 o = (L₀ − L₂) / ATR₁₄
- 将 o 缩尾至 0.5%-99.5%
- 根据 o ∈ (ε_r, ∞) 计算 FD 分箱边界
- 标记:从微小的 LL-FD1 到极端的 LL-FDK
每月或每季度重新计算分箱边界,以跟踪市场状态漂移。如果样本少于 400,则改用分位数分箱。
实现参考
qta Rust crate(crates/qta/)实现了核心 ZigZag 状态机,用于生成此分类框架所使用的枢轴点:
ZigZagConfig::new(reversal_depth, epsilon_multiplier, bar_threshold_dbps)ZigZagState::process_bar(&bar) → ZigZagOutput,其中completed_segment包含base_class(EL/HL/LL)和 z 分数- 该 crate 会根据每个枢轴点的
bar_threshold_dbps动态计算 τ 和 ε
本技能中的分类框架会在该 crate 的输出基础上,扩展 FD 分箱、三枢轴分析和市场状态标记。
深入参考文件
如需查看 ASCII 可视化图、计算示例和实现伪代码,请按需阅读以下参考文件:
| 文件 | 内容 |
|---|---|
references/notation-definitions.md | 唯一事实来源:所有符号、公式、缩写和形态类别 |
references/two-pivot-variants.md | 全部 9 种双枢轴 ASCII 图、交易规则和标志示例 |
references/three-pivot-variants.md | 全部 9 种三枢轴 ASCII 图、27 种扩展和 HL+LH 粒度子变体 |
references/epsilon-tolerance-detail.md | 完整的 ε 公式、计算示例、敏感性分析和伪代码 |
references/binning-methodology.md | Freedman-Diaconis 算法详情、FD 与分位数比较及计算示例 |
references/data-pipeline.md | 11 步端到端流程:原始报价 → OHLC → ATR → 枢轴点 → 分类 → 输出 |
references/eurusd-validation-scenarios.md | 3 个市场计算示例(正常、波动、崩盘),用于验证 ε 和 τ |
执行后反思
此技能执行完毕后,关闭前请检查:
- 命令是否成功? — 如果没有,修复导致失败的指令或错误表。
- 参数或输出是否发生变化? — 如果底层工具的接口发生偏移,请更新 Usage 示例和 Parameters 表以保持一致。
- 是否需要变通方案? — 如果你不得不临时调整(更换标志、增加步骤),请更新此 SKILL.md,以便下次调用时无需采用相同的变通方案。
只有问题确实存在且可复现时才进行更新,不要基于猜测更新。