在 MQL5 中寻找趋势的几种方法(基础篇)
📘

在 MQL5 中寻找趋势的几种方法(基础篇)

第 1/3 篇

MT5 里辨趋势的几种底层思路

在 MT5 里确认趋势,常见的做法不是只有看一根均线那么简单。很多有经验的交易者会同时用均线方向、高低点位移和 ADX 强度三个维度交叉验证,避免被震荡行情里的假突破骗进去。 Dmitriy Skub 在 2013 年 10 月 8 日发布的这篇讨论,到统计时已有 12 924 次浏览、9 条跟帖,说明「趋势怎么找」在 MQL5 社区是长期高频问题。外汇和贵金属杠杆高,趋势误判带来的回撤可能远超股票,验证方法前先控仓位。 比如用 iMA 取均线句柄判断斜率,再用 SeriesInfoInteger 看最新两根收盘价谁高,就能写一段最朴素的趋势过滤器。把它塞进 EA 的 OnTick,比肉眼盯盘更不容易漏掉转折点。

「趋势到底是什么,以及我们能用代码做什么」

“趋势是你的朋友”几乎是每张交易桌上的口头禅,但真要定义趋势,十个人能给出十一种说法。逆势被扫的故事在外汇和贵金属圈子里从不少见,这类品种杠杆高、跳空频繁,逆着主要方向做单爆仓概率明显更大。 我们能把握的,不是去哲学化地争论趋势本质,而是把“怎么算有趋势”写成可重复运行的程序。本文聚焦用 MQL5 把几种经典趋势判定思路落成代码,让你在 MT5 里直接加载验证,而不是靠肉眼猜。 接下来几节会逐个拆这些方法的实现,从最基础的均线排列到通道突破,重点都在“能跑、能调参数、能看信号”上。

◍ 先定周期再谈趋势方向

趋势说白了就是价格序列在某个时间轴上的长期倾向,但它不是孤立存在的。图 1 里 2005 年末到 2006 年 5 月整体向上(绿箭头),可切到 2006 年 2 月这一段,方向又变成明显下跌(红箭头),几乎整个 1 月还在横盘(黄箭头)。同一根价格线,周期一换,结论就翻脸。 所以动手判断前,先得敲定自己看的是哪个时间框架。对实盘来说,周期直接决定你从开仓到平仓的持有时间,也牵动保护性止损摆多远、交易触发频率高低。以 EURUSD 日线为例,流动性最厚的品种,日线持仓可以撑几天到几个月,目标空间常按几百甚至几千点算,止损也往往要放到几百点外。 广义上后面写的工具能套任何周期,但周期越小,新闻冲击、大资金扫单这类市场噪音越容易把方向洗乱。理论上趋势延续越久,反向变盘的概率越低,顺趋势下单赚钱可能大于亏钱可能——但外汇和贵金属本身就是高杠杆高风险场,周期判断错了止损照样被打穿。 本文后续会落到 MT5 的趋势判断工具,以及怎么写个简单指标让程序自己跑,最终目标是用 EA 把这些指标接成自动交易。

六种趋势识别法的实盘取舍

判断趋势方向,圈内常拎出六样东西:单/多根均线、峰谷极点、ADX、NRTR、还有 Heiken Ashi 颜色。它们没有哪个是银弹,优劣只在你的交易系统里才分得清。 单根 200 日 SMA 配 EURUSD D1 收盘价(红线叠加 MATrendDetector),规则只是收盘价站上/跌破均线即判涨/跌。实测下来价格常反抽,假信号密布,这套只能当很粗的过滤器,EA 里直接单用基本报废。 换三条均线(200/50/21 日,FanTrendDetector 验证)按周期长短排好顺序:长周期在上为多头扇开,在下为空头扇开。警告次数少了,但排列成型耗时,滞后明显。周期值是随便挑的,你可以为具体货币对重调序列改善特征。 峰谷法吃 Charles Dow 的老本:更高的高点+更高的低点才叫涨。EURUSD D1 设 ExtDepth=5、ExtDeviation=5、ExtBackstep=3,回看历史极点清楚,但实盘里极点会消失或冒出,模拟测试里就能看见 ZigZag 乱跳,实单用处不大,做历史规律统计还行。 ADX 不光判方向,+DI/-DI 交叉定多空,主线过 20 才算强趋势。EURUSD D1 设 PeriodADX=21,开 ADXTrendLevel=20 过滤后,那些弱趋势里的反弹毛刺被剔掉,实盘更干净。外汇贵金属波动诡谲,弱 ADX 阶段硬做趋势单,止损概率偏高。 NRTR 盯极点外固定距离,收盘价确认线位才翻转,忽略小修正;Heiken Ashi 靠部分平均前柱染色,问题是连倒数第二根都能被改写,信号可能在下一根直接反水,只能当辅证。开 MT5 把这几套 Detector 指标拖出来对照同一段日线,比看文字直观得多。

