📈
MQL5 中判断趋势的 6 种方法:从 SMA 到 Heiken Ashi
趋势判断指标组合MQL5
为什么不直接用现成指标判断趋势
“现在是涨是跌”是几乎所有策略的起点,但每个现成指标给出的信号都带着自己的滞后与噪声。理解六种基础判断方法的内部逻辑,你才能在策略里组合它们、过滤假信号,而不是盲信一个指标。本文以 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%,错误信号明显减少。
组合多种方法提高胜率
✦ 最实用的两套组合
1) 扇形 + ADX 过滤:仅在 ADX>20 时允许开仓,直接砍掉“反弹”类假信号,适合实盘。2) 多 MA 扇形替代单 MA:减少交易次数和逆势单。Heiken Ashi 因重绘,只适合作为辅助确认,绝不可单独做 EA 信号。EA 通用结构:等新柱开盘(tick_volume==1)才交易,趋势反转或不明才平仓。
工程实现要点
无论哪种方法,都需要用 iCustom 或内置 iMA/iADX/iEnvelopes 拿句柄,再用 CopyBuffer 取缓冲值。注意指标缓冲区的索引:ADX 指标 0 号是 ADX 主线、1 号 +DI、2 号 -DI;NRTR 的 0 号是支撑、1 号是阻力。取错索引会得到完全相反的信号。
常见问题
没有银弹。最稳的组合是“三条均线扇形 + ADX 强度过滤”:扇形定方向,ADX>20 砍掉弱市假信号。单 SMA 太糙,ZigZag 实时会重绘,都不建议单独用。
Heiken Ashi 会改写前一两柱的收盘价,导致历史回测里看起来很准、实盘却反复反转。它只能作为辅助确认,必须搭配不重绘的趋势过滤器。
ADX 指标返回三个缓冲:0=ADX 主线(趋势强度),1=+DI,2=-DI。判断方向用 +DI 与 -DI 的大小,判断“有没有趋势”用 ADX 主线是否超过阈值。取错索引会把强度和方向混为一谈。