ATC冠军访谈:高风险的EA设计哲学
从西班牙选手Mercurius看马丁加仓与多币种实战
一、访谈背景与选手画像
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,但他本人为追求最大控制权选择手写代码。
在交易函数使用上,他指出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)给出警告。这反映出官方环境已较成熟,社区协作是进阶关键。
八、对中文交易者的实操启示
- 激进加仓仅限竞赛,实盘务必预留充足自由保证金
- MQL5多币种开发优先理清position与order生命周期
- 自编指标结合均线斜率可过滤部分震荡假信号
- 回测参数不宜过多,避免样本内过拟合
- 善用OrderCheck与日志,快速定位资金不足类异常
- 非程序员可借MQL5 Wizard起步,再学手写控制逻辑