首页 / 交易学院 / 小布知识库 / ATC冠军访谈:MQL5 EA实战启示
ATC冠军访谈:MQL5 EA实战启示
🤖

ATC冠军访谈:MQL5 EA实战启示

从2010冠军Boris看实盘与竞赛差异

MQL5开发 难度 · 进阶 2026-03-08 6 分钟阅读
#MQL5#ATC#EA开发#实盘交易

谁是 Boris Odintsov 与 ATC 2010

Boris Odintsov(论坛ID:bobsley)是 Automated Trading Championship 2010(ATC 2010)的冠军。那是首届基于全新 MQL5 语言的 EA 自动交易锦标赛。他在比赛第一周就进入前十,最终以初始资金放大逾7倍的成绩拿下第一名,赢得 77,000 美元奖金。2011年他使用同一 EA 修改参数再次参赛,本文是该年度 ATC Champions League 系列的最后一篇访谈。

ATC 是由 MetaQuotes 举办的 EA 竞赛,使用 MetaTrader 5 平台与 MQL5 语言。对中文交易者而言,研究冠军访谈比看说明书更能理解“能赚钱的 EA 到底长什么样、坑在哪里”。

夺冠核心:建模方法与无错编码

Boris 自称是“有经验的程序员”,但作为交易者只是 2008 年才接触外汇的新手。他认为自己夺冠的关键在于“建模方法”与“无错编码”。在 ATC 2010 中,许多策略本身不错的 EA 死于编程错误——例如下单逻辑、数组越界、时间戳处理等。MQL5 当时刚发布,能快速掌握的人兼具交易与编程背景,这构成了他的相对优势。

他强调“建模方法”占成功的一半,另一半是运气——这里的运气指参赛者数量、平均 EA 强度与自己 EA 强度的函数关系。也就是说,EA 本身的数学与风控设计决定了下限,而市场窗口与随机性决定上限。

✦ 给开发者的提示
在 MQL5 中,使用标准库 CTrade、CExpert 等可大幅降低下单错误率;但务必在提交前本地跑至少 3 个月历史回测与一周实盘模拟,排除逻辑漏洞。

从竞赛到实盘:残酷的 40% 偏差

Boris 将夺冠 EA 用于 MT4 与 MT5 真实账户,但很快遇到重创:一个含 75% 投资者资金的 PAMM 账户两个月内全部亏光。他随后在美分账户测试同一机器人跨 3–7 个券商,两个月后余额偏差高达 40%。原因包括滑点、服务器宕机、报价源不一致等。

他得出核心结论:外汇盈利的最大障碍是“没有统一的价格供应商”。不同 broker 的 tick 与 spread 构造不同,导致回测完美、实盘崩盘。这也是为什么很多竞赛 EA 无法直接用于实盘。

⚠ 常见坑
不要迷信竞赛排名。ATC 使用统一 demo 环境,而实盘存在券商异构。上架信号或销售 EA 前,必须多券商美分账户验证一致性。

2011 再度参赛:旧 EA 与新参数

2011 年 Boris 沿用 2010 夺冠 EA,仅调整内部指标参数、止损止盈水平,未重写策略。他解释:尝试过多种策略,但都没能写出比该 EA 更好的版本。交易对仍为 EURUSD,因其流动性最高;面对波动率上升,仅改参数适配。

该 EA 最大弱点是“无震荡/高波动保护”,他坦诚未添加此类过滤。竞赛初期处于横盘,余额在 2000–12000 间徘徊,趋势出现后快速增长。他以 recovery factor(恢复系数)为优化目标,因此预期进入前十。

日志报错与 OrderCheck 的正确用法

访谈中提到 Experts 日志出现“request got before sending”类错误。Boris 说明:他使用标准交易库,并在发单前调用 OrderCheck()。当请求不可执行时,函数返回错误并写入日志。MT5 终端更新后标准库也被覆盖,他忘记重注释日志行,导致报错显示——但他认为这不是 EA 逻辑错误。

// 典型 MQL5 下单前检查片段
MqlTradeRequest request;
MqlTradeResult result;
ZeroMemory(request);
request.action = TRADE_ACTION_DEAL;
request.symbol = Symbol();
request.volume = 0.1;
request.type = ORDER_TYPE_BUY;
request.price = SymbolInfoDouble(Symbol(), SYMBOL_ASK);
if(!OrderCheck(request, result))
{
   Print("OrderCheck failed: ", result.retcode);
   return;
}
if(!OrderSend(request, result))
   Print("OrderSend failed: ", result.retcode);

这段真实模式说明:OrderCheck 不保证成交,只校验请求合法性。竞赛 EA 应保留日志以便调试,但实盘可降级处理避免噪音。

仓位管理与竞赛策略的冲突

ATC 2011 开局 Boris 的 EA 使用 2.6–3.2 手大仓位。他认为竞赛必须最大化风险才能追赶领头羊;实盘则风险低得多。这反映竞赛与实盘目标根本不同:竞赛看相对收益与峰值,实盘看回撤与存活。

⚠ 切勿照搬
若你打算把竞赛 EA 接信号或自营,务必将 lot 计算改为基于权益百分比(如 1%–2% 风险),否则一次黑天鹅即爆仓。

多币种与 MQL5 生态的工具评价

Boris 指出 2011 年前排多为多币种 EA,但大多是网格型,他不愿做网格。真正好的多币种需为不同货币对选不同策略,他尚未找到。对于 MT5 内置的 MQL5 Wizard(EA 生成器),他认为适合新手 5 分钟搭框架,但无法实现复杂逻辑(如定时平仓、跨品种差异策略)。

他看好 MetaQuotes 的新服务:MQL5 Cloud Network 提供近乎无限的优化算力;MQL5.community Market 则可买卖 EA 与服务。ATC 2011 报名约 2000 个 EA,远超他预测的 1000,说明生态在扩张。

✦ 中文交易者建议
用 MQL5 Wizard 原型验证想法,再用纯代码重写核心;优化慢时购买 MQL5 Cloud 算力,比本地省数天。

给中文 EA 开发者的可落地清单

常见问题

他在 PAMM 与多券商美分账户测试发现,同一 EA 在不同 broker 两个月余额偏差达 40%,主因是滑点、服务器故障与报价源不统一,说明竞赛 demo 环境无法代表实盘异构。
不一定。Boris 提到 MT5 更新标准库后未重注释日志行导致报错显示,但 EA 逻辑正常。OrderCheck 只校验请求合法性,应在发单前调用,实盘可关闭冗余日志。
不能。Boris 评价它适合新手 5 分钟搭框架,但无法实现定时平仓、多币种异策略等复杂算法,真正竞赛 EA 需手写代码。
竞赛追求相对排名需最大风险,Boris 用 2.6–3.2 手;实盘应以权益 1%–2% 风险计算 lot,否则遇极端波动即爆仓。
原文未披露交易金额。Boris 称多数人只买“保本无亏”版本,且他接单但无暇开发;上架可参考 MQL5.community Market 自行定价。