ATC冠军访谈:高风险EA设计启示
从西班牙选手Mercurius看马丁加仓与多币种的实战权衡
一、访谈背景与选手画像
2011年自动交易锦标赛(ATC 2011)期间,MQL5社区采访了来自西班牙的参赛选手Antonio Morillas,其论坛ID为sallirom(即其姓氏Morillas的反写)。他在锦标赛开局首日便将起始资金翻倍,立刻引起社区关注。与其他保守型EA不同,他的策略极度激进,依赖趋势判断与动态加仓,在短时间内用尽可用保证金以博取高收益。Antonio本人并非职业交易员,而是一名计算机工程师,在高中教授信息学,交易仅为其爱好。他此前参与过西班牙某经纪商组织的半自动MQL4比赛,每位参赛者在本机运行EA并可人工干预,这让他对自动化交易产生浓厚兴趣。直到一年前他才知悉MQL5的ATC赛事,随即着手准备自己的EA。
这一背景对中文交易者的启示在于:成功的EA作者未必是金融科班出身,具备编程能力与工程化思维同样关键。MQL5语法接近C++,对于有开发基础的人门槛并不高,真正的难点在于策略逻辑与风险控制,而非语言本身。
二、为什么选择MQL5而非MQL4
Antonio明确表示自己更喜欢MQL5。在他看来,MQL5允许轻松创建多币种EA或融合多种策略的机器人,而MQL4在架构上较为受限。尽管他本人未使用MQL5向导(Wizard),因为希望完全掌控程序逻辑,但他认为向导对不会编程的交易者非常有用,可快速生成用于测试的EA框架。
从技术演进角度,MQL5相较MQL4的核心优势包括:原生支持持仓(position)而非仅订单(order)模型、内置资金管理函数如OrderCheck、可并行使用本地与云代理测试、以及更严谨的面向对象结构(如CTrade、CPositionInfo等类)。对于中文用户,若从零起步,直接学习MQL5比纠缠MQL4历史包袱更有效率。
- MQL5语法类似C++,易为工程师掌握
- 支持多币种与多策略同驻一个EA
- 提供OrderCheck等风控函数避免无效下单
- MQL5向导降低无编程基础者的入门成本
三、Mercurius EA的核心策略逻辑
Mercurius是一个基于自编移动均线指标的多币种趋势EA。其指标根据均线斜率给出三种信号:买入、卖出或等待。为对抗假信号,EA在方向判断正确时让利润奔跑,并采用宽幅追踪止损(Trailing Stop)。真正使其与众不同的是「动态加仓至上限」机制:当浮盈增长且出现同向信号时,EA会将持仓手数逐步放大至允许最大值,几乎耗尽可用净值,直到自由保证金剩30%为止。
为防止爆仓,EA监控保证金水平,在达到Margin Call前主动平仓;同时设定自由保证金上限,一旦触及便锁定利润并将余额重置为1万美元重新起步。这种「要么登顶、要么出局」的哲学,源于Antonio认为锦标赛只有前三名有意义,第四与第三百九十五名并无差别。在回测中,该EA今年前8个月结果为13.5万美元,但曲线剧烈起伏,实盘与历史表现差异显著。
四、币种选择与多币种协同设计
Mercurius交易EURUSD、EURAUD、EURGBP与EURCHF四个欧元系货币对。Antonio解释,EURUSD趋势线通常更平滑,因此多数参赛者选它;而所有配对均以EUR为基础,是因为账户以美元计价且有手数限制,欧元系能更高效地消耗美元保证金。EA并非一开始全开,而是先在EURUSD积累足够净值后,才在其他交叉盘开仓。这样做既控制早期风险,又利用相关性分散。
他在优化时针对去年夏天频繁转向的行情调参,最终使用4个公共参数加每个符号6个参数,末阶段固定部分参数仅优化每符号4个。这反映出多币种EA的调参复杂度远高于单品种,且必须权衡策略测试时间限制。
- EURUSD作主引擎,积累安全垫
- 欧元系交叉盘提升美元保证金利用率
- 逐品种开启,避免早期过度暴露
- 参数分层优化,控制过拟合
五、开发细节与日志诊断经验
Antonio在日志中留下如「**** No se puede abrir posicion - 4756.00000000」的西班牙语提示,意为无法开仓。原因在于其EA几乎用尽权益,OrderCheck虽预先校验通过,实际提交时仍可能资金不足。这展示了MQL5中OrderCheck与真实执行间的缝隙:校验基于调用瞬间状态,不保证后续成交。
他学习MQL5的主要途径是官方文档,其次为论坛与文章。他也建议编译器对弃用函数(如CPositionInfo的Type方法)给出警告。这些细节提醒中文开发者:文档是第一手资料,但社区排查与版本迁移经验同样不可或缺。
// 示例:使用OrderCheck预判开仓可行性(Antonio逻辑简化)
MqlTradeRequest request;
MqlTradeResult result;
MqlTradeCheckResult check;
ZeroMemory(request);
request.action = TRADE_ACTION_OPEN;
request.symbol = "EURUSD";
request.volume = 15.0;
request.type = ORDER_TYPE_BUY;
request.price = SymbolInfoDouble("EURUSD", SYMBOL_ASK);
if(OrderCheck(request, check))
{
if(check.retcode == TRADE_RETCODE_OK)
OrderSend(request, result);
else
Print("Check failed: ", check.comment);
}
else
Print("OrderCheck error");
六、回测与实盘的鸿沟
Antonio坦承,历史测试与真实交易结果非常不同。若有条件他会在当时版本做大量修改。ATC这种公开赛实质是用实盘检验过度优化:8个月回测盈利13.5万,但曲线含多次深回撤;实盘首日翻倍后连亏跌落榜首。这印证了「样本外失效」是EA开发者的常态敌人。
对中文交易者的可执行建议是:任何EA上线前,除常规回测外,应利用MQL5云网络(Cloud Network)扩大样本,或做前向步进优化(walk-forward),并严控杠杆与加仓比例。切勿因竞赛亮眼曲线忽视实盘滑点、点差与流动性断裂。
七、对MQL5生态服务的看法
谈及MQL5.com新服务,他认为Jobs(自由职业任务区)起步扎实,Cloud Network将成为测试利器。彼时他只用本地4核代理,但已预见云算力前景。今日的MQL5市场(Market)与信号(Signals)亦是中文用户可借力的组件:市场售卖指标/EA,信号提供跟单,降低自研门槛。
从访谈可见,早期社区已构建「文档+论坛+市场+云」的闭环。中文交易者若善用这些官方设施,可比闭门造EA更快形成战斗力。需要注意的是,ATC策略不可直接上架市场,因竞赛规则与实盘合规要求不同。
八、普通交易者能学到什么
总结Mercurius案例,非职业选手也能借MQL5参与高级竞赛,关键在于:明确策略边界、用代码固化风控、接受运气成分、持续依据文档迭代。Antonio以罗马神话中商业之神Mercurius命名EA,寄望其再次起飞,也寄语其他参赛者感谢MetaQuotes提供平等舞台。
我们建议中文用户从单币种趋势EA起步,先实现稳定追踪止损,再逐步引入仓位管理;慎用马丁或极限加仓;用OrderCheck配合日志自查资金漏洞。如此,方能在不冒毁灭风险的前提下,吸收ATC先锋们的工程智慧。
- 工程师思维比金融背景更易跨过MQL5门槛
- 策略核心难在逻辑,不在语法
- 日志是诊断资金校验失效的利器
- 竞赛激进法不可平移至实盘账户