您应该了解的MQL5向导技巧(第 75 部分):动量震荡指标与包络线的应用·综合运用
(3/3)·USDJPY 30分钟回测显示10种协同信号,本文聚焦其中4种高概率组合的应用细节
AO 极区急转叠加包络线破位
这一形态专抓某一方向极端动量后的爆发性反转。以看涨版为例:市场经历大幅抛售,AO 跌入深度超卖,随后仅用几根 K 线就穿越零轴转正,同时价格收在包络线上轨之外。动量从卖方碾压到买方突袭,往往由新闻类催化剂触发,本质是 V 型反转。 看跌版逻辑镜像:AO 从超买急坠至零轴下,价格跌破包络线下轨,形成向下突破。它量化的是动量翻转本身,而非趋势延续。 关键前提是背景——此前的极端动量不可持续且出现了实质触发因素。若缺了催化剂,你可能只是看到上涨趋势里一次波动率放大后的回调,原趋势仍完好。回测显示该形态前瞻表现与形态 1 相当,效果显著。 下面这段 MQL5 判断函数可直接拷进 EA 验证。它用前三根 K 线(X()+2 到 X())的 AO 与包络线收官关系锁定信号:
class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Check for Pattern class="num">7. \ class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">bool CSignalAO_Envelopes::IsPattern_7(class="type">ENUM_POSITION_TYPE T) { if ( T == POSITION_TYPE_BUY && AO(X() + class="num">2) > class="num">0.0 && AO(X() + class="num">1) > AO(X() + class="num">2) && AO(X()) > AO(X() + class="num">1) && Close(X() + class="num">2) <= Envelopes_Lo(X() + class="num">2) && Close(X() + class="num">1) > Envelopes_Lo(X() + class="num">1) && Close(X()) > Close(X() + class="num">1) ) { class="kw">return(true); } else if ( T == POSITION_TYPE_SELL && AO(X() + class="num">2) < class="num">0.0 && AO(X() + class="num">1) < AO(X() + class="num">2) && AO(X()) < AO(X() + class="num">1) && Close(X() + class="num">2) >= Envelopes_Up(X() + class="num">2) && Close(X() + class="num">1) < Envelopes_Up(X() + class="num">1) && Close(X()) < Close(X() + class="num">1) ) { class="kw">return(true); } class="kw">return(class="kw">false); }
class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Check for Pattern class="num">7. \ class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">bool CSignalAO_Envelopes::IsPattern_7(class="type">ENUM_POSITION_TYPE T) { if ( T == POSITION_TYPE_BUY && AO(X() + class="num">2) > class="num">0.0 && AO(X() + class="num">1) > AO(X() + class="num">2) && AO(X()) > AO(X() + class="num">1) && Close(X() + class="num">2) <= Envelopes_Lo(X() + class="num">2) && Close(X() + class="num">1) > Envelopes_Lo(X() + class="num">1) && Close(X()) > Close(X() + class="num">1) ) { class="kw">return(true); } else if ( T == POSITION_TYPE_SELL && AO(X() + class="num">2) < class="num">0.0 && AO(X() + class="num">1) < AO(X() + class="num">2) && AO(X()) < AO(X() + class="num">1) && Close(X() + class="num">2) >= Envelopes_Up(X() + class="num">2) && Close(X() + class="num">1) < Envelopes_Up(X() + class="num">1) && Close(X()) < Close(X() + class="num">1) ) { class="kw">return(true); } class="kw">return(class="kw">false); }
◍ 突破轨道后的轻触回踩怎么用 AO 卡位
包络线被强势捅穿之后,价格不一定一路不回头。更常见的剧本是拉出一波爆发,随后小幅回撤去“碰”一下刚被突破的轨道——只要不重新掉回通道内部,这次轻触就是对新支撑或阻力的确认。 以多头为例:价格因趋势段或前期形态急剧站上包络线上轨,随后回调,但最低点始终悬在上轨上方。此时原上轨转化为支撑,AO 必须维持在零轴上方相对高位,允许因回调略微下沉,但不能翻绿。动量只是暂停,不是消散。 空头镜像相反:价格跌破下轨后反抽,高点仍被压在下轨之下,下轨变成阻力,AO 持续为负。这种结构给“修复性反弹做空”提供了一个倾向延续跌势的入场窗口,外汇与贵金属品种下需警惕假突破,杠杆环境高风险。 实盘回测里,这套回踩确认(形态 8)是系列中第一个前瞻样本没能跑出正收益的形态,说明单纯轨道回踩 + AO 极值并不足够,必须叠加更高层过滤。代码层判定逻辑如下,注意它只检查了连续三根 K 线的收线与 AO 台阶,未限制回踩幅度。
class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Check for Pattern class="num">8. | class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">bool CSignalAO_Envelopes::IsPattern_8(class="type">ENUM_POSITION_TYPE T) { if ( T == POSITION_TYPE_BUY && AO(X() + class="num">2) > class="num">0.0 && AO(X() + class="num">1) > AO(X() + class="num">2) && AO(X()) > AO(X() + class="num">1) && Close(X() + class="num">2) > Envelopes_Up(X() + class="num">2) && Close(X() + class="num">1) > Close(X() + class="num">2) && Close(X()) > Close(X() + class="num">1) ) { class="kw">return(true); } else if ( T == POSITION_TYPE_SELL && AO(X() + class="num">2) < class="num">0.0 && AO(X() + class="num">1) < AO(X() + class="num">2) && AO(X()) < AO(X() + class="num">1) && Close(X() + class="num">2) < Envelopes_Lo(X() + class="num">2) && Close(X() + class="num">1) < Close(X() + class="num">2) && Close(X()) < Close(X() + class="num">1) ) { class="kw">return(true); } class="kw">return(class="kw">false); }
「用包络线斜率配 AO 抓趋势起点」
这形态不赌顶底,只做一件事:当包络线从走平转为明显倾斜、同时 AO 跨过零轴并站稳,就判定横盘结束、趋势可能开启。看涨时上轨逐根抬高,价格首破中轨或上轨新高;AO 此前在零轴附近晃,如今连续绿柱留在正值区。看跌镜像反之,下轨逐级下移、AO 锁在负值。 它比抓反转的形态更轻量,本质是把「市场脱离震荡」这件事用两条线确认下来。美元兑日元 30 分钟、两年样本里,这类前置形态的历史回测同样没跑出正收益,和同系列几个形态一样仅供识别、不直接当开仓依据。外汇及贵金属杠杆高,信号失效常见,真要上車得自配止损。 MQL5 里写成一个返回布尔的函数,逻辑拆开看: // 函数声明:传入期望仓位方向 T bool CSignalAO_Envelopes::IsPattern_9(ENUM_POSITION_TYPE T) { if ( T == POSITION_TYPE_BUY && // 只看多单场景 AO(X() + 2) > AO(X() + 1) && // 前两根 AO 递增 AO(X() + 1) > AO(X()) && // 前一根 AO 也递增 AO(X()) > 0.0 && // 当前 AO 在零轴上方 Close(X() + 2) > Envelopes_Mid(X() + 2) && // 前二根收在中轨上 Close(X() + 1) <= Envelopes_Mid(X() + 1) && // 前一根收在中轨下或持平 Close(X()) > Envelopes_Mid(X()) // 当前收又回中轨上 ) { return(true); } // 满足则判为多头形态 else if ( T == POSITION_TYPE_SELL && // 空单镜像条件 AO(X() + 2) < AO(X() + 1) && AO(X() + 1) < AO(X()) && AO(X()) < 0.0 && Close(X() + 2) < Envelopes_Mid(X() + 2) && Close(X() + 1) >= Envelopes_Mid(X() + 1) && Close(X()) < Envelopes_Mid(X()) ) { return(true); } return(false); // 都不符返回假 } 把这段代码塞进你自己的信号类,接上 EURUSD 或 XAUUSD 的 30 分钟图,把 Envelopes 周期调成和原文一致的参数,就能在 MT5 策略测试器里复现「倾斜+偏移」的触发时刻。
class=class="str">"cmt">//+------------------------------------------------------------------+ class=class="str">"cmt">//| Check for Pattern class="num">9. | class=class="str">"cmt">//+------------------------------------------------------------------+ class="type">bool CSignalAO_Envelopes::IsPattern_9(class="type">ENUM_POSITION_TYPE T) { if ( T == POSITION_TYPE_BUY && AO(X() + class="num">2) > AO(X() + class="num">1) && AO(X() + class="num">1) > AO(X()) && AO(X()) > class="num">0.0 && Close(X() + class="num">2) > Envelopes_Mid(X() + class="num">2) && Close(X() + class="num">1) <= Envelopes_Mid(X() + class="num">1) && Close(X()) > Envelopes_Mid(X()) ) { class="kw">return(true); } else if ( T == POSITION_TYPE_SELL && AO(X() + class="num">2) < AO(X() + class="num">1) && AO(X() + class="num">1) < AO(X()) && AO(X()) < class="num">0.0 && Close(X() + class="num">2) < Envelopes_Mid(X() + class="num">2) && Close(X() + class="num">1) >= Envelopes_Mid(X() + class="num">1) && Close(X()) < Envelopes_Mid(X()) ) { class="kw">return(true); } class="kw">return(class="kw">false); }
记住这一条就够了
AO 搭配包络通道的这组策略,回测只跑了一年训练加一年前瞻,样本窗口本身偏短,外汇和贵金属又是高杠杆高风险品种,直接搬上实盘很容易撞上样本外失效。 形态 8 和形态 9 在前瞻测试里表现拉胯,后续打算用监督学习去救,但这事没验证完之前别当结论用。 真要动手,先把文末的向导附件丢进 MT5 向导里组个 EA,换几个不同波段的市场重跑一遍,比看任何总结都实在。