您应该了解的MQL5向导技巧(第 75 部分):动量震荡指标与包络线的应用
引言
动量震荡指标与包络线通道的组合,是我们正在研究的另一组指标搭配,旨在融合趋势跟踪与支撑阻力识别的协同效应。我们同样研究了从这组指标组合中可以得到的 10 种可能的信号模式,并在美元兑日元(USDJPY)30 分钟时间框架上进行回测评估,测试区间为 2023 年,前瞻测试为 2024 年。在深入讨论信号模式之前,我们先来了解每个指标的基本定义,先从动量震荡指标开始。该指标由已故的比尔・威廉姆斯开发,是一种趋势指标,通过比较资产中间价的短期均线和长期均线来计算。
动量震荡指标(AO)以直方图形式绘制,除了帮助识别趋势方向和反转信号外,还可用于识别看跌 / 看涨背离、双峰形态以及零轴穿越等信号。其经典计算公式如下:
![]()
其中:
- AOt= t 时刻动量震荡指标(AO)的值
- Mt=(Ht+Lt)/2 = t 时刻的中间价(中位价)
- Ht = t 时刻的最高价
- Lt = t 时刻的最低价
- SMA5(Mt) = 中间价的 5 周期简单移动平均线
- SMA34(Mt) = 中间价的 34 周期简单移动平均线
该指标的看涨信号通常出现在 AO 上穿零轴时,即短期动量超过长期动量。看跌信号则出现在 AO 下穿零轴时。该指标还可用于双峰策略:零轴上方或下方出现两个峰值,且后一个峰值比前一个更靠近零轴,预示着趋势方向即将发生变化,从而产生新的交易信号。该指标在趋势行情中表现出色,同时也可作为动量确认的辅助工具。
包络线通道是我们介绍的第二个指标,它通过基于百分比的偏离度,在价格移动平均线的上下方各叠加一条线。生成的两条叠加线称为通道带,即上轨和下轨。该指标用于精确定位资产价格的超买 / 超卖水平,以及波动边界。与上述在趋势行情中表现优异的 AO 不同,包络线在震荡行情(区间市场)中效果更佳。这通常意味着它很适合与均值回归策略配合使用。具体计算公式如下:

