首页 / 交易学院 / 小布知识库 / ATC冠军访谈:多币种EA与MQL5实战
ATC冠军访谈:多币种EA与MQL5实战
🤖

ATC冠军访谈:多币种EA与MQL5实战

从程序员视角拆解稳定EA的构建逻辑

MQL5开发 难度 · 进阶 2026-02-26 7 分钟阅读
#MQL5#多币种EA#ATC访谈#风险管理

受访者背景与交易历程

Valery Mazurenko 是一名资深程序员,曾在交易商(Dealing Center)工作约两年,参与开发了两版客户端交易平台,其中一版他至今仍在使用。在 MQL2 时代,他开设了第一个真实账户运行自己的机器人。六年间他编写了大量不同类型的 EA,最终得出一个朴素但重要的结论:EA 不需要复杂,理念越简单,结果往往越稳定。早期他将交易视为爱好,近半年才认真考虑将爱好货币化,目标是写出可实盘稳定运行的 EA。

他在 ATC 2006 使用了单币种 EA,而从 ATC 2007、2008 到 2010 都提交了多币种 EA。在 2010 年锦标赛第一周,他凭借名为 ch2010 的多币种 EA 登上榜首。这种持续参赛并迭代的思路,对普通交易者很有参考价值:把比赛当作压力测试和公开验证场,而非一夜暴富途径。

✦ 关于首次实盘
他的第一个机器人如今不会允许实盘交易。当时月盈利曾达 50%,但交易商因自动交易政策关闭了其自动化选项,之后他手动交易亏掉了本金。这提醒我们:策略盈利与经纪商政策、执行环境强相关。

数学在交易中的真实角色

Valery 指出,构建资金管理与风险管理策略时,严肃的数学是必要的;但要创建相对无损的系统,并不要求你是数学家,而是需要两点:健全的视角与清晰的头脑。很多论坛上关于锁仓、马丁、网格、剥头皮的激烈争论,在他看来答案显而易见,但许多交易者看到测试器或 demo 上的漂亮曲线就陷入催眠状态。

他认为开发盈利策略需要数月试错与测试,数学不好并不是障碍。但他特别批判了一种有害假设:例如规定回撤不得超过入金 30%。他提出,可以用 Stop Out 充当 Stop Loss,而将那 70% 闲置资金存银行拿利息。资金管理必须针对每个策略单独计算,盲目套用通用规则是坏结果的根源。

⚠ 常见误区
不要因为别人说'回撤不超30%'就硬套到自己的 EA 上。多币种趋势 EA 与单币种网格 EA 的风险结构完全不同,资金曲线特征也不同,必须分别建模。

为什么选择多币种 EA

Valery 没有偏好的货币对。任何新想法都会先在随机选择的货币对(不仅是外汇,也包括 CFD)上测试,失败则丢弃。两年爱好经验让他感觉多币种 EA 更稳定——虽非严格证明,但他要求策略在多个随机品种上均表现良好才视为有效。他认为多币种对程序员更有发挥空间,长期看生存概率更高。

从工程角度看,多币种意味着分散特异性风险:单品种黑天鹅或季节性呆滞不会摧毁整体。但代价是参数空间变大、优化更复杂,对代码架构要求更高。这正是他推崇 MQL5 面向对象的原因。

锦标赛经验与行情认知

他总结的第一条经验:下跌是趋势季,横盘策略会失效(参考 2006、2007);但迟早会出现回调与反转(如 2008),杀死无法反应的系统。他并不认为自己过往参赛不成功,因为总在找正面经验。2010 年他的机器人以每对 0.1 固定手数、无 averaging,年内近乎三倍,最大回撤 33%,因此有理由相信锦标赛结尾为正。

这条经验对中文交易者的启示是:不要迷信一种市况下的回测美景。必须考虑趋势/横盘切换的鲁棒性,以及在反转中幸存的逻辑分支。

✦ 历史教训
2006/2007 横盘杀趋势 EA,2008 反转杀横盘 EA。你的 EA 必须明确:它赚的是什么市况的钱,以及市况切换时怎么活下来。

EA 交易原则与模糊性设计

他的 EA 除'趋势是朋友'外,故意引入两个随机(模糊)因素,使系统变'粗糙'。有经验开发者能很快发现第一个模糊因素,第二个他保密。此外使用了仓位 averaging,但他强调这不是策略核心,而是锦标赛的激进资金管理。这种'故意不完美'的思路,实际是对过拟合的一种防御:纯精确规则易在实盘失效。

