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

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

第 2/3 篇

◍ 用 AC 背离抓反转的两条轨迹

价格走更低的低点、AC 却抬出更高的低点,这种分叉通常暗示下行动能衰竭,后市倾向看涨反转;反过来价格出更高的高点而 AC 同步拔高,往往预示上行结构出现底层裂缝,逆转下行的概率上升。 背离的本质就是价格动作与加速度指标各走各路,说明表面价格行为可能藏着缺陷,所以反转常在不一致处萌芽。我们只用这一形态做隔离测试,形态索引设为 4,回测报告给出的信号质量依赖于过滤条件。 下面这段 MT5 逻辑把上述规则写死:买单看近 3 根 K 线低点抬高且 AC 走低,卖单看高点压低且 AC 走高。

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Check for Pattern class="num">2.                                              |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool CSignalAccelerator::IsPattern_2(class="type">ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Low(X() + class="num">3) > Low(X()) && AC(X() + class="num">3) < AC(X()))
   {  class="kw">return(true);
   }
   else if(T == POSITION_TYPE_SELL && High(X() + class="num">3) < High(X()) && AC(X() + class="num">3) > AC(X()))
   {  class="kw">return(true);
   }
   class="kw">return(false);
}
逐行拆解:函数入口接收持仓方向 T;买权分支要求 3 根前的低点高于当前低点(更低低被否定、实际为抬高),且 3 根前 AC 小于当前 AC(AC 更高低),满足即返回 true。卖权分支对称处理高点与 AC 方向;都不符返回 false。 实盘里别拿这信号裸跑。较大时间帧(如 H4、D1)的背离假信号明显少于 M5 这类碎片周期,外汇与贵金属杠杆高、跳空频繁,仍须配合确认与仓位上限。

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

「零轴附近的AC逆转怎么判」

AC 指标在零轴附近变色,往往被当成逆转暗示,但量级才是动量的真刻度。形态索引 8 对应的是「AC 接近零轴时的逆转」:看涨倾向出现在 AC 高于零轴却贴近界限、且由红转绿;看跌倾向则相反,在零轴下方贴近处由绿转红。 零轴附近的较大值,通常意味着先前趋势与零轴间隙大,这更像是延续效应而非真逆转。用绝对值阈值过滤假信号时,标的点值差异极大——直盘可能取 0.005(点值 1e-5 或 0.5),日元交叉则要用 0.5 左右,只看距零轴幅度大于该值的逆转。 相对量级思路是把当前 AO 值与近期或历史均值加权,乘上用户参数 k 做自适应阈值;也可用 μ±nσ 的标准差阈值。时间特定量级则为新闻或波动时段单配绝对值,平静市用另一套。 实操里几个坑容易毁掉过滤:阈值设得过死、忽略市场背景、忘了 AO 自带滞后、把小数值当信号混入噪音。本文实现不量化「多近算近」,只抓任何贴近零轴的 U 形回旋。 单独测该形态(输入参数赋 8),回测显示它并非新逆转信号,更偏趋势延续。下方 MQL5 片段即判定逻辑,可直接贴进 CSignalAccelerator 类验证。 代码逐行拆解: // 函数声明:传入持仓方向 T,返回是否命中形态3 bool CSignalAccelerator::IsPattern_3(ENUM_POSITION_TYPE T) // 买向:前两根 AC 递增、上一根在零轴上方、且上一根小于当前(贴近零轴转绿) if(T == POSITION_TYPE_BUY && AC(X()+2) > AC(X()+1) && AC(X()+1) > 0.0 && AC(X()+1) < AC(X())) // 满足条件返回 true return(true); // 卖向对称:前两根递减、上一根在零轴下、且上一根大于当前(贴近零轴转红) else if(T == POSITION_TYPE_SELL && AC(X()+2) < AC(X()+1) && AC(X()+1) < 0.0 && AC(X()+1) > AC(X())) return(true); // 其余情况不命中 return(false);

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

零轴反侧柱线放大才作数

