10 款趋势策略的比较分析(基础篇)
📘

10 款趋势策略的比较分析(基础篇)

第 1/3 篇

◍ 十款趋势策略的同台基准

  • 年 5 月 26 日,有测试者在 MT5 社区贴出一份覆盖 10 款趋势策略的横向评测,原帖浏览量达到 36,180 次,跟评 30 条,作者署名为 Alexander Fedosov。这类基准帖的价值不在结论,而在把不同逻辑的策略拉到同一测试环境下,让参数偏差和品种适应性暴露出来。

外汇与贵金属属高风险品种,回测表现只反映历史样本,实盘可能因点差跳空而明显偏离。打开 MT5 的策略测试器,用同一周期和品种重跑这 10 套逻辑,是验证该评测是否过时的直接办法。

十种趋势跟随的确认组合思路

做趋势跟随,第一件事是把“趋势存在”和“入场时机”拆成两层:先用一类指标判方向,再用另一类做确认,避免单层信号在震荡里反复挨巴掌。下面列了十种可直接在 MT5 里拼装的搭配,都是双指标结构,前半管趋势、后半管触发。 ADXCloud 配 RSI 直方条,用 ADX 云的厚度看趋势强度,RSI 柱翻色做入场确认。标准偏差趋势画成直方图,叠加 RVI 看动量是否同向。比尔·威廉姆斯的 AC 云图,与熊/牛动力组合,偏向抓加速段。 Ehlers 重心配合平均价格速度,适合处理有相位滞后的一类价格序列。二元波浪和加权振荡器配莱曼目标,属于把复杂滤波器和目标位绑定的思路。Donchian 通道叠 MACD,但把价格序列换成威廉姆斯 AO 值,能压掉一部分通道假突破。 Schaff 周期振荡器用三个 Tyrone 级别确认,Keltner 通道画直方、iTrend 画云,平均价格变化动量配 MA Figurelli 扇形——这几种在 MT5 里都能靠自带指标或少量自定义指标拼出来,外汇和贵金属波动大、杠杆高,实盘前先用历史数据回测确认信号频率。

「趋势跟随系统的评测出发点」

趋势跟随在外汇和贵金属市场属于高频使用的打法,核心就三件事:识别单边、卡准入场、确认离场。离场判断常被忽略,但它和入场一样决定账户曲线的生死,这两类品种杠杆高、跳空频繁,错判离场比错过入场更伤。 为了把这件事说透,我挑了一批能直接或部分反映趋势的技术工具,在 MetaTrader 5 里写成了 10 个 EA。每个 EA 跑完之后,我逐一拆了它们的优劣势,并横向比了绩效表现。 这篇不堆理论,目标是给你一张趋势跟随策略的强弱对照表。关于趋势识别的更多底层方法,可另行查阅利用 MQL5 找出趋势的若干方法一文,那里有另一批工具视角。

◍ 趋势跟随策略落地前的三道坎

乍看趋势跟随不难:技术面认出方向,开仓,等延伸,能加就加。理论无懈可击,实盘却卡在三个必须先想清楚的任务上。 第一道坎是识别趋势存在。趋势确认天然带延迟,图表上没法标出一个精确入场点,只能圈出一段有利区域(见图例.1 的绿色区)。用一指标发信号、另一指标隔段时间确认的写法,代价是时间——而时间在这里等于错过的盈利。 第二道坎是开仓前先定目标。趋势认下了,动手前得知道去哪离场:固定点数、按趋势强度算的动态目标,或借用支撑阻力都行,但入场前目标必须明确,不然单子没有退出锚。 第三道坎是判趋势结束。绿色区进场后,价格进入图例.1 的横盘区,要分辨这只是歇脚还是该撤。该案例横盘短、趋势续;若策略用固定盈利目标,那横盘能扛多久,完全取决于任务2里对那次趋势的评估。外汇与贵金属杠杆高,这三步任何一步主观化都可能放大回撤风险。

十套趋势策略的入场骨架

评测趋势策略时,过低的周期假信号密、过高的周期又没几次入场,客观统计效率都差。实测取 M30 到 H4 之间,本组 10 套均以 H1 为主、少数上 H4。 前四种走“主趋势指标 + 确认振荡器”的路子:ADXCloud 配 RSIColor 直方(云变绿+直方绿做多)、ColorStdDev 配 ColorZerolagRVI(红直方+云绿做多)、Bear_Bulls_Power 配 CronexAC(粉变蓝且值小于零+云蓝做多)、CenterOfGravityOSMA 配平均速度(直方增且速度过阈做多)。H1 上趋势区常只撑几根柱,止盈止损不宜设大。 策略 #5 的 Binary_Wave 把 MA、MACD、OsMA、CCI、Momentum、RSI、ADX 七类信号揉成一个振荡器,零上穿买、零下穿卖;为适配 H1,原 14 周期参数改 10,要测经典周期可切 H3/H4。 #6 加权振荡器(RSI+MFI+WPR+DeMarker 平滑和)突破莱曼目标 75% 四分位确认,指标用 8 个缓存区,实盘只需取 2 和 6。#7 Donchian 突破配 CronexAO(价序替为 AO)云图;长影线多的品种建议改用收盘或开盘+极值组合降噪。 #8 Schaff 周期退超卖买、退超买卖,H4 上配三个 Tirone 级别,超买超卖默认 20/80。#9 i-KlPrice 直方破 ±50 配 iTrend 云图。#10 平均变化穿 1 配 Figurelli Series(36 条 MA 扇形与收盘价比的差值直方)零轴过滤。外汇贵金属杠杆高,上述信号任一出现都只是概率倾向,开 MT5 加载对应指标肉眼核对再说。

