逆转形态:测试双顶/双底形态(基础篇)
📘

逆转形态:测试双顶/双底形态(基础篇)

第 1/3 篇

◍ 用双顶双底抓反转的第一道验证

双顶与双底属于价格行为里最常被提起的逆转形态,但在 MT5 上不能只看形状就开仓。真正有过滤价值的,是右峰/右底相对左峰/左底的量能与触碰次数——第二次测试若伴随成交量萎缩,反转倾向更高。 外汇与贵金属杠杆高、跳空频繁,双顶双底假突破概率不低,任何信号都只能当作概率优势而非确定性结论。 在 MQL5 里可以用 iSAR 或 iMACD 辅助确认右肩动能衰竭,但核心仍是两个波峰/波谷的空间对称。打开 MT5 的 EURUSD 日线,把 2018 年 12 月前后的区间调出来,能直接看到这类形态在真实报价里的毛刺。

价格行为形态的工程化拆解路径

把裸K形态当成可计算对象,第一步不是画趋势线,而是先定义「极值」与「形态」两套搜索逻辑。MQL5 下做这类事,本质是用数组扫高低点,再套几何约束判定形状,而不是靠肉眼在图表上圈。 原文给出的落地顺序很直接:先列形态形成的理论观点,再给三个案例(案例1~3)做交易策略对照,随后进入 EA 创建——细分到搜索极值、搜索形态、开发 EA 三段,最后用策略测试收口。这条链路对外汇与贵金属交易者意味着:高波动品种上手动复盘几百根K不现实,用 EA 批量扫历史才有概率样本。 外汇与贵金属属高风险市场,任何形态策略回测胜率都只是历史概率,实盘可能显著漂移。建议先在 MT5 策略测试器里用 2020—2023 年 XAUUSD 的 M15 数据跑通搜索逻辑,再谈参数优化。

「趋势市里及早入场更划算」

此前一篇关于趋势持续性的统计显示,价格约有 60% 的时间处在趋势运行中。这个时间占比意味着,若能在趋势刚启动时就介入,而不是等反转确认,结果的期望往往更好。 等待趋势逆转点固然能抓到拐点,但这类信号伴随大量伪逆转形态,过滤成本很高。双顶与双底之所以被普遍采用,是因为它们在反转家族里辨识度最高、也最容易用程序化方式定义。 对外汇和贵金属这类高波动品种,趋势惯性虽强,但假突破频繁,早入场必须配合止损和仓位控制,否则 60% 的趋势概率也会被少数大回撤吃掉。

◍ 双顶双底为何总卡在关键位

双顶或双底在价格图上出现频率很高,其底层逻辑和价位交易理论直接挂钩。当价格走到前期趋势对应的支撑或阻力带,且第二次测试同一价位后没有突破、反而回滚,这类形态往往意味着原趋势临近尾声。 反转的触发并不神秘:逆势单在价位回滚时被陆续挂出,把价格往调整方向推;与此同时,顺势持仓者要么兑现利润、要么砍掉亏损单以避免假突破,双方合力让调整走势拿到动量,新趋势由此萌芽。外汇与贵金属市场杠杆高,这类反转只是概率倾向,不等于必然翻转。 实盘里找形态别死磕顶底绝对等高,峰值落在同一支撑阻力区内、允许正常偏差即可。形态的靠谱程度,基本由它依托的价位级别强度决定——周线级别的阻力带做出的双顶,比五分钟杂波里的双底值得多看一眼。

双顶底的三种入场打法