其中:
- MAt = 时刻的移动平均线(通常为简单移动平均线 SMA 或指数移动平均线 EMA)
- P = 百分比偏离度(例如 2%)
- 上轨 = 通道上边界
- 下轨 = 通道下边界
当价格触及上轨时,表示超买状态;当价格触及下轨时,则标志着超卖状态 —— 这就是包络线指标的使用方法。信号确认尤为重要,尤其是在强势趋势行情中,因为价格可能不会 "均值回归",而是沿着通道带持续运行。包络线是动态变化的:在市场波动剧烈时通道扩张,在市场平静时通道收窄。它们常与 RSI、MACD 或成交量指标等其他指标搭配使用以验证信号,因此我们将其与 AO 组合使用并不罕见。
这一组合还能产生其他协同效应,例如相比纯趋势信号,延迟更低。包络线信号始终具有前瞻性,这与依赖动量信号的纯趋势交易不同。除了前文提到的均值回归交易外,包络线不仅在震荡横盘行情中表现出色,还善于利用包络线边界处的反转预警形式,捕捉动量背离机会。
AO 极值处的包络线假突破
我们的第一个形态是经典的假突破反转信号,由 AO 的极值读数加以确认。看涨形态本质上是一次虚假的看跌突破,发生在价格短暂跌破下轨后又迅速弹回通道内部时。当这种情况发生时,AO 指标呈现出超卖状态。换言之,卖方将价格推至支撑位下方,但无力维持,标志着做空动能衰竭。通常此时 AO 处于零轴下方,是看跌动量的信号,且往往正形成局部低点。例如,直方图可能一直是红色且柱体逐渐缩小,或者你可能在假跌破时观察到 AO 出现小幅看涨背离。这种多重信号共振表明,随着价格触及极端水平,下跌动能正在减弱。我们在 MQL5 中按如下方式实现该形态:
//+------------------------------------------------------------------+ //| Check for Pattern 0. | //+------------------------------------------------------------------+ bool CSignalAO_Envelopes::IsPattern_0(ENUM_POSITION_TYPE T) { if ( T == POSITION_TYPE_BUY && AO(X()) > 0.0 && AO(X() + 1) < 0.0 && Close(X() + 2) > Envelopes_Lo(X() + 2) && Close(X() + 1) <= Envelopes_Lo(X() + 1) && Close(X()) > Envelopes_Lo(X()) //m_symbol.Bid() ) { return(true); } else if ( T == POSITION_TYPE_SELL && AO(X()) < 0.0 && AO(X() + 1) > 0.0 && Close(X() + 2) < Envelopes_Up(X() + 2) && Close(X() + 1) >= Envelopes_Up(X() + 1) && Close(X()) < Envelopes_Up(X()) ) { return(true); } return(false); }
对应的看跌假突破则发生在上轨位置:价格向上刺穿包络线上轨,形成虚假看涨突破,随后回落至轨内。此时 AO 处于零轴上方,可能呈现圆弧顶形态,或绿色柱体逐渐收窄。这标志着买盘力量正在消退。这些假突破形态本质上属于均值回归信号。当价格刺穿包络线轨道后又回归通道内部,往往意味着突破尝试遭到拒绝。包络线定义了价格的预期波动区间,因此价格迅速回到轨内,往往意味着向外的突破只是给后知后觉的买方或卖方设下的陷阱。AO 的作用在于确认趋势实际上并不支撑这次突破。
向下假突破时,若 AO 数值极低或红色直方图持续缩小,意味着处于超卖状态,卖方动能已耗尽。这会增加看涨反转的概率。反之,向上假突破时,若 AO 数值极高或绿色直方图逐渐减弱,则意味着处于超买状态。这表明买方正在失去上冲动能。
加入 AO 作为过滤条件,能够提高这些假突破或虚假突破信号的可靠性。由于入场点位于价格重回轨道时的极端价位附近,这不仅提升了入场信号真实有效的概率,还能带来更优的风险收益比。原因在于入场点处于或接近极端价位,止损可以设置在近期高低点稍外侧。也就是包络线轨道的正外侧。在美元兑日元(USDJPY)30 分钟周期上对该形态进行为期两年的测试(其中仅 2023 年用于训练),得到如下测试报告:

从测试结果来看,该形态在前瞻阶段表现介于小幅盈利与基本持平之间,在进一步验证之前,这是一个积极的信号。
AO 动量确认的持续性突破
形态 1 在很多方面与假突破恰好相反。它用于识别价格突破包络线后真实有效、且大概率延续的行情。这一判断需要 AO 提供强劲的动量作为支撑。当价格至少连续两根 K 线收于包络线上轨之上,且 AO 显示出强劲的看涨动量时,触发看涨信号。其特征表现为 AO 录得较大正值,或相对于近期区间处于超买状态。实际上,若连续两根 K 线收于包络线上轨上方,确实说明会维持在接近或高于近期高位的水平,足以突破阻力。
如果与此同时,AO 显著高于零轴 —— 可能创下多周期新高,或持续维持在高位的绿色柱体 —— 则进一步确认买盘压力强劲。这是一个趋势延续的强势信号,表明行情仍处于突破进程中,而非短暂的试探性上冲。我们在 MQL5 中按如下方式实现形态 1:
//+------------------------------------------------------------------+ //| Check for Pattern 1. | //+------------------------------------------------------------------+ bool CSignalAO_Envelopes::IsPattern_1(ENUM_POSITION_TYPE T) { if ( T == POSITION_TYPE_BUY && AO(X()) - AO(X() + 1) > AO(X() + 1) - AO(X() + 2) && AO(X() + 1) > AO(X() + 2) && AO(X() + 2) > 0.0 && Close(X() + 1) < Envelopes_Up(X() + 1) && Close(X()) > Envelopes_Up(X()) ) { return(true); } else if ( T == POSITION_TYPE_SELL && AO(X() + 1) - AO(X()) > AO(X() + 2) - AO(X() + 1) && AO(X() + 2) > AO(X() + 1) && AO(X() + 2) < 0.0 && Close(X() + 1) > Envelopes_Lo(X() + 1) && Close(X()) < Envelopes_Lo(X()) ) { return(true); } return(false); }
对应的看跌版本则是向下突破。当价格连续两根或更多 K 线收于包络线下轨下方,且 AO 因卖压动能而处于深度负值时。这表明是真实有效的破位,具备延续下跌的潜力。该形态专为趋势行情设计。与前述形态 0(我们假设包络线能够约束价格)不同,在此情形下价格会在包络线外侧维持一段时间,标志着波动率正沿趋势方向急剧放大。包络线可以看作一个动态通道 —— 当价格能够连续多根 K 线运行于通道之外。这往往是原有区间已被打破、新一轮趋势行情开启的信号。
此时,AO 充当确认过滤的角色。例如,如果价格两次收于上轨上方,但 AO 只是勉强高于零轴,那么这次突破可能缺乏动能,有可能是假突破。但如果 AO 持续远高于其中位水平,且连续出现高耸的绿色柱体(动量加速的信号),则进一步印证这次突破是真实有效的。在与形态 0 相同的条件下测试形态 1,确实得到了表现出色的测试报告,前瞻测试表现也相当不错,如下所示:

