ATC冠军访谈:ZigZag挂单EA实战拆解
从2012自动化交易冠军策略看稳健EA构建思路
一、受访者背景与锦标赛表现概览
Evgeny Gnidko 在网络上的昵称是 FIFO,他并非会计背景,而是拥有程序员与经济学的双料高等教育,具备 C++ 与 C# 编程能力,因此上手 MQL4 与 MQL5 几乎没有障碍。他从约五年前接触在线交易开始,就着手基于 MT4 内置指标编写简单的交易机器人,并长期研究外汇自动化交易。在参加 2012 年自动交易锦标赛(ATC 2012)之前,他已多次参与类似赛事,并曾在模拟比赛中获胜。本届锦标赛中,他的 EA 名为 ice_rain_ATC2012,在前三周便进入 TOP-10,并成为当时最稳定的机器人之一。首月该 EA 频繁交易,随后在十一月波动收窄时转为安静等待,这种节奏并非错误,而是策略使然。
FIFO 明确表示,成功来自三方面:经过测试的优质 EA、有利的市场环境以及一定的运气。他强调自己不参与手动交易,因为自动化交易在速度、纪律性与历史回测方面具有压倒性优势。他也分享过被不诚信经纪商以 off-quotes 干扰机器人并吞没利润的负面经历,这提醒我们运行环境的选择同样关键。
二、核心策略原理:ZigZag 与挂单结合
ice_rain_ATC2012 的核心非常直白:利用常规 MetaTrader 自带的 ZigZag 指标计算特定价位,并在这些价位上布置挂单(pending orders)。ZigZag 擅长过滤噪音、确定价格运动方向及关键拐点水平,在 M15 周期上表现最佳。EA 不在盘中追价,而是等待价格触达计算好的水平,再触发条件重新计算后续挂单位置。
具体风控结构为:止损(Stop-Loss)设置为数倍小于止盈(Take-Profit),并配合动态追踪止损(Trailing Stop)与信号过滤机制。这意味着策略偏好捕捉较大波动空间,用小止损博取相对大的盈利,同时用 trailing 保护浮动利润。由于 ZigZag 本身存在重绘特性,实盘应用必须明确水平计算完成的确认机制,否则容易出现访谈中提到的“应当重算却未重算”的异常。
- 使用标准 MT5 ZigZag 指标,未自研指标
- 在 M15 周期测定方向,挂单于 ZigZag 算出的支撑阻力位
- 止损远小于止盈,盈亏比占优
- 动态 Trailing Stop 锁定利润
- 信号过滤机制降低假突破干扰
三、参数设定与优化方式的反常规做法
与传统认知不同,FIFO 并没有在策略测试器中做大规模参数优化。他的止损、止盈、追踪止损等参数主要靠视觉观察与直觉确定,再使用 tester 做验证。他通过测试发现了 EA 行为随参数变化的某些模式,挑出能让余额在最短时间内快速领先的参数组合。换言之,优化准则是“短期内余额增长最快”,而非常见的夏普比率或回撤最小。
这种做法对开发者的盘感要求极高,不适合纯新手照搬。但它揭示了一个事实:历史拟合过度未必强于逻辑简洁、参数少且肉眼可解释的系统。对于中文交易者,建议先理解 ZigZag 拐点意义,再用少量参数做前向检验,而不是盲目跑遗传算法。
// 示例:MQL5 中获取标准 ZigZag 句柄与最近拐点(简化片段)
#include <Indicators\Trend.mqh>
int zigzagHandle = iZigZag(_Symbol, PERIOD_M15, 12, 5, 3);
double buf[1];
CopyBuffer(zigzagHandle, 0, 0, 1, buf);
// buf[0] 为当前 ZigZag 值,0 表示未形成拐点
if(buf[0] != 0.0) {
// 在 buf[0] 价位附近布置挂单
}
四、实盘节奏与市场适应性
ATC 首月 EURUSD 波动较大,EA 积极挂单成交;进入十一月波动率下降,机器人几乎“ invisible”,因为它在等新的波动放大。FIFO 指出,当时 EURUSD 低波动限制了 EA 发挥。他的经验是:当前市场更适合突破系统(breakdown systems)而非回调系统(roll-back),策略若不适应市况就会失效。
他进一步说明,很多策略在市场结构变化、尤其高波动来临时会停止生效。开发者必须在机器人表现偏离测试时及时停掉。具体触发条件包括:实盘回撤超过测试器显示的最大值,或净值曲线出现不寻常形态。随后他用直觉与逻辑分析,并从一开始便预设“最可能出现的负面情景”来保底,即使最坏情况也力争保留小部分本金。
- 低波动期:EA 等待挂单触发,不强行交易
- 高波动期:突破类系统更易盈利
- 回撤超测试上限即减仓或停机
- 用直觉+逻辑判断市况切换,不依赖单一指标
五、自动化交易者的日常风控与经纪商陷阱
FIFO 坚定认为交易应交由机器人,人只负责监控与必要修改。他本人仅用 EA 交易,成绩起伏但整体可行。他特别提到一家不诚实经纪商用 off-quotes(报价断开)掐住机器人,事后反指其违规并吞没利润。这并非孤例,中文交易者常忽略执行端风险。
因此,除策略本身外,必须重视:1)选择监管透明、执行稳定的经纪商;2)在 VPS 上运行减少网络断点;3)监控成交滑点与 reject 率;4)对关键 EA 设置最大日亏停机。锦标赛环境虽公平,但实盘生态复杂得多。
六、从访谈看稳健 EA 的开发哲学
总结 FIFO 的思路,有几个可复用原则:第一,策略逻辑要少而清晰,ZigZag+挂单+小止损大盈利,组件都是平台自带;第二,不过度优化,用肉眼与 tester 交叉验证;第三,接受运气成分,但用风控底线约束毁灭可能;第四,持续观察市况,策略有生命周期,该停就停。
对于想参加类似竞赛或实盘量化的中文用户,建议从改写一个 ZigZag 挂单模板开始,先在 M15 欧美对上复盘三年数据,记录每次拐点确认后的胜率,再逐步加入 trailing 与过滤器。切忌直接搬运访谈未公开的算法细节,因为作者明确保留了核心。
- 逻辑简洁优于复杂黑箱
- 自带指标足够构建正期望系统
- 参数少、可解释性强
- 市况切换意识比模型精度更重要
- 人机分工:机器执行,人控风险
七、与常见马丁或网格方案的对比
很多中文社区热衷于马丁加仓或网格马丁,这类方案在低波动时漂亮,一旦单边便爆仓。FIFO 的 ZigZag 挂单属于方向性突破捕捉,止损明确且不下单加倍,资金曲线虽不平滑但无隐性杠杆炸弹。前者靠概率死扛,后者靠水平与止损胜率。对比之下,访谈策略更符合“可解释、可停损”的稳健定义。
当然,挂单策略在震荡市会反复止损,需要过滤;马丁在严控仓位下也能存活。选择哪种,取决于你能否接受回撤形态与监控成本。FIFO 用直觉选参数,普通人应改用明确规则,例如仅在 ZigZag 拐点与均线同向时挂单。
八、给中文交易者的落地步骤
如果你要将类似思路落到 MT5 实盘,可遵循以下流程:1)用 MQL5 向导建 EA 框架;2)调用 iZigZag 取最近非零值作为水平;3)当新 K 线收盘且拐点稳定,删除旧挂单、按止损/止盈比例下新单;4)开 TrailingStop 函数;5)在 OnTick 里检查日回撤超限则全部平仓并禁用交易;6)用策略测试器跑近一年数据,肉眼比对拐点成交合理性;7)模拟盘运行两周再上实盘。
记住 FIFO 的话:机器人做交易,人做监控与变更。把这篇访谈当作思维校准,而非代码抄写。市场永远在变,能活下来的不是最聪明的模型,而是最懂收手的人。