模糊逻辑与他研究生方向一致。在实盘化时,这种粗糙性可能反而提高鲁棒性,避免对历史噪声的过度记忆。但这不等于随便加随机,而是有数学背景的受控随机。

锦标赛中的资金管理方案

锦标赛中他没有用严肃资金管理,而是在挂单时占用 1/15 自由保证金。有一个小安全垫:若手数小于 0.1,只要有其他订单持仓就不四舍五入到 0.1。他举例可扩展条件:当存在其他持仓且 FreeMargin < 0.7*Balance 时不新开单。若锦标赛成绩好,他会认真做资金管理,尤其研究 Ralf Vince 的'最优 F'在多币种 EA 的应用。

最优 F 对单币种无 averaging 的策略不难算,但多币种叠加 averaging 时计算复杂。这揭示了一个现实:很多学术资金管理方法在工程落地时需要大量定制。

// 简化的安全垫逻辑示例(非原文完整代码)
if(PositionTotal() > 0 && AccountInfoDouble(ACCOUNT_FREEMARGIN) < 0.7 * AccountInfoDouble(ACCOUNT_BALANCE))
{
   // 不新开订单
   return;
}

挂单逻辑与限价单偏好

他早期就决定只用限价单:无滑点、无重新报价问题,大幅简化代码。限价单顺趋势挂,等待小回调;averaging 订单永远在持仓开价之后。这种纯粹限价单风格在现今 ECNDMA 环境依然有生命力,尤其适合不想被撮合不确定性干扰的策略。

MQL5 学习曲线与面向对象价值

作为 C/C++ 与 Delphi 程序员,他用两个晚上学会所需 MQL5 并写出参赛 EA:第一晚原型,第二晚调试。他弃用标准库以节省五位数报价处理时间与函数调用开销。他认为 MQL5 访问柱数据不太方便,但 OOP 对多币种 EA 极方便。

在 MQL4 中他不得不用数组组存各品种参数,代码充满遍历循环;MQL5 只需声明类、写清单品种逻辑,然后通过实例化轻松变成多币种,且逻辑清晰。他还喜欢:访问所有品种(即便不在 Market Watch)、__LINE__ 宏、定时器事件、自定义优化准则计算。唯一遗憾是不能以程序方式按自定义准则中断优化。

// MQL5 多币种类实例化简例
class CMyEA
{
public:
   void Init(string symbol) { m_symbol = symbol; }
   void OnTick() { /* 单品种逻辑 */ }
private:
   string m_symbol;
};

CMyEA eur, usd, jpy;
eur.Init("EURUSD"); usd.Init("USDJPY"); jpy.Init("GBPUSD");
✦ 迁移建议
从 MQL4 转 MQL5,优先用类封装品种状态。别照抄数组全局变量老习惯,否则多币种会难以维护。

对中文交易者的可落地启示

综合访谈,几点值得借鉴:一、策略简单化,先求稳定再求复杂;二、多品种验证,拒绝单一品种过拟合;三、资金管理必须按策略定制,不盲信百分比回撤教条;四、限价单可降低执行不确定性;五、用 MQL5 OOP 管理多币种状态;六、把比赛/公开榜当验证,而非赌注。

同时要注意,访谈中 averaging 与激进占用保证金是锦标赛行为,实盘需替换为严谨风控。模糊因素设计要有数学支撑,不能成随意随机。最后,优化器中断等工程痛点至今仍影响 MQL5 工作流,开发时应预设早停脚本或分批优化。

常见问题

MQL5 支持面向对象,可把单品种逻辑封装成类,再通过声明多个类实例(如 eur.Init('EURUSD'))轻松扩展为多币种,避免 MQL4 中大量数组与循环遍历品种的混乱代码。
锦标赛中他用挂单时占用 1/15 自由保证金,小手数时不强制四舍五入,并可用 FreeMargin<0.7*Balance 且有持仓时禁开新单作安全垫;实盘他计划研究 Ralf Vince 最优 F 做严谨风控。
可以。Valery 认为健全视角与清晰头脑比数学家身份更重要,数学主要用于资金/风险管理;策略本身可用简单理念加多品种验证与数月测试获得稳定性。
限价单无滑点、无重新报价问题,能大幅简化 EA 代码;他顺趋势挂限价单等小回调,averaging 单放在持仓价之后,执行确定性更高。