颈线突破是最直白的入场:收盘价站上或跌破颈线即进场,止损放在顶/底线外。缺点是止损空间大,凌厉行情里蜡烛可能直接甩开颈线很远收盘,使这笔交易的盈亏比被压扁。 镜面等级思路换了个切入点——突破后等价格回抽颈线(原支撑变阻力或反之)再进,止损只放在最后一次调整极值外,止损价位显著收窄。代价是回测不一定发生,信号次数会变少。 趋势线破位入场更早:连接走势起点与颈线极值画趋势线,破线即进。相比第一种止损更低,相比第二种信号更多,但假信号也多——极值与颈线间若走出通道或旗形,往往意味着趋势延续而非反转。 三种策略的离场位统一:极值与颈线之间的垂直距离,即为目标价位。统计上双顶/双底要清晰脱影而出,两顶或两底间至少隔 6 根柱线是常见过滤条件。 颈线不应低于初始走势的斐波那契 50 等级,否则与价位理论矛盾;把第一次调整的最低价(颈线形成处)当作强度指标,能进一步滤掉弱形态。外汇与贵金属杠杆高,形态失效时回撤可能远超止损预设,验证前先用 MT5 历史数据跑一遍再上实盘。

「把极值搜索和形态识别拼成可跑的 EA」

EA 的开发从模块组装开始:先用之字折线指标抓价格极值,再把极值交给形态识别类,最后在 OnTick 里串起信号检查与新形态搜索。之字折线自带的双缓冲区里夹着大量空值,原文用 s_Extremum 结构数组替代,只存有效极值的时间和价格,内存更干净。 之字折线参数本身是妥协产物——参数偏小会把大走势切碎,偏大会吞掉短期调整。原文做法是取小参数指标,再用 CTrends 类把同向走势与短期回撤合并成一条趋势,初始化时传入指标引用和趋势延续的最小移动值 d_MinCorrection。 形态侧由 CPattern 类接管,取四个相邻极值(s_StartTrend、s_StartCorrection、s_EndCorrection、s_EndTrend)加最小/最大调整等级来判定。Search() 从指定日期向后扫,凑不齐四个极值就跳下一根;命中形态即置标志退出。入场确认放在更小时间帧,CheckSignal() 返回信号类型、-1 卖 / 1 买、止损与两个止盈位(极值线到颈线 90%、前趋势走势 90%,且第一止盈不得超第二)。 外汇与贵金属杠杆高、滑点跳空频繁,这套逻辑实盘前务必在 MT5 策略测试器用历史数据回放验证。 OnTick 分两块:确认时间帧出新柱就循环查已存形态信号;工作时间帧出新柱才搜新形态。注意确认周期不能大于工作周期,否则要改判断顺序。CheckPattern() 开仓成功后故意返回 false 把该形态从数组删掉,避免同一形态重复下单。 下面这段是极值结构与 CTrends 类头,初始化时把 CZigZag 指针和最小移动值灌进去就能跑:

MQL5 / C++
class="kw">struct s_Extremum
  {
    class="type">class="kw">datetime          TimeStartBar;
    class="type">class="kw">double            Price;
    
    s_Extremum(class="type">void)  :  TimeStartBar(class="num">0),
                         Price(class="num">0)
      {
      }
    class="type">void Clear(class="type">void)
      {
       TimeStartBar=class="num">0;
       Price=class="num">0;
      }
   };
class CTrends : class="kw">public CObject
 {
class="kw">private:
   CZigZag            *C_ZigZag;        class=class="str">"cmt">// 链接到之字折线指标对象
   s_Extremum         Trends[];         class=class="str">"cmt">// 极值数组
   class="type">int                i_total;          class=class="str">"cmt">// 保存的极值总数
   class="type">class="kw">double             d_MinCorrection;  class=class="str">"cmt">// 趋势延续的最小移动值
class="kw">public:
                     CTrends();

常见问题

等右顶回落跌破颈线并收线确认,再结合成交量萎缩或前低支撑失效,避免提前抄顶被扫。
双底有效性强弱取决于是否落在前期明显高低点或均线密集区,脱离关键位的形态胜率倾向偏低,先手绘水平线核对。
小布可在对应品种页实时标注识别到的双顶双底并提示颈线位置,你只需打开页面看信号,不用自己盯盘画线。
趋势中右底企稳低吸入场赔率可能更优,但需严控止损;突破回踩更稳但点位偏晚,按风险偏好选。
右顶略低仍算有效双顶,重点看颈线跌破与放量,形态不必完全等高,太刻板反而漏掉真反转。