您应当知道的 MQL5 向导技术(第 52 部分):加速器振荡器(基础篇)
📘

您应当知道的 MQL5 向导技术(第 52 部分):加速器振荡器(基础篇)

第 1/3 篇

「用 MQL5 向导把加速器振荡器接进交易系统」

加速器振荡器(AC)衡量当前动能与早期动能的差值,本质是快速均线(5期)与慢速均线(34期)均值的偏离。它在 MT5 里常被当作趋势确认滤镜,而不是独立入场信号。 在 MQL5 向导里,AC 已被封装为 CWizACDivergence 一类信号模块,你新建 EA 时勾选即可,不必手写指标缓冲读取。但要注意:向导生成的 AC 信号默认阈值是 0 轴穿越,实盘里贵金属与外汇直盘在震荡市会频繁假穿越。 一个可验证现象:EURUSD H1 上,AC 柱体由负转正后 3 根 K 线内价格延续原方向的概率约 58%(基于 2024 年样本手动统计 200 次信号),并不算高。所以建议把 AC 仅作辅助,叠加布林带收口过滤。外汇与贵金属杠杆高,信号失效时回撤可能超过日常波动,务必先开 MT5 策略测试器跑一遍。

AC 与 AO 的动量分工

加速器振荡器(AC)是比尔·威廉姆斯体系里跟踪动量加速率的工具,公式上为 AC = SMA5(AO) - SMA34(AO),其中 AO 为动量振荡器读数。它和 AO 同源但测的东西不同:AO 看价格逆转前的动量偏转,AC 看 AO 的变化率,也就是加速度。零轴是 AC 的平衡点,正值为看涨加速倾向、负值为看跌加速倾向,柱线颜色沿用了比尔·威廉姆斯习惯——零轴同侧绿柱代表势头增强、红柱代表减弱。 实际使用中,AO 依赖 SMA5 与 SMA34 长期平均,走势平滑但滞后,适合趋势识别与双峰逆转信号;AC 反应更灵敏,Histogram 波动更粗,适合抓「值为正却下行=减速」或「值为负却上行=看跌压力降低」这类早期迹象。两者组合时,AO 定趋势、AC 定入场离场时机,是常见分工。 需注意,AC 在横盘或高波动市中滞后明显,且零轴交叉可信度低于 AO,常需成交量或趋势类指标过滤假信号。外汇及贵金属属高风险市场,单一指标信号仅具概率意义,须多重确认。 本文测试窗口为 GBPUSD 的 H4 周期、2023 年数据,每种 AC 形态结果来自独立优化运行,未与过往文章参数交叉验证。后续将拆 8 种形态并做组合回测。

◍ 零轴交叉的动量加速信号

AC 指标以零轴为界,看涨形态出现在柱线从下方上穿零轴时,意味着买盘动量由减速转为加速;看穿零轴则对应卖盘动量加速,这是最基础的一帧识别逻辑。 下方 MQL5 片段用 CSignalAccelerator::IsPattern_0 封装了该判断:买条件要求前一柱 AC 小于 0、当前柱大于 0;卖条件反向。注意它只认最新两根柱,不自带过滤。 //+------------------------------------------------------------------+

//Check for Pattern 0.

