MQL5 Wizard:新版本·进阶篇
📘

MQL5 Wizard:新版本·进阶篇

第 2/2 篇

「把多源信号塞进一个 EA」

搭自己的 EA,第一步不是写逻辑,而是先钉死两件事:做哪个品种、看哪根周期。品种和周期没定,后面挂的指标信号全是空中楼阁。 以一套可直接复现的配置为例:品种锁 EURUSD,主周期用 M10。信号层不贪多,但跨了维度——本周期 EMA(31) 定方向,Stochastic(8,3,3) 看动量摆动;再拽一条 H1 的 EMA(24) 过来压趋势背景,顺手借 EURJPY 的 H4 Stochastic(8,3,3) 做跨品种共振过滤。 光有指标还不够,实盘里得砍掉垃圾时段。 IntradayTimeFilter 按星期几和日内钟点筛单,把流动性差、跳空多的窗口直接剔除。外汇与贵金属杠杆高、滑点凶,这种过滤不是装饰,是存活率问题。

用向导拼一个不跑错图的 EA

MT5 的 MetaEditor 里按 Ctrl+N 或点工具栏“新建”就能拉起 MQL5 Wizard,选 Expert Advisor (generate) 后它会在 terminal_data_folder\MQL5\Include\Expert\ 下读取 Signal、Trailing、Money 三个子目录里的基类,自动拼出可编译的 EA 源码。 第一步填名称和作者,重点在 Symbol 与 TimeFrame 两个输入参数。默认都是 current,意味着 EA 丢到任何图表都能跑——但这很危险。比如一个按 EURUSD 日内逻辑写、还依赖交叉盘确认的机器人,被你误开在 AUDNZD 周线图上,信号逻辑直接错位。手动锁死交易品种和周期,比依赖“当前图”更稳。 信号模块最多可叠 64 个,标准库自带 Moving Average、MACD、RSI、Parabolic SAR 等 20 类。以 Moving Average 信号为例,配好 PeriodMA 和 Method 后,双击 Name 字段把除 Weight 外的参数从优化列表里踢掉,避免后续跑优化时乱调基础周期。每个信号的 Symbol/TimeFrame 若和 EA 总设置不同才单独填,否则留空继承。 Trailing 这步本例选了不用跟踪止损;Money 选了固定手数。点 Finish 后向导就吐出完整 EA,你马上能在 MT5 里编译并挂图验证信号权重怎么影响下单倾向。外汇与贵金属杠杆高,向导生成的仓位逻辑未经实盘检验,爆仓概率不低,先开模拟盘跑。

◍ 用日内时间掩码榨出更干净的历史曲线

EA 编译通过后,真正的关卡在 MT5 策略测试器里跑优化。原文把样本框在 2010.1.1–2011.1.1,分两阶段跑:先定信号权重、触发门槛和交易价位,再叠加未曾启用的日内时间过滤。 第二阶段核心是一个 24 位掩码参数 Bad hours:每一位对应一天中的一小时,置 1 表示该小时强制屏蔽交易。优化区间从 0 扫到 2^24-1(16 777 215),步长 1,相当于穷举全部好/坏时间组合。 跑完得到最优值 11 665 415,转二进制是 101100100000000000000111,即 0、1、2、17、20、21、23 点为不佳时段。套用该掩码后,单遍测试报告呈现盈利抬升、回撤收窄的现象,说明历史样本内时间筛选可能改善系统表现。 但外汇与贵金属属高风险品种,这种历史过拟合倾向需警惕——掩码在 2010–2011 有效,不保证后续行情同分布。开 MT5 把 Bad hours 设成 11665415 复跑,对比关闭筛选的权益曲线,自己看位移。

「别急着下结论」

把交易策略类塞进 MQL5 Wizard,最大的实惠是少写胶水代码:标准库模块拼一拼,或挂上你自己的模块,EA 源码就能直接进策略测试器跑理念验证。 附带样本 sample.mq5 约 15.75 KB、回测压缩包 84.85 KB,在 MT5 里编译后若想跑优化,时间框架必须和代码一致(示例为 M10),日期窗口可设 2018.01.01–2019.01.01,否则容易在日志里看到“未启动优化、缺少 OnTester”的提示。 外汇与贵金属杠杆高、滑点跳空频繁,这类向导生成的机器人只代表历史逻辑自洽,实盘前请用模拟盘或小仓位先验证投票阈值与信号权重是否还成立。

常见问题

在向导里把每个信号源设成独立模块并给权重,回测时看各信号贡献度,删掉负相关高的那个。
给 EA 加图表 ID 与周期白名单校验,只在指定品种与周期启动,避免多图误触发。
小布可读取你的 EA 信号组合与历史曲线,标出冲突时段并提示该关掉哪个源,省去手动比对。
拉长回测年份补样本,或只掩掉流动性最差的 2~3 小时,别一刀切掉半边天。
验滑点设定、点差敏感度和信号重算延迟,这三项最容易导致向导单变实盘亏。