原始的形态-4定义过宽:只要AC连续出现同色柱线(绿为看涨动量加速、红为看跌动量加速),不论它们贴在零轴上方还是下方,都算信号。这种写法噪音太大,实战里容易频繁假触发。 更收窄的口径是只看「对立侧」的放大柱:看涨时,只认零轴下方的绿色柱线一根比一根长(通常图表上标为缩短柱却实际尺寸递增);看跌时,只认零轴上方红色柱线连续增大。这样把动量加速限制在反向区域,信号倾向更干净。 该形态与背离形态重叠度高。若零轴下方绿色柱线低点抬高,同时价格低点趋于平坦,可当作看涨的附加确认;零轴上方红色柱线高点降低且价格高点走平,则价格可能回落。后者往往不需要额外过滤。 把形态输入参数设为16跑出的测试报告,只反映短窗优化的潜力,未做前向或交叉验证。外汇与贵金属杠杆高、滑点大,这套逻辑直接上实盘风险偏高,建议自己在MT5用对应经纪商数据重跑。 下面这段MQL5只判断最近3根: //+------------------------------------------------------------------+

//Check for Pattern 4.&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

//+------------------------------------------------------------------+ bool CSignalAccelerator::IsPattern_4(ENUM_POSITION_TYPE T) {&nbsp;&nbsp;int _i = X(); &nbsp;&nbsp; if(T == POSITION_TYPE_BUY && LowerColor(_i) == clrGreen && LowerColor(_i + 1) == clrGreen && LowerColor(_i + 2) == clrGreen) &nbsp;&nbsp; {&nbsp;&nbsp;return(true);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; } &nbsp;&nbsp; else if(T == POSITION_TYPE_SELL && UpperColor(_i) == clrRed && UpperColor(_i + 1) == clrRed && UpperColor(_i + 2) == clrRed) &nbsp;&nbsp; {&nbsp;&nbsp;return(true);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; } &nbsp;&nbsp; return(false); } 逐行拆解:函数入口取当前偏移_i = X();买权分支要求零轴下连续3根(_i、_i+1、_i+2)都是绿色,才返回true;卖权分支对称,要求零轴上连续3根红色;其余情况返回false。注意代码本身没判尺寸递增,尺寸比较要在LowerColor/UpperColor内部或调用前补。

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

◍ AC 柱线与分形叠出的动量延续信号

把 AC 振荡器柱线变化扣在价格分形上,能分离出一类动量延续提示。价格出峰值分形后,若 AC 绿柱在零轴上方且尺寸放大,视为看涨峰值信号,暗示多头动量可能延续;价格出低谷分形后,更低红柱落在零轴下方,则是看跌低谷信号,空方动量可能仍在延续。 这套识别带主观成分。峰值高度、波谷深度、出现频率、以及它们与即时报价的发散程度,都会影响信号权重。更高的峰和更深的谷往往对应更强动量,所以实盘里常给代码加一个点数阈值或当前 ATR 倍数做过滤,只让摆动超过阈值的分形进入信号判定。 频率与强度反比:回溯固定周期(如一天或一周,看所用时间帧)内峰谷次数越多,通常波动越杂,信号越弱。因为峰后必谷、谷后必峰,直接数回溯窗内的配对次数就能算出分母。背离也可能自己导进这套逻辑——一个谷-峰配对不一定合形态定义,却可能露出背离。 仅用该形态、参数置 32 跑历史测试,下面这段就是 MT5 里直接用的判定函数,逐行看逻辑即可抄去验证。

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

常见问题

两条轨迹需分别连接价格波峰波谷与AC柱线同向极值点,且价格走新低而AC不走新低才算背离,建议先在1小时图手动画一遍验证。
零轴附近的AC逆转容易假突破,必须等柱线明确站上或跌破零轴后再看,单独逆转不作数。
可以,小布盯盘的AIGC已内置AC柱线诊断,打开对应品种页即可看到零轴反侧放大提示,不用自己盯盘。
以触发信号的分形另一侧外沿作止损参考,AC柱线重新缩回零轴倾向视为信号失效。
规则不用改,但贵金属波动大、假信号概率高,建议把周期拉到4小时及以上过滤杂讯,严守高风险仓位。