MQL5 中判断趋势的 6 种方法:从 SMA 到 Heiken Ashi
一、为什么不直接用现成指标判断趋势
“现在是涨是跌”是几乎所有策略的起点,但每个现成指标给出的信号都带着自己的滞后与噪声。理解六种基础判断方法的内部逻辑,你才能在策略里组合它们、过滤假信号,而不是盲信一个指标。本文以 EURUSD 日线为例,把六种方法拆开讲清。
二、六种方法一览
- 单一移动平均线(SMA):收盘价在 SMA 上方为涨,下方为跌。
- 三条移动平均线(扇形):短<中<长排列为涨,反之为跌。
- 峰谷(ZigZag)高低点:依道氏理论,更高的高点+更高的低点=涨。
- ADX:+DI 在 -DI 上方为涨;ADX 主线>阈值(如 20)才认定趋势有效。
- NRTR(趋势转折指标):上轨支撑非 0、阻力为 0 时为涨,反之为跌。
- Heiken Ashi 改良蜡烛:实体收>开为涨,但会重绘前一两柱。
三、各自的判断条件代码
下面是把六种方法落到 MQL5 判断条件的核心片段,都返回 1(涨)/-1(跌)/0(不明):
// 单一 SMA if(_price[_shift] > SimpleMA(_shift, MAPeriod, _price)) trend=1; else if(_price[_shift] < SimpleMA(_shift, MAPeriod, _price)) trend=-1; // 三条 SMA 扇形 if(ma3>ma2 && ma2>ma1) trend=1; else if(ma3<ma2 && ma2<ma1) trend=-1; // ZigZag 峰谷(道氏) if(Hi[0]>Hi[1] && Lo[0]>Lo[1]) trend=1; else if(Hi[0]<Hi[1] && Lo[0]<Lo[1]) trend=-1; // ADX if(ADX[0]<ADXTrendLevel) return(0); if(PlusDI[0]>MinusDI[0]) trend=1; else if(PlusDI[0]<MinusDI[0]) trend=-1; // NRTR if(Support[0]>0 && Resistance[0]==0) trend=1; else if(Resistance[0]>0 && Support[0]==0) trend=-1;
四、优缺点与适用周期
通用规律:图表周期越小噪声越大,周期越长趋势越稳。单一 SMA 最简单但假信号多;三条扇形减少了假信号但更滞后;峰谷适合历史分析,实时极点会重绘,实战几乎无用;ADX 能评估趋势强度、过滤弱市;NRTR 转折明确但参数需优化;Heiken Ashi 直观但会重绘,必须搭配其他信号。测试显示,把单 SMA 换成三条扇形后,交易次数减半、亏损从 28% 降到 12%,错误信号明显减少。
五、组合多种方法提高胜率
六、工程实现要点
无论哪种方法,都需要用 iCustom 或内置 iMA/iADX/iEnvelopes 拿句柄,再用 CopyBuffer 取缓冲值。注意指标缓冲区的索引:ADX 指标 0 号是 ADX 主线、1 号 +DI、2 号 -DI;NRTR 的 0 号是支撑、1 号是阻力。取错索引会得到完全相反的信号。
七、六种方法的对比
判断趋势常用六法:移动均线(方向)、通道/布林(突破)、ADX(趋势强度)、高低点(道氏峰谷)、价格斜率(加速度)、动量(ROC)。各有滞后与盲区:均线慢、ADX 不判方向、动量易在盘整假突破。
没有单一方法全能。理解各自的盲区,才能在「它说谎」的行情里不亏。把六法当工具箱而非圣经。 老练的做法是给每个方法配「失效场景清单」:比如动量在盘整必假突破、ADX 在突变行情滞后,遇到对应市况就主动降权而非硬信。
八、多方法投票融合
更稳的做法是投票:多个方法同时看多才确认多头,少数派看空时降仓位或观望。融合能抵消单个方法的误判,代价是信号变少——但少而准胜过多而假。
九、滞后性与假突破应对
趋势指标本质是滞后确认,等它说「涨」价格已走一段。应对:用短周期快速指标抓早、长周期过滤噪音;假突破用成交量或收盘确认(站上收盘才认),而非刺破瞬间就追。
实盘里「趋势是你朋友,但假突破是常客」。把确认条件写严格,宁可少做几单,也比反复被洗强。