ATC冠军访谈:风险预见的EA设计
从2010自动交易大赛看资金管理实战
谁是 Alexander Anufrenko 与 ATC 2010
Alexander Anufrenko(论坛ID:Anufrenko321)是2010年自动交易锦标赛(ATC 2010)的参与者。他自称外汇与编程新秀,半年前由明斯克朋友带入自动交易世界。在白俄罗斯布列斯特地区,自动交易并不普及,但他毕业于白俄罗斯国立经济大学,具备一定编程基础。锦标赛进行中,他的EA曾连续三周稳居前三,后遭遇一次约6万美元的灾难性止损,净值大幅回落,但不久又逼近领先位置。该案例对中文交易者理解“激进型EA”的真实表现极具参考价值。
ATC是MetaQuotes举办的年度实盘/模拟资金自动交易大赛,规则要求参与者使用MetaTrader 5与MQL5编写EA,在限定初始资金与最大持仓(如15手)下比拼收益。这种赛制天然鼓励高风险、自适应资金管理,也暴露出许多实盘容易忽略的坑。
EA核心逻辑:均值比较只是入口
Alexander明确指出,其EA决策基础是“均线的比较”,但他强调这只是想法的一部分,而非主体。真正关键的是出场标准——止损(SL)与止盈(TP)的设定,以及被称为“独门秘技”的动态止损。许多中文初学者误以为“金叉死叉+均线”就能盈利,其实进出场与仓位才是锦标赛级EA的胜负手。
他的EA快速决策以节省锦标赛宝贵时间,并选用其认为投机性最强的货币对GBP/USD。组成可概括为:均线比较入场 + 经验TP + 动态SL + 激进自适资金管理 + M1周期 + GBPUSD。这种组合在短期内可冲高收益,但也放大了极端行情下的破产风险。
- 入场:均线比较,但非主要逻辑
- 出场:固定TP对应货币对日波幅,动态SL为自研
- 资金管理:随权益放大手数,激进但不触Stop Out
- 品种:GBP/USD,因高投机性
- 周期:原用M1,后认为应改H4
止盈与动态止损的设计细节
Alexander设置恒定Take Profit,数值经验性地对应货币对每日平均波动,以避免价格触达极端点。但实战证明这不总成功。止损则是动态的,他称之为know-how。那次大型止损并非偶然,而是动态SL在剧烈行情下的正常输出。小部分无止损的小仓位单,据他解释源于组委会重启系统后的行为。
动态止损意味着SL随价格或指标实时重算,而非固定点数。这能在趋势中让盈利奔跑,但在反转时会比固定SL亏更多。中文交易者若模仿,需在MQL5中用PositionGetDouble获取浮盈,并结合ATR或均线斜率重写SL。
// 示例:基于ATR的动态止损修改(简化) double atr = iATR(_Symbol, PERIOD_M1, 14, 0); double new_sl = SymbolInfoDouble(_Symbol, SYMBOL_BID) - atr * 2.0; CTrade trade; trade.PositionModify(pos_id, new_sl, pos_tp);
激进自适应资金管理解析
Alexander的资金管理任务是在可能处冒险、保持侵略性且不落入Stop Out。入场手数依赖可用净值,是一个标准模块(取自MQL5网站文章),并受锦标赛15手规则约束。这种“净值越大仓越大”的逻辑,使净值曲线如过山车。
他在测试时先用固定手数寻找正期望策略,再加入自适应资金管理,并以盈利为准则优化均线参数。测试图表正常无极端回撤,但实盘仍遇黑天鹅。这印证了:历史回测无法覆盖所有概率情形,必须尽量容纳多种行为分支。
为什么选一分钟周期与GBP/USD
Alexander原认为M1波动最大、盈利概率好,但后来反思入场时间其实接近1小时甚至4小时,若重来会将周期改为H4并重构退出。币种选GBP/USD因其高投机性,与多位白俄选手思路雷同。这说明周期选择常与退出机制错配,新手不宜盲目追短周期。
在MQL5中,周期通过ENUM_TIMEFRAMES传入iMA等函数。若出场基于H4而入场算M1,需跨周期读取:iMA(_Symbol, PERIOD_H4, ...)。跨周期处理不当会导致信号不同步。
// 跨周期获取H4均线值 int hma = iMA(_Symbol, PERIOD_H4, 20, 0, MODE_SMA, PRICE_CLOSE); double val; CopyBuffer(hma, 0, 0, 1, &val);
从灾难止损中学到什么
那次超5万美元止损后,Alexander用混沌系统蒙特卡洛类比:原82k份额因回撤变20k,夺冠概率重算。但他强调市场非混沌,一切仍在前方。对中文用户的启示是:用概率思维评估EA,但必须承认模型局限;赛后他坦言若给机会会改周期与入场规则,但锦标赛即运动,无需后悔。
“A danger foreseen is half avoided”(预见危险即避一半)是他的座右铭。在MQL5开发上,这意味着应在代码层预置极端行情开关,例如日内波幅超限暂停交易、净值回撤超20%降仓等。
- 预置最大日亏损熔断
- 动态SL需搭配最小盈利保护
- 组委会重启等外部事件要写异常恢复
- 不在实盘直接用ATC激进仓控
回测、优化与真实边界
Alexander的测试流程分两步:固定手数优化均线参数求正期望;再叠加自适应资金管理以盈利为标准优化。测试图无极端回撤,但实盘出现。这揭示MT5策略测试器的局限——它基于历史tick,无法生成未发生的极端序列。中文交易者应使用多品种、多时段样本,并人工注入压力场景。
MQL5的OnTester与frame优化可辅助,但参数过拟合风险高。建议用Walk Forward:样本内优化、样本外验证,避免如ATC般实盘受重挫才暴露缺陷。
给中文交易者的可操作清单
综合访谈,我们可提炼出写稳健又有冲力的EA的步骤:1)用MQL5参考文档与代码库学标准模块;2)入场用简单均线比较,不恋战;3)TP按日波幅经验值,SL写动态函数;4)资金模块设权益百分比但封顶;5)周期与退出对齐;6)回测加压力测试;7)留异常重启恢复。如此方能“预见危险”。
MQL5社区文章与代码库(Code Base)正是Alexander所说“不必懂全部原理也能改块”的资源。中文用户应善用,但牢记官方不承担策略后果,实盘前必自测。