首页 / 交易学院 / 小布知识库 / 从 EA 原型到锦标赛专用机器人:MACD + 轨道线策略
从 EA 原型到锦标赛专用机器人:MACD + 轨道线策略
🤖

从 EA 原型到锦标赛专用机器人:MACD + 轨道线策略

EA 开发实战 难度 · 进阶 2013 12 分钟阅读
锦标赛EA 原型MACD

一、锦标赛 EA 原型的思路

2010 自动交易锦标赛要求参赛者快速拿出能跑的 EA。本文用一个“EA 交易原型”模板(ExpertAdvisor.mqh)演示:基类、信号/交易函数都已写好,你只需用很少代码填进自己的策略。核心假设是“顺势比震荡更赚钱,且价格从通道边界反弹比突破更频繁”,所以策略是“沿趋势、在轨道线(Envelopes)边界反弹时建仓”。

二、策略逻辑:MACD + 轨道线反弹

日线 MACD 连续两根柱增长=买入信号,连续两根减少=卖出信号;同时价格在小时图轨道线下轨反弹则买、在上轨反弹则卖。止损/止盈用固定点数。CheckSignal 把这两类条件组合起来:

long CMyEA::CheckSignal(bool bEntry)
  {
   double macd[4], env1[3], env2[3]; MqlRates rt[3];
   CopyRates(m_smb,m_tf,0,3,rt);
   CopyBuffer(m_hmacd,0,0,4,macd);
   CopyBuffer(m_henvel,0,0,2,env1); CopyBuffer(m_henvel,1,0,2,env2);
   // MACD 增长 且 价格从下轨反弹 -> 买
   if(rt[1].open<env2[1] && rt[1].close>env2[1] && macd[1]<macd[2] && macd[2]<macd[3])
      return(bEntry?ORDER_TYPE_BUY:ORDER_TYPE_SELL);
   // MACD 下降 且 价格从上轨回落 -> 卖
   if(rt[1].open>env1[1] && rt[1].close<env1[1] && macd[1]>macd[2] && macd[2]>macd[3])
      return(bEntry?ORDER_TYPE_SELL:ORDER_TYPE_BUY);
   return(WRONG_VALUE);
  }

三、工程结构:继承 CExpertAdvisor

EA 定义一个继承 CExpertAdvisor 的类 CMyEA,把风险、SL/TP/TS、快慢 EMA、MACD 信号线、轨道线周期/方差、MACD 句柄、轨道线句柄作为成员。Init() 里创建指标句柄(iMACD 用日线、iEnvelopes 用小时图),析构时 IndicatorRelease 释放句柄避免泄漏。

四、测试与优化

在策略测试器里用 EURUSD、去年数据回测。初版结果很差(胜率仅 36%),于是优化:SL/TP 以 10~500、步长 50 扫描,最佳 SL=160/TP=310,胜率升到 67%、净利 $1522;再优化轨道线周期(4 步长到 40)与方差(0.1 步长 0.1),最佳 22/0.3,净利升至 $14418、胜率 79%;最后把风险加到 0.8,净利冲到 $77330。但作者警告:这种激进资金管理并不可取,应降低风险。

✦ 优化的正确姿势
参数优化要分层次:先优化 SL/TP,再优化指标参数(轨道线周期/方差),最后才动风险。而且必须在更长的时间区间、多段时间窗口分别验证,避免过拟合单一历史段。文中分月测试显示,同一 EA 在不同月份盈亏差异巨大(有月赚 $69835,有月亏 $8378),说明稳定性远比单次高收益重要。

五、局限与进阶方向

原型只做多单、固定点差假设、单仓。进阶可:换趋势指标(文末附 MA+布林带版本)、换轨道线(价格通道/布林带)、换时间周期(H4/M15)、改交易条件(反向、不检查日趋势)。这些改动基本只动 CheckSignal 与 Init 里的句柄创建,复用框架即可。

六、锦标赛 EA 的约束

锦标赛 EA 有硬性约束:通常限定单一品种、固定时间窗、不可用人为干预、禁用某些函数。它追求的是「在限定条件下得分最高」,和实盘「长期活下来」目标不同,所以工程取舍要清醒。

很多锦标赛冠军策略实盘一塌糊涂——因为它优化的是赛制分数而非真实风险收益。读这类原型要剥离「赛制技巧」,只学它的工程结构与信号思路。

七、轨道线反弹逻辑

原型用「MACD 金叉/死叉」定方向,配合「布林带或均线轨道」做反弹:价格触上轨且方向偏空就空、触下轨偏多就多。轨道提供均值回归的入场参考,MACD 提供方向过滤。

✦ 学结构别学榨分
锦标赛冠军多是为赛制分数优化的,实盘常崩。读原型只学工程结构与信号思路,别照搬它的参数与风控。

八、风险与工程权衡

原型继承自 CExpertAdvisor,把信号、风控、执行分层,这是值得学的工程范式。风险上锦标赛可接受高波动博高分,实盘则要先保证回撤可控——同一套骨架,填不同的风控参数即可。

结论:把锦标赛原型当「架构教科书」,风控逻辑按实盘重写,别被它的漂亮曲线带偏。

九、小结

✦ 小结
锦标赛 EA 原型学「架构」别学「榨分」:它有单品种/限时等赛制约束,优化的是分数非实盘风险。轨道线反弹(MACD 定方向加布林/均线轨道)与 CExpertAdvisor 分层值得学,风控按实盘重写。

常见问题

可以直接编译运行,但它是教学原型,只做多单、假设固定点差、单仓,且初版参数未优化时表现很差。它的最大价值是展示“如何用最少代码把策略塞进标准 EA 框架”,真实使用前必须自己优化参数并做多周期验证。
SL/TP 直接决定每笔交易的盈亏比和胜率,对结果影响最大也最敏感;指标参数决定信号质量;风险系数只是放大已有系统的盈亏。先固定大框架调盈亏比,再细化信号,最后才放风险,能更快找到稳定解,也避免被高风险的夸张收益误导。
作者明确反对。那个 $77330 是在未考虑实盘点差浮动、滑点、拒单的理想回测下得到的,且伴随巨大回撤风险。实战应降低风险系数,优先保证曲线稳定而非单次高收益。