从 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。但作者警告:这种激进资金管理并不可取,应降低风险。
局限与进阶方向
原型只做多单、固定点差假设、单仓。进阶可:换趋势指标(文末附 MA+布林带版本)、换轨道线(价格通道/布林带)、换时间周期(H4/M15)、改交易条件(反向、不检查日趋势)。这些改动基本只动 CheckSignal 与 Init 里的句柄创建,复用框架即可。