「把均线变成趋势探测器的几种写法」

在 MT5 里搭趋势指标,最省事的起点就是移动平均。核心思路只有一条:用价格与均线的相对位置,或若干均线的排列顺序,输出一个固定区间的值——比如 -1 到 +1,分别代表空头与多头倾向。把纵轴锁在 -1.4 到 +1.4,图表不会随波动拉伸,视觉上更干净。 基础版只用一条简单均线。SimpleMA 函数吃三个参数:position 是 price[] 里的起始下标,period 必须 >0,price[] 默认喂收盘价。返回算好的均线值。TrendDetector 里比一下「当前价 vs 均线值」:价格在上返回 1,在下返回 -1,分不出就返回 0。 想滤噪就上均线扇形。外部挂三个周期,TrendDetector 改用 if...else 判断三者顺序:短周期均线在最长之上且依次排列 → 返回 1;反向排列 → 返回 -1;否则 0。其他代码结构几乎不动,只换判断函数。 走道氏规则可用 ZigZag 极点。除显示缓冲外再加两个计算缓冲接 ZigZag 的顶底,TrendDetector 回扫前 4 个极点,按高低点抬升/降低定趋势。ADX 版则借 CopyBuffer 抓 +DI/-DI,强度低于阈值就不判方向。NRTR 看 Support/Resistance 缓冲谁非零,Heiken Ashi 版直接重算蜡烛,只比开盘收盘颜色。 下面这段是 MATrendDetector 的骨架代码,包含库引用与独立窗口的固定标尺设置,可直接贴进 MQ5 看编译结果: #include <MovingAverages.mqh> double SimpleMA(const int position, const int period, const double &price[]) // 计算简单均线:position 起始位,period 周期>0,price[] 价格序列 #property indicator_separate_window // 让指标在独立子窗口显示,不挤主图 #property indicator_applied_price PRICE_CLOSE // 默认用收盘价计算 #property indicator_minimum -1.4 // 子窗口纵轴最小值锁 -1.4 #property indicator_maximum +1.4 // 子窗口纵轴最大值锁 +1.4,配合指标值域 [-1,+1] #property indicator_buffers 1 // 只用 1 个指标缓冲区存趋势值 #property indicator_plots 1 // 只画 1 个图形系列 外汇与贵金属杠杆高,这类趋势探测器只给方向倾向,实盘前请在 MT5 策略测试器用历史数据验证信号密度与滞后。

MQL5 / C++
class="macro">#include <MovingAverages.mqh>
class="type">class="kw">double SimpleMA(const class="type">int position, const class="type">int period, const class="type">class="kw">double &price[])
class=class="str">"cmt">//---------------------------------------------------------------------
class="macro">#class="kw">property indicator_separate_window
class=class="str">"cmt">//---------------------------------------------------------------------
class="macro">#class="kw">property indicator_applied_price     PRICE_CLOSE
class="macro">#class="kw">property indicator_minimum           -class="num">1.4
class="macro">#class="kw">property indicator_maximum           +class="num">1.4
class=class="str">"cmt">//---------------------------------------------------------------------
class="macro">#class="kw">property indicator_buffers           class="num">1
class="macro">#class="kw">property indicator_plots             class="num">1
class=class="str">"cmt">//---------------------------------------------------------------------

常见问题

先用更高一级周期(如看1小时前先看4小时)确认主方向,再回到小周期找入场,避免在噪声里逆大势操作。外汇贵金属波动大,逆周期试单风险很高。
可以把趋势定义为价格高于某均线且斜率向上,或连续更高高点更高低点,用代码输出布尔值。这样能把主观看图变成可回测信号。
小布盯盘会直接对打开的品种做多周期趋势诊断,把方向、强度、拐点概率列出来,你不用自己写代码跑一遍。
可用双均线金叉死叉、价格与均线位置、均线斜率阈值三种。斜率阈值对转势反应更快,但震荡市可能频繁误报,需加过滤。
建议先从均线位置和结构(高低点)两类入手,逻辑直观易验证;通道与波动率类后期再加。任何单一方法都只是概率倾向,需结合风控。