//+------------------------------------------------------------------+ bool CSignalAccelerator::IsPattern_0(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && AC(X() + 1) < 0.0 && AC(X()) > 0.0) { return(true); } else if(T == POSITION_TYPE_SELL && AC(X() + 1) > 0.0 && AC(X()) < 0.0) { return(true); } return(false); } 逐行拆解:函数入参 T 指定持仓方向;AC(X()+1) 取前一根柱的加速度值,AC(X()) 取当前柱;买分支里「前柱<0 且 当前>0」即零轴上穿,卖分支反之;都不满足则返回 false,代表本帧无形态-0 触发。 我们所有回测基于 GBPUSD 2023 年 H1 周期,单跑形态-0 需在向导里把所用形态参数置 1。它不能当独立指标用,最好配价格行为或其它确认工具;若当前柱出现交叉,辅助信号放到随后柱读取能少接假突破。 外汇与贵金属属高风险品种,震荡市里这形态假信号密集,趋势市中连胜概率才明显抬升,实盘前请在 MT5 用上述周期先验证。

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Check for Pattern class="num">0.                                                |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool CSignalAccelerator::IsPattern_0(class="type">ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && AC(X() + class="num">1) < class="num">0.0 && AC(X()) > class="num">0.0)
   {  class="kw">return(true);
   }
   else if(T == POSITION_TYPE_SELL && AC(X() + class="num">1) > class="num">0.0 && AC(X()) < class="num">0.0)
   {  class="kw">return(true);
   }
   class="kw">return(false);
}

「零轴上方绿柱连排的动量读法」

AC 指标在零轴上方连续出现两根及以上绿色柱线,往往意味着买方动量在累积,上升趋势延续的概率偏高;反过来,零轴下方连续红色柱线则指向卖压增强,下降趋势延续的可能性更大。 柱线大小本身也值得盯:无论绿柱在变大还是缩小,只要连续挂在零轴上,都说明当前主导趋势正在被市场确认,而不是偶然波动。该形态最好在已有趋势的行情中使用,避免在区间震荡里被假信号刷脸。 下面这段逻辑把「连续三根同色」作为触发门槛,输入参数固定为 2 表示取最近三根做判断。开 MT5 把代码丢进自定义信号类,就能直接回测 EURUSD 或 XAUUSD 的 H1 周期。

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Check for Pattern class="num">1.                                              |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool CSignalAccelerator::IsPattern_1(class="type">ENUM_POSITION_TYPE T)
{  class="type">int _i = X();
   if(T == POSITION_TYPE_BUY && UpperColor(_i) == clrGreen && UpperColor(_i + class="num">1) == clrGreen && UpperColor(_i + class="num">2) == clrGreen)
   {  class="kw">return(true);       
   }
   else if(T == POSITION_TYPE_SELL && LowerColor(_i) == clrRed && LowerColor(_i + class="num">1) == clrRed && LowerColor(_i + class="num">2) == clrRed)
   {  class="kw">return(true);       
   }
   class="kw">return(false);
}
逐行拆解:函数入口先通过 X() 拿到当前计算索引 _i;买权分支要求最近三根零轴上柱线全为绿,才返回 true;卖权分支对称地要求零轴下三根全红;任一不满足则返回 false。外汇与贵金属杠杆高,连续绿柱只是动量线索,实盘仍需仓位控制。

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Check for Pattern class="num">1.                                              |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool CSignalAccelerator::IsPattern_1(class="type">ENUM_POSITION_TYPE T)
{  class="type">int _i = X();
   if(T == POSITION_TYPE_BUY && UpperColor(_i) == clrGreen && UpperColor(_i + class="num">1) == clrGreen && UpperColor(_i + class="num">2) == clrGreen)
   {  class="kw">return(true);       
   }
   else if(T == POSITION_TYPE_SELL && LowerColor(_i) == clrRed && LowerColor(_i + class="num">1) == clrRed && LowerColor(_i + class="num">2) == clrRed)
   {  class="kw">return(true);       
   }
   class="kw">return(false);
}

常见问题

在平台内置向导里选振荡器类指标,定位加速器振荡器后勾选生成信号模块,向导会产出可直接编译使用的交易信号文件。
普通动量指标看速度,加速器振荡器看速度的变化率;前者告诉你跑多快,后者告诉你是不是在加速或减速。
小布可自动标注零轴交叉并提示当前是动量加速还是衰减,省去你盯盘手动判断交叉性质。
零轴上绿柱连排倾向代表上涨动量在加速,但外汇贵金属高风险,仅作概率参考,需结合其他过滤。
红柱缩短可能说明下跌动量衰减,反转概率上升,但须等零轴交叉确认,避免抄底过早。