首页 / 交易学院 / 小布知识库 / ATC冠军访谈:高风险的EA设计哲学
ATC冠军访谈:高风险的EA设计哲学
🤖

ATC冠军访谈:高风险的EA设计哲学

从西班牙选手Mercurius看马丁加仓与多币种实战

MQL5开发 难度 · 进阶 2026-06-22 6 分钟阅读
#MQL5#EA开发#ATC2011#风险管理

一、访谈背景与选手画像

2011年自动交易锦标赛(ATC 2011)进行期间,MQL5社区采访了来自西班牙的参赛选手Antonio Morillas,其论坛ID为sallirom(即其姓氏Morillas的反写)。他在锦标赛伊始便将起始资金翻倍,迅速引起官方注意。与多数保守型EA不同,他的策略极度激进,依靠几乎耗尽保证金的方式博取高收益。Antonio本人并非职业交易员,而是一名计算机工程师,在高中教授信息学,交易仅作为爱好。他此前参加过券商组织的半自动MQL4比赛,在ATC 2011前一年才接触MQL5,但因具备C++基础,语言本身并未成为障碍,真正的难点在于正确调用交易函数。

这次访谈的价值在于,它展示了一个非专业交易者如何利用工程思维构建EA,以及在高波动环境中'要么夺冠要么出局'的极端哲学。对于中文交易者而言,理解这种思路有助于反思自己的仓位管理与策略定位。

二、为什么选择MQL5而非MQL4

Antonio明确表示自己更喜欢MQL5。首要原因是语法接近C++,他作为计算机工程师能快速上手;其次是MQL5天然支持多币种EA与多策略融合,而MQL4要实现类似功能需大量 hack。他提到MQL5 Wizard可以辅助不会编程的交易者快速生成测试用EA,但他本人为追求最大控制权选择手写代码。

✦ 开发建议
如果你有C/C++背景,MQL5的学习曲线远低于MQL4;若完全不懂编程,可先用MQL5 Wizard生成框架,再逐步改写。

在交易函数使用上,他指出MQL5的持仓(position)与订单(order)概念分离,初学时容易混淆。例如CPositionInfo类中的Type方法在当时已被弃用,他希望编译器能对此给出警告。这提醒我们:MQL5参考文档更新频繁,开发时应以最新版CHM/PDF为准。

三、Mercurius EA的核心逻辑

EA名称为Mercurius,取自罗马神话中的商业之神。其实质是一个基于长期趋势跟踪并配合宽幅移动止损(Trailing Stop)的多币种系统。趋势判断使用作者自编的均线斜率指标,输出三种信号:买入、卖出、观望。为对抗假信号,一旦方向正确便让利润奔跑。

激进之处体现在仓位管理:当盈利增长且出现信号时,EA会将持仓手数加至允许上限,几乎耗尽可用净值,直到自由保证金占余额30%才停止加仓。同时设置自由保证金上限,触顶即平仓锁定利润,随后重置为1万美元重新交易。为防止爆仓,EA实时监控Margin Call水平,在触及前主动平仓。

⚠ 高风险警示
这种'全保证金博弈'策略在实盘中极易因短期反向波动导致大幅回撤甚至强平,仅适合锦标赛这类以排名论英雄的场景,切勿直接用于真实账户。

四、多币种结构与EUR基组选择

Mercurius并非单一品种EA,而是交易EURUSD、EURAUD、EURGBP、EURCHF四个欧元直系交叉盘。它不会立刻在所有品种上开工,而是先在EURUSD积累足够净值,再拓展到其他符号。选择全EUR基准的原因很现实:账户以美元计价,手数受限,欧元对可让美元仓位更高效。

Antonio解释,EURUSD趋势线通常比其他货币对更平滑,因此多数参赛者偏爱它。但多币种也带来新难题:每个品种需适配不同参数,且需控制整体测试时间不超锦标赛限制。他的EA针对前一年夏天频繁转折的行情做了优化。

五、回测结果与实际偏差

在当年1至8月的历史测试中,EA最终余额约13.5万美元,资金曲线剧烈起伏。参数方面,他使用4个公共参数加每个符号6个参数;优化末期固定其余、仅调每个符号4个参数。然而历史表现与实盘迥异,若有条件他会对线上版本做大量修改。

这印证了EA开发中的经典陷阱:过度拟合与样本外失效。锦标赛环境充满新闻冲击,测试数据无法完全覆盖。他也坦承,夺冠需要策略与运气叠加,在众多版本中他主动选择了'吃运气'的不可预测版本,因为'第四名和第395名没有区别,进前三才重要'。

六、日志诊断与OrderCheck机制

访谈中他展示了Experts日志中的奇怪消息,例如'**** No se puede abrir posicion - 4756.00000000'(无法开仓)。原因在于其EA近乎耗尽保证金,OrderCheck虽初步验算通过,但临场仍可能资金不足。这揭示了MQL5风控函数与实际执行间的缝隙。

// 示例:使用OrderCheck预判开仓可行性
MqlTradeCheckResult check;
if(!OrderCheck(request,check))
{
   Print("No se puede abrir posicion - ", check.retcode);
   return false;
}

对于中文开发者,应养成在发送交易请求前用OrderCheck、并在OnTradeTransaction中捕获失败返回码的习惯,尤其当策略涉及动态加仓时。

七、MQL5生态与新服务看法

谈及MQL5.com新服务,他认为Jobs(自由职业任务)起步扎实,Cloud Network分布式计算将极大提升EA测试效率——他当时仅用4核本地代理,已预见云代理的潜力。学习资源上,文档最常用,论坛与文章补足疑点。

他对MetaQuotes的评价积极,仅建议编译器对弃用函数(如CPositionInfo::Type)给出警告。这反映出官方环境已较成熟,社区协作是进阶关键。

八、对中文交易者的实操启示

✦ 延伸阅读
原文访谈见 https://www.mql5.com/zh/articles/539 ,可对照英文与俄文版挖掘细节。

常见问题

Mercurius是罗马神话中的商业之神,作者为EA取名时从神话人物中挑选,认为契合交易主题。
OrderCheck可在发送下单请求前校验保证金是否充足,返回MqlTradeCheckResult结构。激进加仓EA应每次加仓前调用,并结合日志捕获'无法开仓'类返回码,防止误判可用资金。
因为账户以美元计价且手数有限,欧元系交叉盘能让美元仓位更高效;同时EURUSD趋势较平滑,先以其积累净值再扩展到EURAUD、EURGBP、EURCHF。
适合不会编程的交易者快速生成测试用EA框架,但如Antonio般追求最大控制权的开发者通常手写代码,Wizard仅作原型验证。
如Mercurius近乎耗尽保证金博取排名,遇反向波动易大幅回撤或强平;历史回测与实盘偏差大,绝不可直接上真实账户。