您应当知道的 MQL5 向导技术(第 53 部分):市场促进指数·综合运用
📘

您应当知道的 MQL5 向导技术(第 53 部分):市场促进指数·综合运用

第 3/3 篇

两根绿柱才确认的趋势延续

形态-6 可视为形态-5 的延伸版本,核心差异在于 MFI 柱线要求从单根绿色变成了连续两根绿色,且这一要求同时覆盖看涨与看跌两种配置。 具体区分上,看涨侧需要收盘价站在移动平均线之上,看跌侧则要求收盘价位于移动平均线之下,方向与均线关系必须同步成立。 下面这段 MQL5 判定函数直接给出了可复用的实现逻辑: //+------------------------------------------------------------------+

//Check for Pattern 6.

//+------------------------------------------------------------------+ bool CSignalMFI::IsPattern_6(ENUM_POSITION_TYPE T) { if(Color(X()+1) == clrGreen && Color(X()) == clrGreen) { if(T == POSITION_TYPE_BUY && Close(X()+1) > MA(X()+1) && Close(X()) > MA(X())) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()+1) < MA(X()+1) && Close(X()) < MA(X())) { return(true); } } return(false); } 逐行拆解:函数入口先比对最近两根柱线 Color(X()+1) 与 Color(X()) 是否都为 clrGreen,这是形态-6 的 MFI 过滤门槛。 通过后按持仓方向 T 分支:买权要求两根收盘价都高于各自 MA,卖权要求都低于各自 MA,全部满足才返回 true,否则落空返回 false。 把这段代码塞进 MT5 的 CSignalMFI 类里跑优化,外汇与贵金属品种的高杠杆环境下误判概率不低,实盘前建议先用历史数据验证连续绿柱后的回撤频率。

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Check for Pattern class="num">6.                                              |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool CSignalMFI::IsPattern_6(class="type">ENUM_POSITION_TYPE T)
{  if(Color(X()+class="num">1) == clrGreen && Color(X()) == clrGreen)
   {  if(T == POSITION_TYPE_BUY && Close(X()+class="num">1) > MA(X()+class="num">1) && Close(X()) > MA(X()))
      {  class="kw">return(true);
      }
      else if(T == POSITION_TYPE_SELL && Close(X()+class="num">1) < MA(X()+class="num">1) && Close(X()) < MA(X()))
      {  class="kw">return(true);
      }
   }
   class="kw">return(false);
}

◍ 用棕色MFI柱抓RSI回归的区间信号

把 MFI 染成棕色的盘整段视作波动率压缩区,等 RSI 从极值区穿回中性线,是形态-7 的核心思路。它本质上是在为后面的突破做前置准备,而不是靠区间本身吃满利润。 具体触发条件很直白:当当前 MFI 柱为棕色时,若前一棒 RSI 还在 30 以下、当前棒收在 30 上方,视为看涨;反过来说前一棒 RSI 在 70 以上、当前棒收在 70 下方,视为看跌。单独跑这一形态时,位图输入填 128(即 2^7)即可隔离测试。 一段值得记下的经验:逐个形态验证比一口气优化全部位图更靠谱。八种形态混在一起回测,彼此对冲会抹掉单形态的真实表现。我们只为信息参考做过全形态阈值扫描,但落地部署建议最多挑两个形态深挖。 下面这段 MT5 代码就是形态-7 的判断函数,逐行看逻辑: // 函数声明:传入持仓方向 T,返回是否命中形态-7 bool CSignalMFI::IsPattern_7(ENUM_POSITION_TYPE T) { // 先判当前棒 MFI 颜色是否为棕色 if(Color(X()) == clrBrown) { // 看涨分支:买方向 + 前棒RSI≤30 + 当前棒RSI≥30 if(T == POSITION_TYPE_BUY && RSI(X()+1) <= 30.0 && RSI(X()) >= 30.0) { return(true); // 条件齐活,返回真 } // 看跌分支:卖方向 + 前棒RSI≥70 + 当前棒RSI≤70 else if(T == POSITION_TYPE_SELL && RSI(X()+1) >= 70.0 && RSI(X()) <= 70.0) { return(true); // 返回真 } } return(false); // 其余情况一律不触发 } 外汇与贵金属杠杆高、滑点跳空频繁,这类区间信号只是概率倾向,实盘前请在 MT5 策略测试器里用历史数据跑一遍 128 位图验证。

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| Check for Pattern class="num">7.                                                              |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool CSignalMFI::IsPattern_7(class="type">ENUM_POSITION_TYPE T)
{  if(Color(X()) == clrBrown)
   {  if(T == POSITION_TYPE_BUY && RSI(X()+class="num">1) <= class="num">30.0 && RSI(X()) >= class="num">30.0)
      {  class="kw">return(true);
      }
      else if(T == POSITION_TYPE_SELL && RSI(X()+class="num">1) >= class="num">70.0 && RSI(X()) <= class="num">70.0)
      {  class="kw">return(true);
      }
   }
   class="kw">return(false);
}

「MFI 形态判定的代码落点」

前面几节把市场促进指数(MFI)当辅助过滤器接进了向导信号类,这一节直接看模式 4 的判定函数怎么写。它本质是在测一种背离:价格拐点往有利方向挪,但 MFI 强度反而走弱,概率上更像是趋势衰竭后的反抽。 代码里 IsPattern_4 对多空分开处理:买单要求下一根 Low 高于当前 Low,且 MFI 下一根大于当前;卖单要求下一根 High 低于当前 High,且 MFI 同样下一根更大。注意评论区有读者指出原文算法可能把大小关系写反,实盘前应在 MT5 用 SignalWZ_53.mqh 自测一遍。 附件里 wz_53.mq5 仅 7.41 KB,SignalWZ_53.mqh 为 17.07 KB,直接丢进 MQL5 向导可编译出 EA。外汇与贵金属杠杆高,这类非常规指标组合信号失效可能很快,验证时先用模拟盘跑历史分段。 把上面那段 CSignalMFI::IsPattern_4 抄进你自己的信号类,改两行 MFI 比较符号就能复现讨论区说的「先前大于当前」版本,对比回测差异再决定跟哪条逻辑。

MQL5 / C++
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| 检查模式 class="num">4。                                                           |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool CSignalMFI::IsPattern_4(class="type">ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Low(X()+class="num">1) > Low(X()) && MFI(X()+class="num">1) > MFI(X()))
   {  class="kw">return(true);
   }
   else if(T == POSITION_TYPE_SELL && High(X()+class="num">1) < High(X()) && MFI(X()+class="num">1) > MFI(X()))
   {  class="kw">return(true);
   }
   class="kw">return(false);
}

常见问题

等连续两根绿柱(MFI上升且成交量放大)再确认趋势延续,单根绿柱容易骗线,可开图表对照验证。
棕色柱代表价量背离,若同时 RSI 从超买/超卖回归中轴,倾向高抛低吸,贵金属外汇属高风险需轻仓。
小布盯盘的 AIGC 已内置 MFI 形态诊断,打开对应品种页即可看到棕色柱与 RSI 回归的联合信号。
落在形态判定函数内,比较前一根与当前根 MFI 值及成交量正负,连续两次为正才返回确认标志。
可能周期不匹配,建议先在1小时图回看近三月信号,再调 MFI 平滑参数,外汇波动大需控风险。