谐波形态 XABCD 结构识别与 PRZ 交易实战:Vibe-Trading 谐波信号引擎深度解析
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
本文是 Vibe-Trading(个人交易 Agent)中harmonic 技能的技术指南,围绕谐波形态的 XABCD 五点结构展开:从 Gartley、Bat、Butterfly、Crab 四大经典形态的 Fibonacci 比率定义,到 PRZ(潜在反转区)的入场、止损与止盈规则,再到仓库中SignalEngine信号引擎的双后端实现与实战调用方式。读完本文,你将掌握谐波形态的完整识别标准、比率容差工程化方法,以及如何在 Vibe-Trading 中将形态信号接入你的交易工作流。
XABCD 形态识别原理:五个点定义一段可交易的走势
谐波形态(Harmonic Patterns)属于 Fibonacci 几何学派,其核心思想是:价格走势并非随机,而是在特定位置存在可预测的拐点。这种可预测性来自价格在关键区间的回撤(Retracement)与扩展(Extension)比率——这些比率由 Fibonacci 数列演化而来(0.382、0.5、0.618、0.786、0.886、1.27、1.618、2.618、3.618 等)。
任何谐波形态都由5 个关键点构成,按时间顺序依次为:
X → A → B → C → D其中每两段走势之间存在精确的 Fibonacci 比率关系:
| 线段 | 含义 | 比率计算 |
|---|---|---|
| XA | 第一段主要趋势 | 后续回撤与扩展的基准 |
| AB | 对 XA 的回撤(B 点回撤) | AB / XA |
| BC | 对 AB 的回撤 | BC / AB |
| CD | 对 BC 的扩展 | CD / BC |
| AD | 最终价格延伸(D 点回撤) | AD / XA |
D 点是整个形态的落点:当价格运行到 D 点时,形态宣告完成,此处是潜在的反转区域。D 点的位置由前四段走势共同约束,因而比单一的回撤位或扩展位具有更高的确定性。
需要特别说明的是:原文档 XABCD形态.md 给出的是各形态的理论标准比率(如 AB = 0.618 × XA),而实际工程实现中,这些比率都是以范围 + 容差的形式落地,我们会在后文结合源码展开。
四大经典谐波形态详解
谐波形态家族中,应用最广、信号质量最受认可的四大形态分别是 Gartley、Bat、Butterfly、Crab。它们共享 XABCD 五点骨架,差异在于B 点回撤深度与D 点延伸程度不同,由此形成各自独特的几何轮廓。
Gartley 形态(222 形态)
Gartley 形态因其发表于 1932 年的第 222 页而得名,是最古老、最经典的谐波形态。其关键比率:
- AB =0.618× XA(B 点回撤约 61.8%)
- BC = 0.382–0.886 × AB
- CD = 1.27–1.618 × BC
- D = 0.786 × XA(关键)——D 点由 XA 的 78.6% 回撤位精确定位
方向判定规则:
- 看涨 Gartley:X 为低点、A 为高点,价格经 B、C 两段整理后回落至 D 点(位于 XA 中段下方),D 点在底部完成反转;
- 看跌 Gartley:X 为高点、A 为低点,价格反弹至 D 点(位于 XA 中段上方),D 点在顶部完成反转。
Gartley 形态的 D 点不超出 X 点范围,属于收敛型形态,适合在 D 点确认反转信号后入场。
Bat 蝙蝠形态
Bat 形态由 Carney 发现并推广,与 Gartley 的核心区别在于B 点回撤更浅:
- AB = 0.382–0.5 × XA(B 点仅回撤 38.2%–50%,浅回撤)
- BC = 0.382–0.886 × AB
- CD = 1.618–2.618 × BC(CD 段延伸明显)
- D = 0.886 × XA(关键)——D 点深达 XA 的 88.6% 回撤
由于 B 点回撤浅而 D 点回撤深,Bat 形态整体呈现"浅 B 深 D"的拉伸结构。0.886 是极其接近 1.0 的深回撤位,意味着 D 点往往出现在趋势的极深处,反转概率与止损空间需要结合 PRZ 区域综合评估。
Butterfly 蝴蝶形态
Butterfly 是唯一 D 点超出 X 点的形态:
- AB =0.786× XA(B 点深回撤至 78.6%)
- BC = 0.382–0.886 × AB
- CD = 1.618–2.618 × BC
- D = 1.27 × XA(超出 X 点)——D 点延伸至 XA 的 127%,彻底穿越 X 点的价格极值
形态的命名源于其展开后的轮廓酷似蝴蝶。由于 D 点突破 X 点,它属于扩展型形态,价格在 D 点创出新高/新低后反转,属于典型的风险区反转交易。
Crab 螃蟹形态
Crab 螃蟹形态是最极端的谐波形态,具有最远的 D 点延伸:
- AB = 0.382–0.618 × XA
- BC = 0.382–0.886 × AB
- CD =2.24–3.618× BC(CD 段暴力延伸)
- D = 1.618 × XA(关键,最远延伸)——D 点为 XA 的 161.8% 扩展位
Crab 形态要求 CD 段走出 2.24 至 3.618 倍的极端延伸,D 点位于 1.618 扩展位,是谐波家族中价格波动最剧烈、形态最难成立的形态;一旦完整成立并反转,往往对应一轮强劲的趋势逆转行情。
四大形态速查表
综合 SKILL.md 中的形态总览与 XABCD 参考文档,四种形态的对照关系如下:
| 形态 | B 点回撤(AB/XA) | D 点回撤(AD/XA) | D 点相对 X 点 | 特性 |
|---|---|---|---|---|
| Gartley | 0.618 | 0.786 | 未超出 | 经典收敛形态 |
| Bat | 0.382–0.5 | 0.886 | 未超出 | 浅 B 深 D |
| Butterfly | 0.786 | 1.27 | 超出 | 深 B 深 D |
| Crab | 0.382–0.618 | 1.618 | 大幅超出 | 最远延伸、最极端 |
比率容差工程化:源码中的形态定义
理论比率是"教科书标准",但真实行情极少走出精确到小数点后三位的完美比率。Vibe-Trading 的谐波信号引擎将每个比率定义为区间 + 容差(tol),落在区间内的结构即视为该形态的候选。见 example_signal_engine.py 中的PATTERNS字典:
| 形态 | B 回撤区间 | D 回撤区间 | BC/AB | CD/BC |
|---|---|---|---|---|
| Gartley | 0.55–0.68 | 0.72–0.84 | 0.382–0.886 | 1.27–1.618 |
| Bat | 0.33–0.55 | 0.82–0.94 | 0.382–0.886 | 1.618–2.618 |
| Butterfly | 0.72–0.84 | 1.20–1.38 | 0.382–0.886 | 1.618–2.618 |
| Crab | 0.33–0.68 | 1.52–1.72 | 0.382–0.886 | 2.24–3.618 |
对比可见:
- Gartley 的 B 点区间 0.55–0.68 以 0.618 为中心;
- Bat 的 B 点区间 0.33–0.55 对应 0.382–0.5 的浅回撤,D 点区间 0.82–0.94 对应 0.886;
- Butterfly 的 B 点区间 0.72–0.84 对应 0.786,D 点区间 1.20–1.38 以 1.27 为中心,明确超出 1.0(超出 X 点);
- Crab 的 D 点区间 1.52–1.72 以 1.618 为中心,是唯一 D 回撤区间整体高于 1.5 的形态。
实际判定时,_classify_pattern函数先计算b_retrace = AB/XA、d_retrace = AD/XA、bc_ratio = BC/AB、cd_ratio = CD/BC四个比率,再依次与各形态的区间匹配;主校验条件是B 回撤与 D 回撤两个核心比率,命中即判为该形态。比率匹配的容差tol默认值为 0.12(SignalEngine.__init__),可通过构造参数调整——容差越大,检出率越高,但误报也随之增加。
从形态到信号:PRZ(潜在反转区)交易规则
形态识别完成只是第一步,真正的交易发生在PRZ(Potential Reversal Zone,潜在反转区)。PRZ 的定义见 PRZ交易.md 与 SKILL.md:
- PRZ 是多个 Fibonacci 水平汇聚的价格区域——D 点完成时所在的价格区带;
- 它是多个 Fibonacci 投影(如 0.786/0.886/1.27/1.618 回撤与扩展位)的交汇点;
- 多个独立比率同时指向同一价格区域,意味着这里具有高概率反转属性。
入场规则
- 在 PRZ 区域等待价格反应(出现反转 K 线形态,如吞没、锤子、十字星等确认信号)后再入场;
- 不要在 D 点未确认前提前入场——形态未完成前入场,D 点可能继续延伸(尤其在 Butterfly 与 Crab 这类扩展型形态中)。
止损规则
- 看涨形态:止损设在 D 点下方;
- 看跌形态:止损设在 D 点上方;
- 止损距离通常为PRZ 区域宽度的 1–1.5 倍,为价格在区域内正常波动预留缓冲。
止盈规则(三段式目标)
- 第一目标:AD 腿的 0.382 回撤位;
- 第二目标:AD 腿的 0.618 回撤位;
- 第三目标:A 点(完整回撤至形态起点)。
这样的止盈结构让单笔交易形成"先保本、后趋势"的递进式获利了结。
注意事项
- 谐波形态完成不代表必然反转——D 点是高概率区域而非确定性保证;
- 需要配合量能和 K 线形态确认,信号引擎只给出形态结构结论,最终入场需结合确认信号;
- 高级时间框架的形态更可靠,日线以上级别的 XABCD 结构通常优于分钟级。
工程实现:双后端信号检测架构
Vibe-Trading 的 harmonic 技能在工程上采用了"优先第三方库、失败自动回退"的双后端设计,完整实现位于 example_signal_engine.py。
后端一:pyharmonics 库(优先)
SignalEngine._check_pyharmonics()在初始化时尝试导入pyharmonics.technicals.OHLCTechnicals,导入成功则标记use_pyharmonics = True。_detect_patterns_pyharmonics通过OHLCTechnicals(df, is_stock=is_stock)拟合形态,从tech.bullish/tech.bearish矩阵中提取各形态的 D 点索引与价格。
pyharmonics 是可选依赖:需要显式安装扩展包pip install "vibe-trading-ai[harmonic]"才会生效(见 SKILL.md 与 requirements.txt 中的注释)。仓库的打包配置在 pyproject.toml 中定义了harmonic可选依赖组(pyharmonics>=1.5.0),测试 test_packaging_dependencies.py 也专门验证了"pyharmonics 不是核心安装依赖、仅作为可选 extra 提供"——这一设计保证了未安装该库的用户基线安装不受影响。
后端二:内置检测器(回退)
当 pyharmonics 不可用(未安装或调用抛异常)时,引擎回退到自研检测器,流程为:
- 摆动点检测:
_find_swings使用滚动窗口法(半窗口swing_window,默认 10,实际窗口为 2×10+1=21 根 K 线)识别摆动高/低点; - 摆动点合并:
_merge_swings按时间排序并压缩连续同类型点(高点取更高、低点取更低),形成交替的高/低点序列; - 五点组合枚举:滑动窗口每次取 5 个连续摆动点作为 X-A-B-C-D 候选,并校验 5 点必须高低交替;
- 比率分类:
_classify_pattern按上文 PATTERNS 区间规则判定形态名称; - 方向判定:X 点为摆动低点则形态为 bullish(看涨),X 点为摆动高点则为 bearish(看跌)。
信号生成与信号约定
SignalEngine.generate(data_map)接收{标的代码: OHLCV DataFrame}映射,对每个标的逐一点位写入信号,最终返回{标的代码: 信号 Series}。信号约定与 SKILL.md 一致:
1= 做多(long)-1= 做空(short)0= 观望(stand aside)
看涨形态在 D 点时刻置1,看跌形态置-1。同时引擎内置了数据量下限保护:当 K 线数量少于swing_window * 4时直接返回全 0 信号,避免短样本上产生无意义的结构识别。
实战使用:完整调用示例
example_signal_engine.py自带主入口,可直接对 OKX 主流币种运行演示。运行逻辑为:
- 通过
_fetch_okx拉取BTC-USDT、ETH-USDT、SOL-USDT的 1D K 线(各 300 根,来自 OKX 公开行情接口,OHLCV 数据经过类型转换并设置 datetime 索引); - 实例化
SignalEngine(is_stock=False)并打印当前实际使用的检测后端(pyharmonics 或内置检测器); - 调用
engine.generate(data_map)生成全标的全周期信号序列; - 输出各标的的做多/做空信号数量与最近信号日期,并打印最近 5 个形态的
形态名(方向)D 点时间详情。
核心调用仅需三行:
from harmonic.example_signal_engine import SignalEngine # 或直接引用技能目录 engine = SignalEngine(is_stock=False) signals = engine.generate(data_map) # signals["BTC-USDT"].value_counts() -> 1 / -1 / 0 分布SignalEngine的三个构造参数:
| 参数 | 默认值 | 说明 |
|---|---|---|
is_stock | False | 标的是否为股票(影响 pyharmonics 的is_stock分析参数) |
swing_window | 10 | 摆动点检测半窗口(仅内置检测器使用) |
tol | 0.12 | Fibonacci 比率匹配容差(仅内置检测器使用) |
generate的输入 DataFrame 要求包含open/high/low/close列,索引为 datetime;对加密标的传入is_stock=False,对股票标的传入is_stock=True。
在 Agent 与 Swarm 中的集成
harmonic 技能在 Vibe-Trading 中不止于独立脚本,还以 Agent 技能(Skill)的形式接入多 Agent 协作。仓库的 Swarm 预设 technical_analysis_panel.yaml 中配置了harmonic_analyst分析师 Agent:
- 角色定位:资深谐波形态分析师,专门识别 Butterfly、Crab、Gartley、Shark、Bat、Three Drives 等形态,用 Fibonacci 定位 PRZ 入场/离场点并评估风险回报比;
- 工作方式:对指定标的与时间框架扫描谐波形态,评估 PRZ 的可交易性(tradeability),使用
load_skill("harmonic")加载技能; - 输出契约:与其他经典 TA(K 线、Ichimoku、波浪、SMC)Agent 并行分析后,由信号聚合器对共识与共振进行评分,谐波信号作为汇总评分的一部分参与权重调节。
这一编排意味着:谐波形态技能可以独立跑回测,也可以在 Agent 盘中分析中被实时调用,与其他技术分析流派共同形成多因子共识。此外,agent/SKILL.md 将"谐波形态"列入技术分析能力矩阵,说明该技能是 Vibe-Trading 内置的策略能力之一。
局限性与使用建议
结合参考文档与源码,使用谐波信号引擎时有几点需要明确:
- 形态识别是必要条件而非充分条件:引擎输出的只是"结构上满足 Fibonacci 比率约束"的候选,反转是否成立还需量能、K 线确认与更高时间框架验证;
- 比率容差需要调优:
tol=0.12是默认值,不同市场(加密、股票、外汇)的噪声水平不同,可通过回测调整容差与swing_window平衡检出率与误报率; - 数据长度限制:检测器依赖足够的摆动点,数据量过少时引擎自动放弃检测(返回全 0),建议至少保留数百根 K 线;
- D 点未确认前不交易:尤其对 Butterfly、Crab 等 D 点超出 X 点的扩展型形态,D 点区域可能进一步延伸,严格等待确认信号可显著降低提前入场的风险。
掌握 XABCD 的比率结构、理解 PRZ 的交易规则、并能熟练驱动SignalEngine生成信号,你便可以在 Vibe-Trading 中把谐波形态从"看图说话"升级为可回测、可自动化、可被 Agent 调度执行的量化策略组件。
【免费下载链接】Vibe-Trading"Vibe-Trading: Your Personal Trading Agent"项目地址: https://gitcode.com/GitHub_Trending/vi/Vibe-Trading
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考