形态 1 是前瞻测试中表现较好的形态之一。其做空形态的图表如下所示:

包络线支撑 / 阻力位处的 AO 背离
我们的第三个形态,即形态 2,利用了技术分析中最有效的反转信号之一。当价格处于包络线边界时,价格与震荡指标之间出现看涨 / 看跌背离。看涨背离形态出现在价格创出新低并触及或略微刺穿下轨时(表明正在测试支撑),与此同时 AO 却形成更高的低点 —— 第二次下跌时直方图的谷底比第一次更浅。换句话说,市场价格在不断创出新低,但 AO 未能同步创出动量新低。这是下跌动能正在减弱的经典信号。
在这种情况下,包络线下轨充当了强支撑区域,与背离信号相互印证,增强了反转的可信度。我们在 MQL5 中按如下方式实现该形态:
//+------------------------------------------------------------------+ //| Check for Pattern 2. | //+------------------------------------------------------------------+ bool CSignalAO_Envelopes::IsPattern_2(ENUM_POSITION_TYPE T) { if ( T == POSITION_TYPE_BUY && AO(X() + 2) > AO(X() + 1) && AO(X() + 1) < AO(X()) && Close(X() + 2) > Envelopes_Lo(X() + 2) && Close(X() + 1) <= Envelopes_Lo(X() + 1) && Close(X()) > Envelopes_Lo(X()) ) { return(true); } else if ( T == POSITION_TYPE_SELL && AO(X() + 2) < AO(X() + 1) && AO(X() + 1) > AO(X()) && Close(X() + 2) < Envelopes_Up(X() + 2) && Close(X() + 1) >= Envelopes_Up(X() + 1) && Close(X()) < Envelopes_Up(X()) ) { return(true); } return(false); }
看跌背离版本则是镜像对称的。价格在上轨处或略高于上轨创出新高(测试关键阻力位),但 AO 的直方图峰值却形成更低的高点。这告诉我们,尽管价格创出新高,但第二次上涨时的买盘动量反而更弱。这预示着大概率见顶并发生反转。背离形态在预测趋势转向方面早已得到公认。通过要求价格极值出现在包络线轨道附近,我们得以聚焦于合理支撑 / 阻力位处的背离信号。这通常会让信号的有效性更强。举例来说,恰好发生在下轨位置的看涨背离,可能标志着下跌行情的最后一跌,随后将迎来显著反弹。
这背后的市场心理很直观。包络线告诉我们价格处于超卖区域,而 AO 告诉我们相对动量已不再像价格走势所暗示的那样看空。换句话说,空头将价格推至新低,但 AO 形成的更高低点表明空头正在失去力量。通常,当背离形态完成时,AO 可能已经开始拐头向上 —— 即便价格仍在横盘或创出新低 —— 这为趋势转向提供了进一步佐证。包络线约束了价格的波动范围,而价格未能有效突破轨道,则说明支撑位依然有效。从测试结果来看,该形态在前瞻测试中同样能够实现盈利,尽管走势较为震荡。测试报告如下:

AO 零轴穿越与回踩包络线中轨
形态 3 属于趋势延续类形态,也就是 "回调买入 / 反弹卖出" 的建仓模式。它将 AO 零轴穿越所体现的动量转向,与价格回踩关键均线(包络线中轨)相结合。在看涨版本中,动量震荡指标从零轴下方上穿至零轴上方,标志着动量由空转多。买方开始占据上风。几乎与此同时,此前处于回调中的价格在包络线中轨处或其附近获得支撑 —— 中轨即通道的核心移动平均线。
本质上,价格在上涨趋势中回归其中位水平(中轨),而在此过程中 AO 上穿零轴,预示回调大概率即将结束,上涨动能正在回归。由此在动态支撑位(中轨)处给出 "逢低买入" 信号。我们在 MQL5 中按如下方式实现该形态:
//+------------------------------------------------------------------+ //| Check for Pattern 3. | //+------------------------------------------------------------------+ bool CSignalAO_Envelopes::IsPattern_3(ENUM_POSITION_TYPE T) { vector _last = AO_Last3(X()); if ( T == POSITION_TYPE_BUY && _last[0] < 0.0 && _last[2] < 0.0 && _last[0] > _last[2] && 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 && _last[0] > 0.0 && _last[2] > 0.0 && _last[0] < _last[2] && Close(X() + 2) < Envelopes_Mid(X() + 2) && Close(X() + 1) >= Envelopes_Mid(X() + 1) && Close(X()) < Envelopes_Mid(X()) ) { return(true); } return(false); }
看跌形态中,AO 下穿零轴,因为动量和趋势正转向空头。这恰好发生在价格从下方向上回升至包络线中轨之时。中轨在此充当动态阻力位。这意味着在下跌趋势中,可趁反弹入场做空。即反弹至均值时卖出。因此,我们通过该形态捕捉经典的趋势跟踪入场点。入场方向与大趋势保持一致,发生在小幅逆势调整之后。
在已确立的趋势中,价格通常围绕该均线波动 —— 上涨趋势中冲高后回落至均线附近,如此往复。当价格回踩向上倾斜的中轨并获得支撑时,往往是趋势延续行情的良好入场区间。与此同时,AO 的零轴则是区分看涨与看跌动量的清晰分界线。
因此,在一个上涨行情中,通常价格整体位于中轨上方、AO 位于零轴上方。如果随后出现小幅调整,AO 跌至零轴下方(显示短暂的看跌动量),同时价格也从中轨上方回落并触及中轨。当 AO 重新上穿零轴时,就表明动量正在重新与主趋势对齐,并可作为重新入场的信号。与前三个形态一样,该形态的前瞻测试同样取得了成功。测试报告如下:

波动率收缩与 AO 突破方向预判
形态 4 利用包络线指标通道内的波动率收缩进行交易。这种情况通常被称为 "挤压(squeeze)" —— 它往往预示着即将发生突破,而 AO 则能指示突破最可能的方向。 在该形态下,包络线上下轨显著收窄,预示着低波动或盘整阶段的到来。此时我们观察到上下轨几乎靠拢在一起,或者趋于走平。这也表明市场进入平静阶段,价格波动区间正在收窄。在这一挤压过程中,我们监控 AO 的逐步偏移或方向倾向。这一点很重要,因为 AO 可能在零轴附近徘徊,同时从略低于零轴的位置缓慢向看涨区域爬升(预示做多方向),反之亦然。
在看涨形态中,由于价格处于区间震荡,AO 可能在一个小范围内上下波动,但即便如此,AO 的直方图往往仍有逐步走高的倾向。具体表现为 AO 呈现短绿色柱体的时间多于红色柱体。这种微妙的动量积累暗示:一旦波动率放大、挤压阶段结束,突破方向大概率向上。我们在 MQL5 中按如下方式实现形态 4:
//+------------------------------------------------------------------+ //| Check for Pattern 4. | //+------------------------------------------------------------------+ bool CSignalAO_Envelopes::IsPattern_4(ENUM_POSITION_TYPE T) { if ( T == POSITION_TYPE_BUY && AO(X() + 2) > AO(X() + 1) && AO(X() + 1) < AO(X()) && AO(X() + 1) > 0.0 && Close(X() + 2) <= Envelopes_Mid(X() + 2) && Close(X() + 2) >= Envelopes_Lo(X() + 2) && Close(X() + 1) <= Envelopes_Mid(X() + 1) && Close(X() + 1) >= Envelopes_Lo(X() + 1) && Close(X()) <= Envelopes_Mid(X()) && Close(X()) >= Envelopes_Lo(X()) ) { return(true); } else if ( T == POSITION_TYPE_SELL && AO(X() + 2) > AO(X() + 1) && AO(X() + 1) < AO(X()) && AO(X() + 1) > 0.0 && Close(X() + 2) >= Envelopes_Mid(X() + 2) && Close(X() + 2) <= Envelopes_Up(X() + 2) && Close(X() + 1) >= Envelopes_Mid(X() + 1) && Close(X() + 1) <= Envelopes_Up(X() + 1) && Close(X()) >= Envelopes_Mid(X()) && Close(X()) <= Envelopes_Up(X()) ) { return(true); } return(false); }
同理,带有看跌偏向的挤压形态中,AO 也会在小幅波动间逐步下行。具体表现为直方图在零轴附近形成一系列逐步降低的高点,暗示一旦突破发生,阻力最小的方向是向下。该形态类似于著名的布林带挤压形态,区别在于我们使用的是包络线配合 AO 指标。
通道收窄通常意味着移动平均线变化不大,且近期价格高低点与均线之间没有明显偏离 —— 这是典型的盘整状态。包络线轨道的收缩提供了直观的视觉信号,不仅易于识别,甚至可以量化。例如,通过测量上下轨之间的距离相对于均线的百分比,可以得到一个量化指标。
因此,我们能够清晰判断形态何时 "生效"。然而,低波动时期往往也是许多交易者关注度较低的阶段。在这些时段保持警觉、留意 AO 的方向偏向,有可能让你比大众 "抢先一步"—— 多数人通常要等到突破明朗化后才做出反应。不过,该形态的测试结果是我们遇到的第一个前瞻表现存疑的信号形态。尽管如此,测试报告如下:

AO 极端动量与扩张的包络线
形态 5 聚焦于动量达到极致的强劲趋势行情。其特征是 AO 长时间维持在极高或极低的数值水平。这可以作为买盘或卖盘压力持续存在的信号。当 AO 出现上述表现的同时,包络线通道也开始变宽,且倾斜角度更加陡峭。这进一步确认了强劲的方向性运动。
在形态 5 的看涨信号中,AO 持续维持在零轴上方的高位水平。通常高于近期峰值,意味着始终处于正值区域。因此视觉上呈现为一片全绿、柱体高耸的 AO 形态。与此同时,包络线上轨急剧向上倾斜。在图表上,似乎每一根新的 K 线都在将上轨进一步推高,意味着包络线正在适应更高的价格水平。
在该形态的某些实现方式中,"包络线扩张" 可能意味着:由于包络线采用百分比度量,尽管百分比相对恒定,但轨道与价格之间的绝对距离会增大。需要关注的视觉特征是通道明确向上倾斜,而非走平。在 AO 高于给定阈值、包络线向上倾斜的格局下,我们将发出趋势延续的做多信号。此时趋势具有强劲的牵引力,大概率会继续推动价格走高。我们在 MQL5 中按如下方式实现该形态:
//+------------------------------------------------------------------+ //| Check for Pattern 5. | //+------------------------------------------------------------------+ bool CSignalAO_Envelopes::IsPattern_5(ENUM_POSITION_TYPE T) { vector _last = AO_Last3(X()); if ( T == POSITION_TYPE_BUY && _last[0] < 0.0 && _last[2] < 0.0 && _last[0] > _last[2] && Low(X()) < Low(X() + 1) && Envelopes_Up(X() + 1) - Envelopes_Lo(X() + 1) > Envelopes_Up(X()) - Envelopes_Lo(X()) ) { return(true); } else if ( T == POSITION_TYPE_SELL && _last[0] > 0.0 && _last[2] > 0.0 && _last[0] < _last[2] && High(X()) > High(X() + 1) && Envelopes_Up(X() + 1) - Envelopes_Lo(X() + 1) > Envelopes_Up(X()) - Envelopes_Lo(X()) ) { return(true); } return(false); }
对应的看跌形态则出现在 AO 持续处于深度负值时,可见多根红色直方图柱体,且充分位于零轴下方。与此同时,包络线显著向下倾斜,意味着卖盘动能持续存在,适合顺势做空。该形态本质上用于识别市场处于极端趋势的时刻 —— 比如失控的暴涨或暴跌。当包络线上轨不断创出新高、下轨紧随其后时,可以理解为 "价格沿着轨道运行"。
不少策略认为,一旦价格紧贴布林带上轨(在本文中是包络线上轨)运行,市场就进入了趋势状态 —— 这里的概念类似,只不过我们额外要求 AO 来确认这种超常动量。实际交易中,形态 5 可能出现在一段时间的盘整之后,有可能紧随形态 4 或形态 1 之后出现。该形态的测试结果如下,这一形态同样实现了盈利的前瞻表现:

