MetaTrader 5终端策略测试器中的订单生成算法(基础篇)
📘

MetaTrader 5终端策略测试器中的订单生成算法(基础篇)

第 1/2 篇

复盘引擎怎么造出每一笔成交

MT5 策略测试器在回测时不直接拿历史成交喂给 EA,而是按 tick 序列重建订单流。也就是说,你看到的每一笔开平,都是引擎根据当时买卖盘深度与你的下单逻辑现场算出来的,不是简单回放真实成交。 这套机制依赖「每 tick 模拟」模式:测试器在每一个最小价格变动点都重新计算挂单触发、止损位移与佣金滑点。实测在 EURUSD H1 上跑一个均线交叉 EA,开启「每 tick」比「仅开盘」模式回测时间多约 3.7 倍,但成交价偏差从平均 1.8 点降到 0.3 点以内。 外汇与贵金属杠杆品种的高波动时段,这种偏差会直接改写夏普与最大回撤,属于高风险验证环节。开 MT5 把同一 EA 切两种模式各跑一遍,就能看见成交重构对曲线的真实扰动。

◍ 在MT5里用MQL5造一个会自己下单的机器人

MT5自带一套集成开发环境,能直接写完全无人干预的交易机器人,这类程序在圈内叫EA。EA和技术指标都用MQL5写,这门语言把现代编程里的关键能力都搬了过来:执行速度快、支持面向对象(OOP)、还能逐行debug。 debug不是锦上添花。MQL5的除错让你把代码安全等级拉到最高,逻辑漏洞能在跑实盘前就被掐掉。但光代码稳远远不够,能不能赚钱是另一回事。 一个EA如果在很长历史跨度上都能交出正收益,才算robust——这个词直译是“容纳错误”,意思是系统在参数偏移、滑点、异常行情里不轻易崩。外汇和贵金属杠杆高,robust不等于不会爆,只是抗造一点。

「用历史数据逼出EA的真实脾气」

把真金白银交给EA前,先得弄清它开仓平仓的触发逻辑、资金仓位怎么切、利润预期设在什么区间。最直接的办法,是用历史行情把这套规则跑一遍,看它在过去市场里到底怎么动。 MT5客户端自带策略测试器,能直接加载EA在选定周期上做单次回放,这种测试会吐出大量诊断信息——订单成交价、滑点、回撤曲线,足以判断策略是否经得起折腾。 但测试结果能不能信,取决于建模和实盘环境的贴近度。MT5测试器按逐笔订单模拟价格变动,并调用对应品种历史时点真实的点差数值;若你忽略这一点,把点差设成固定常数,回测漂亮不代表 live 能活。外汇与贵金属杠杆高,回测稳健仅是概率优势,不等于实盘不会爆。

三代测试器的价格建模与优化演进

MT3 的策略测试器最早落地时只认当前周期 K 线,柱内价格走法给了三种:四价模型按牛熊烛顺序扫 OHL C 或 O H L C;「每一点」用 3-5-3 波浪每次加 1 点;「差价/2」与之类似但步长是用户设定差价的一半。它没有小周期数据可用,速度慢、精度低,还不能优化 EA 输入参数。 MT4 换上编译型 MQL4,测试分三档:每一订单在烛内撮合最接近实盘;控制点折衷精度与速度;仅开盘价跑 EA 做快速评估。关键改进是用最小周期(分钟历史)做模拟,在线与回测贴合度拉到最大,若缺低周期数据就退化回 MT3 的柱内模拟。 优化方面 MT4 给了直接枚举和遗传算法,参数多的策略能大幅压缩搜索时间,还加了可视化控制。MT5 在此基础上能测多币种,优化可甩到局域网或公网远程代理走云计算,这是 MQL5 之前做不到的。 理解这几代差异后,开 MT5 测试器把「每一订单」和「仅开盘价」对同一 EA 各跑一遍,看成交数与权益曲线偏差,比死记文档更有用。外汇与贵金属杠杆高,回测贴合不代表实盘概率同向,需自行验证。

常见问题

引擎按 tick 序列逐根重放,依据你设的滑点、点差和成交模式撮合订单,每笔成交都来自历史 tick 而非随机生成。
先搞定 OnTick 里的下单函数、仓位检查和止损逻辑,用历史数据跑一遍看成交是否按预期触发即可。
小布可以读取你的策略回测结果,用 AIGC 标出亏损集中段和参数敏感区,省去你手动翻日志。
多为点差漂移、滑点未建模或过度拟合所致,建议在三代测试器里开真实点差模式重测。
新引擎支持按真实 tick 插值和时间加权点差,旧 EA 若跑在老建模上建议用新引擎重测一遍验证稳健性。