MQL5 / C++
<span class="keyword">class="type">void</span> <span class="functions">OnTick</span>()
&nbsp;&nbsp;{
<span class="comment">class=class="str">"cmt">//--- 检查 EA 以前的开单</span>
&nbsp;&nbsp; <span class="keyword">if</span>(!Trade.IsOpened(Inp_MagicNum))
&nbsp;&nbsp;&nbsp;&nbsp; {
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">class=class="str">"cmt">//--- 获取数据进行计算</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span>(!GetIndValue())
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <span class="keyword">class="kw">return</span>;
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="comment">class=class="str">"cmt">//--- 如果是买入信号, 开单</span>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="keyword">if</span>(BuySignal())

「信号触发与指标取值的收口逻辑」

开仓动作被压在信号函数之后:买信号成立就调 Trade.BuyPositionOpen,卖信号成立则走 Trade.SellPositionOpen,两个分支都带 Inp_Lot、Inp_StopLoss、Inp_TakeProfit 等外部输入,方便在 EA 属性里直接改手数和风控。 BuySignal 要求 adx[0]>0 且 adx[1]<0,同时 rsi1[0]==1;SellSignal 反过来,adx[0]<0 且 adx[1]>0,rsi2[0]==1。也就是说 ADX 斜率方向翻转叠加 RSI 分支置位,才放单,属于典型的双指标交叉过滤。 GetIndValue 用 CopyBuffer 拉取两个指标句柄各 2 根缓冲,任一返回值 <=0 就判定失败返回 false,避免空缓冲下单。ColorStDev 这边挂了 period=12、MODE_EMA、PRICE_CLOSE,以及 MaxTrendLevel=100、MiddLeTrendLevel=40 两级阈值,外汇与贵金属波动下这样设参数仍属高风险,实盘前建议在 MT5 策略测试器里先跑一遍。

MQL5 / C++
  Trade.BuyPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
  class=class="str">"cmt">//--- 如果是卖出信号, 开单
  if(SellSignal())
     Trade.SellPositionOpen(true,Symbol(),Inp_Lot,Inp_MMode,Inp_Deviation,Inp_StopLoss,Inp_TakeProfit,Inp_MagicNum,Inp_EaComment);
   }
}
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| 买入条件                                                          |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool BuySignal()
  {
   class="kw">return(adx[class="num">0]>class="num">0 && adx[class="num">1]<class="num">0 && rsi1[class="num">0]==class="num">1)?true:class="kw">false;
  }
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| 卖出条件                                                          |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool SellSignal()
  {
   class="kw">return(adx[class="num">0]<class="num">0 && adx[class="num">1]>class="num">0 && rsi2[class="num">0]==class="num">1)?true:class="kw">false;
  }
class=class="str">"cmt">//+------------------------------------------------------------------+
class=class="str">"cmt">//| 获取指标的当前值                                                  |
class=class="str">"cmt">//+------------------------------------------------------------------+
class="type">bool GetIndValue()
  {
   class="kw">return(CopyBuffer(InpInd_Handle1,class="num">0,class="num">0,class="num">2,rsi1)<=class="num">0 ||
          CopyBuffer(InpInd_Handle1,class="num">1,class="num">0,class="num">2,rsi2)<=class="num">0 ||
          CopyBuffer(InpInd_Handle2,class="num">0,class="num">0,class="num">2,adx)<=class="num">0
          )?class="kw">false:true;
  }
class=class="str">"cmt">//--- ColorStDev 指标参数
class="kw">input class="type">int               period = class="num">12;                                            class=class="str">"cmt">//平滑周期 StDev
class="kw">input ENUM_MA_METHOD    MA_Method=MODE_EMA;                                     class=class="str">"cmt">//直方图平滑方法
class="kw">input ENUM_APPLIED_PRICE applied_price=PRICE_CLOSE;                             class=class="str">"cmt">//应用价格
class="kw">input class="type">int               MaxTrendLevel=class="num">100;                                      class=class="str">"cmt">//最大趋势级别
class="kw">input class="type">int               MiddLeTrendLevel=class="num">40;                                    class=class="str">"cmt">//中等趋势级别

常见问题

用同一周期、同一品种、同一手续费基准跑,重点看最大回撤、胜率和持仓周期,别只看收益曲线。
用均线+通道双重确认,或要求收盘价连续两根站上轨再入场,能砍掉大部分毛刺信号。
可以,小布盯盘内置了多策略回测视图,选好品种和周期就能并排看十套系统的回撤与信号分布。
第三道坎是滑点与隔夜跳空,先用模拟盘跑两周,确认成交偏差在承受范围内再上资金。
差别在止损收口逻辑:用ATR动态止损的比固定点数止损更适配波动放大段,回撤普遍更浅。