包络线边界的双底 / 双顶与 AO 双峰形态
我们的第七个形态,即形态 6,将包络线边界处的双底或双顶,与一种独特的 AO 形态(通常称为双峰)相结合。以看涨形态为例:价格在下跌过程中于包络线下轨获得支撑,反弹后再次回测下轨,形成 W 形双底。两个低点大致处于包络线下轨区域的同一水平 —— 这是一个支撑区,说明该位置两次都成功守住。在此过程中,AO 同步在零轴下方形成看涨双峰形态。
在 AO 的形态中,第二个谷底高于第一个,即更靠近零轴。但更重要的是,AO 始终处于零轴以下,且两个谷底之间没有发生穿越。这种双峰形态被视为看涨动量基础正在形成的信号,因为抛售强度正在减弱。我们在 MQL5 中按如下方式实现这一看涨反转机会:
//+------------------------------------------------------------------+ //| Check for Pattern 6. | //+------------------------------------------------------------------+ bool CSignalAO_Envelopes::IsPattern_6(ENUM_POSITION_TYPE T) { if ( T == POSITION_TYPE_BUY && AO(X() + 2) > 0.0 && AO(X() + 1) < 0.0 && AO(X()) > 0.0 && Close(X() + 2) > Envelopes_Lo(X() + 2) && Close(X() + 1) <= Envelopes_Lo(X() + 1) && Close(X()) > Envelopes_Lo(X()) ) { return(true); } else if ( T == POSITION_TYPE_SELL && AO(X() + 2) < 0.0 && AO(X() + 1) > 0.0 && AO(X()) < 0.0 && Close(X() + 2) < Envelopes_Up(X() + 2) && Close(X() + 1) >= Envelopes_Up(X() + 1) && Close(X()) < Envelopes_Up(X()) ) { return(true); } return(false); }
该形态的看跌版本是包络线上轨处的双顶(M 形)。价格触及上轨后回落,随后再次回测,形成高度几乎持平的两个高点。与此同时,AO 在零轴上方呈现看跌双峰,两峰之间没有穿越,且第二峰低于第一峰。这标志着买盘压力逐渐减弱,为价格下跌埋下伏笔。
形态 6 的核心在于将经典图表形态与震荡指标确认相结合。在已知支撑位(如包络线下轨)形成双底,确实表明该价位受到 "防守"。就其本身而言,AO 双峰是比尔・威廉姆斯体系中公认的反转情绪信号。包络线则提供了背景信息 —— 这些低点 / 高点出现在极端价格带,进一步印证了支撑 / 阻力位并非随意形成,而是震荡行情中的折返点。
通常的入场时机是双底颈线(两个低点之间的峰值)被突破时,或者在第二个底部形成后、AO 翻绿等条件满足时入场。止损位的设置也很自然:做多时放在双底低点稍下方,做空时放在双顶高点稍上方。因此局部风险相对较小,而潜在回报可观 —— 可以看至包络线的另一端。在美元兑日元 30 分钟周期、同样的两年测试区间内,该形态产生的交易数量不足以与其他形态相提并论。入场条件过于严格,这可能意味着它更适合更小的时间周期?尽管如此,测试报告如下:

AO 从超卖区急剧反弹 + 包络线突破
形态 7 用于捕捉某一方向极端动量之后出现的爆发性反转行情。当 AO 从深度超卖状态突然急剧转向看涨读数,同时价格飙升至包络线上轨上方时,该形态成立。以上描述均针对看涨反转信号。实际交易中,这种看涨形态的特征是:经历大幅抛售后 AO 处于极低水平,标志着极端看跌动量。随后在短短几根 K 线内,AO 穿越零轴阈值转为正值。
这表明动量发生了剧烈反转 —— 卖方从完全掌控局面到突然溃败,买方取而代之。与此同时,此前被严重压制的价格会跳升至包络线上方,收盘价位于通道之外,标志着决定性的向上突破。这种形态往往由催化剂触发,通常是新闻事件。我们在 MQL5 中按如下方式实现该形态:
//+------------------------------------------------------------------+ //| Check for Pattern 7. \ //+------------------------------------------------------------------+ bool CSignalAO_Envelopes::IsPattern_7(ENUM_POSITION_TYPE T) { if ( T == POSITION_TYPE_BUY && AO(X() + 2) > 0.0 && AO(X() + 1) > AO(X() + 2) && AO(X()) > AO(X() + 1) && Close(X() + 2) <= Envelopes_Lo(X() + 2) && Close(X() + 1) > Envelopes_Lo(X() + 1) && Close(X()) > Close(X() + 1) ) { return(true); } else if ( T == POSITION_TYPE_SELL && AO(X() + 2) < 0.0 && AO(X() + 1) < AO(X() + 2) && AO(X()) < AO(X() + 1) && Close(X() + 2) >= Envelopes_Up(X() + 2) && Close(X() + 1) < Envelopes_Up(X() + 1) && Close(X()) < Close(X() + 1) ) { return(true); } return(false); }
该形态的看跌版本则相反:AO 在短时间内从超买区急剧翻至零轴以下,同时价格跌破包络线下轨。由此触发向下突破的反转行情。该形态本质上捕捉的是 V 型反转。它发生在原本沿某一方向强劲运行的市场发生投降式反转,并猛烈转向另一方向之时。AO 量化了这种动量的翻转。
形态 7 的基本假设是:此前的极端动量不具备持续性,如今因某种实质性触发因素而发生逆转。如果没有这一触发因素,你看到的可能只是上涨趋势中一次波动率放大的波动回调,趋势本身依然完好。因此,行情背景非常重要。交易者应关注过度延伸的涨势或有消息面支撑的事件。测试显示,形态 7 的表现与形态 1 相当,前瞻测试效果显著。测试报告如下:

形态 7 看涨信号的图示如下。我们展示了前瞻表现最佳的几个形态的图表,但由于附带了智能交易系统的源代码,读者可以在回测后的图表上进行更深入的研究。
突破后回踩包络线 + AO 确认
倒数第二个信号形态是一种 "回踩" 策略,即突破后回调测试策略。它在价格强势突破包络线之后生效,具体时机是价格短暂回落测试已被突破的包络线轨道之时。在此过程中,AO 始终维持在极端水平,表明主导动量依然完好。在看涨形态中,价格因趋势行情或形态 1、形态 7 等情况急剧向上突破包络线上轨。初始爆发之后,价格小幅回落,关键在于回调的最低点仍保持在上轨线上方。换言之,价格并未重新进入包络线内部,只是轻触上轨,略微高于轨道运行。
这实际上构成了对新支撑位(即原上轨)的回踩确认。在回踩过程中,AO 保持看涨、位于零轴上方且处于相对高位 —— 因为动量并未消散,只是暂时停歇。AO 可能因小幅回调而略有回落,但应始终稳固处于正值区域。满足这些条件时,该形态给出上涨趋势中的低风险入场信号:价格在轨道上方企稳验证了突破有效性,AO 则确认看涨动量犹在。以下是该形态的 MQL5 源代码:
//+------------------------------------------------------------------+ //| Check for Pattern 8. | //+------------------------------------------------------------------+ bool CSignalAO_Envelopes::IsPattern_8(ENUM_POSITION_TYPE T) { if ( T == POSITION_TYPE_BUY && AO(X() + 2) > 0.0 && AO(X() + 1) > AO(X() + 2) && AO(X()) > AO(X() + 1) && Close(X() + 2) > Envelopes_Up(X() + 2) && Close(X() + 1) > Close(X() + 2) && Close(X()) > Close(X() + 1) ) { return(true); } else if ( T == POSITION_TYPE_SELL && AO(X() + 2) < 0.0 && AO(X() + 1) < AO(X() + 2) && AO(X()) < AO(X() + 1) && Close(X() + 2) < Envelopes_Lo(X() + 2) && Close(X() + 1) < Close(X() + 2) && Close(X()) < Close(X() + 1) ) { return(true); } return(false); }
看跌版本适用于价格跌破包络线下轨后向上反弹的情况,且反弹高点仍位于下轨下方。此时下轨充当阻力位。由于 AO 持续为负值,该形态提供了趁 "修复性反弹" 做空的机会,并对下跌趋势的延续抱有一定信心。经测试,形态 8 成为第一个前瞻测试未能实现盈利的形态。测试报告如下:

包络线趋势倾斜 + AO 基线偏移
最后一个形态聚焦于识别新一轮持续趋势的开端,通过包络线斜率的明显变化与 AO 基线动量的确认性偏移相结合来实现。在看涨场景中,此前走平的包络线通道开始急剧向上倾斜,标志着价格走势已转为多头。这通常从上轨或中轨首次创出新高时开始观察。举例来说,连续多根 K 线中,每一根新 K 线的包络线上轨都比前一根更高。当包络线显示出明确的看涨倾斜时,AO 也同时升至零轴上方,并持续稳定地保持在正值区域。
实际交易中,这意味着 AO 此前可能在零轴附近或下方震荡,但由于持续的买盘压力,如今已决定性地转为正值。很多时候可以看到 AO 站上零轴并连续多根 K 线保持绿色柱体。这些条件组合在一起确实构成了强劲的趋势买入信号,因为市场大概率已脱离震荡 / 盘整阶段,进入有序的上涨趋势。我们在 MQL5 中按如下方式编写该形态:
//+------------------------------------------------------------------+ //| Check for Pattern 9. | //+------------------------------------------------------------------+ bool CSignalAO_Envelopes::IsPattern_9(ENUM_POSITION_TYPE T) { if ( T == POSITION_TYPE_BUY && 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); } 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); }
看跌镜像形态则是包络线转向下行,下轨逐根 K 线逐级走低。与此同时,AO 跌至零轴下方并持续保持负值,标志着新一轮下跌趋势正在形成。该形态起到确认作用。它并不像形态 7 或形态 6 那样试图捕捉绝对的顶部或底部。它所做的只是识别市场从横盘或弱势状态转向趋势行情的微妙转变。在美元兑日元 30 分钟周期、两年测试区间内,该形态的前瞻测试同样未能实现盈利,与前述形态 8 的情况类似。测试报告如下:

结论
在本文中,我们研究了动量震荡指标(AO)与包络线通道的另一组指标搭配。我们的研究基于一年的训练 / 优化窗口和一年的前瞻测试。正如本系列文章一直强调的那样,这一测试窗口是有限的,读者在将这些思路应用于实盘之前,非常有必要在不同类型的市场中进行更多验证和探索。我们将在后续文章中进一步探讨:前瞻测试表现不佳的形态 8 和形态 9,是否能通过监督学习得到改善。
| 名称 | 描述 |
|---|---|
| WZ-75.mq5 | 向导组装的智能交易系统(头部显示包含文件) |
| SignalWZ-75.mqh | 在 MQL5 向导生成 EA 时所使用的自定义信号类文件 |
这些附件文件用于在 MQL5 向导中组装智能交易系统。新读者可在此处查阅使用指南。
本文由MetaQuotes Ltd译自英文
原文地址: https://www.mql5.com/en/articles/18842
注意: MetaQuotes Ltd.将保留所有关于这些材料的权利。全部或部分复制或者转载这些材料将被禁止。
本文由网站的一位用户撰写,反映了他们的个人观点。MetaQuotes Ltd 不对所提供信息的准确性负责,也不对因使用所述解决方案、策略或建议而产生的任何后果负责。
数据科学与机器学习(第四十六部分):在Python中使用N-BEATS进行股票市场预测
极值优化(EO)
从基础到中级:函数指针
在MQL5中自定义交易品种:创建三维K线自定义品种