用MT4还是MT5,在做EA的圈子里是一个绕不开的选择题。很多人选平台的时候只看界面习惯或者经纪商支持哪个,但实际上对于EA开发者来说,两个平台之间最关键的差异不在交易功能上,而在策略测试器的回测机制上。你在哪个平台上验证策略,直接决定了你看到的回测结果有多大的可信度。
这篇文章把两个平台的回测机制做一个系统的对比,尽量讲清楚每种模式到底在做什么,区别在哪里,各自的局限是什么。
MT4和MT5的背景
MT4是MetaQuotes公司在2005年发布的交易平台,使用MQL4语言编写EA。它发布的年代正值零售外汇市场快速增长的时期,凭借简洁的界面和足够用的功能迅速成为了行业标准。到今天将近二十年过去了,MT4仍然占据着巨大的市场份额,很多经纪商的主力平台还是MT4。
MT5是MetaQuotes在2010年发布的继任者,使用MQL5语言。它在多个维度上做了改进:支持更多的时间框架(21种,MT4只有9种)、支持多品种同步回测、支持净持仓和对冲两种账户模式、编程语言更接近现代C++。但由于MT4的用户惯性太强,MT5的普及速度比MetaQuotes预期的要慢得多,直到近几年才逐渐成为专业EA开发的主流选择。
两个平台都可以做交易和回测,但回测引擎的设计理念和精度有本质区别。
MT4的回测机制
MT4的策略测试器提供三种模式。
第一种是"仅用开盘价"。这是最粗糙的模式,每根K线只在开盘价产生一个tick,EA的OnTick函数每根K线只被调用一次。它跑得最快但精度最低。如果你的策略严格只在K线收盘后判断信号,并且不使用挂单、不设止损止盈、只在下一根K线的开盘时刻执行交易,那这个模式的结果是可以参考的。但只要你的策略涉及K线内部的任何价格波动,这个模式就不适用了。
第二种是"控制点"。它用次一级时间框架的K线OHLC(即Open开盘价、High最高价、Low最低价、Close收盘价,一根K线记录的四个关键价格)作为控制点来插值生成tick。比如你在测试H1的策略,它会用M30的K线数据来生成H1内部的价格运动轨迹,每根K线大约产生3到6个tick。比仅使用开价精细了一些,但仍然只是用少量的控制点做了一个粗略的路径模拟。
第三种是"每个即时价格",这是MT4最高精度的模式。它从M30、M15、M5一直到M1的K线数据逐层使用OHLC做分形插值,最终生成一个相对完整的tick序列。每根M1 K线大约能生成1到12个tick。这个模式在MT4的三种里精度是最高的,大部分认真做回测的MT4用户都会选这个模式。
但即使是"每个即时价格"模式,MT4的回测仍然有几个架构层面的问题是无法回避的。
第一,所有tick都是算法生成的。MT4没有真实的逐笔报价数据,它的tick是从K线的开高低收四个价格通过固定的分形模式插值"造"出来的。真实市场在活跃时段一根M1 K线内可能有50到300个tick,价格运动的路径是高度不规则的,而MT4只能造出1到12个,走的是算法预设的固定路径。这意味着K线内部的价格运动细节——比如是先涨到High再跌到Low,还是先跌到Low再涨到High——在MT4里是靠算法推测的,不是真实发生的顺序。这个问题直接影响到止损和止盈的触发顺序,在某些情况下可能导致回测结果和真实情况完全相反。
第二,只能使用固定点差。这是一个数据格式层面的硬限制。MT4的历史数据文件(.hst格式)只存储了Bid价格,不存储Ask价格。没有Ask就没有真实的点差信息,回测时只能由你手动设定一个固定值。但真实市场的点差是时刻在变化的。以EURUSD为例,欧盘活跃时段点差可能只有两三个点(这里说的"点"是5位报价下的最小单位,0.00001为1个点,10个点等于传统定义的1个pip),非农数据发布的瞬间可以扩大到两三百个点,亚盘流动性低的时候也会比正常时段宽出两三倍。你设一个固定点差15个点,在活跃时段高估了成本导致本该盈利的信号变成亏损,在新闻时段又严重低估了成本导致本该巨亏的交易在回测里轻松过关。两头都不对。
第三,"复盘模型的质量90%"是个误导性的数字。MT4的回测报告里有一项叫"复盘模型的质量",用"每个即时价格"模式跑出来通常显示90%。很多人以为这代表回测有90%的准确度,实际上这个数字的计算公式里M1数据的权重系数是0.9,所以当全部数据都用M1来建模的时候,上限就是90%。它代表的是"数据用到了最精细的M1级别",跟回测结果的可靠程度没有任何直接关系。如果使用第三方工具(比如Tick Data Suite)导入Dukascopy等来源的真实tick数据,这个数字可以达到99%,但那已经是在用外部工具弥补MT4自身架构的不足了。
MT5的回测机制
MT5的策略测试器提供五种模式,比MT4多了两种。
第一种"仅使用开价",和MT4的对应模式原理相同,每根K线一个tick,速度快精度低。
还有一种"数学计算"模式,这个模式不下载历史数据也不生成报价,只调用EA的初始化和测试函数,是给纯数学参数优化用的,跟行情回测完全不是一回事。
第二种"1分钟OHLC",基于M1 K线的四个价格点生成tick,每小时的H1 K线会产生大约240个tick(60根M1 × 4个价格点)。这个模式没有K线内部的价格运动细节,但比仅使用开价好很多。
第三种"每次报价",和MT4的最高精度模式类似,用算法从M1数据插值生成完整的tick序列。但有一个区别:MT5这个模式的点差取的是该K线的最低点差值,虽然不是真实的逐tick浮动点差,但比MT4的完全固定要好一些。
第四种"每个点基于实时点",这是MT5独有的模式,也是两个平台之间最核心的差异。
这个模式不做任何插值或算法生成,它直接从经纪商的交易服务器下载存档的真实逐笔tick数据进行回放。每一个tick都是历史上真实发生过的报价,携带当时真实的Bid价格和Ask价格,点差随每个tick自然变化。测试前MT5会自动从服务器同步历史tick数据,至少覆盖测试起始日前一年的深度。
这个模式下的tick数据量大约是算法生成模式的两倍,比如同一段时间算法模式生成1800万个tick,真实tick模式可能有3400万个。相应地回测速度也慢了将近一倍。但报价层面的还原度是质的飞跃——你看到的每一个价格、每一个点差都是当时市场上真实发生过的。
需要注意的一点是,外汇是场外交易市场(OTC),没有统一的中央报价源,不同经纪商的tick数据是不同的。你在ICMarkets的tick数据和在Pepperstone的tick数据会有差异。所以用真实tick模式回测时应该使用你实际交易的那个经纪商提供的数据,而不是随便用哪家的。
MT4 vs MT5 对比总结
| 对比项 | MT4 | MT5 |
|---|---|---|
| 回测模式数量 | 3种 | 5种 |
| 最高精度模式 | 每个即时价格(算法从M1插值生成tick) | 每个点基于实时点(经纪商真实tick回放) |
| tick数据来源 | 算法生成,每根M1约1-12个tick | 真实历史tick,活跃时段每根M1可达50-300个 |
| 点差 | 固定(.hst格式不存储Ask价格,架构硬限制) | 浮动(每个tick携带真实的Bid和Ask) |
| 多品种同步 | 不支持(只有主图表品种有tick模拟) | 原生支持 |
| 延迟/滑点模拟 | 无 | 支持固定延迟和随机延迟 |
| High/Low触达顺序 | 算法推测(可能跟真实情况相反) | 真实tick模式下按真实顺序回放 |
| 数据质量指标 | "复盘模型的质量"上限90%(M1权重系数0.9) | "质量历史"可达100% |
| 时间框架 | 9种 | 21种 |
| 编程语言 | MQL4 | MQL5(更接近现代C++) |
总结来说,MT5在报价还原层面解决了MT4的三个核心问题:tick从假的变成真的,点差从固定变成浮动,多品种从不支持变成原生支持。
即使用MT5也解决不了的问题
但MT5也有它解决不了的问题,而且这些问题才是回测结果不可靠的真正根源。
第一,流动性假设失真。无论MT4还是MT5,回测都默认你的任何订单能按当前价格即时成交。但真实市场中你的订单会推动价格,尤其在流动性薄的时段或新闻发布前后,你的实际成交价可能比你看到的报价差出好几个点。MT5虽然提供了延迟模拟功能,可以设置固定延迟或随机延迟来间接产生滑点效果,但这种模拟很简化,它不知道订单簿的真实深度是多少,也不知道你的单子在当时的市场条件下需要多长时间才能被完全消化。
第二,过拟合。你在历史数据上反复调参数,总能找到一组让曲线变漂亮的值,但那可能只是精确拟合了历史中的噪音而不是规律。这个问题跟用什么平台无关,跟你的验证方法论有关。
第三,未来函数和指标重绘。如果你的EA代码无意中使用了当前K线的收盘价(在实盘中这根K线还没走完,收盘价根本不存在),或者使用了某些会修改历史已显示值的重绘指标,那无论在哪个平台、用什么模式回测,结果都是虚假的。这类问题出在策略代码里,不在回测引擎。
第四,市场微结构变化。2020年黄金的波动率特征和2025年不一样,品种间的相关性在变,参与者结构在变。历史不会原样重复,这是所有基于历史数据的验证方法的根本局限,没有任何平台能解决。
实际操作建议
如果你还在用MT4做回测,至少要用"每个即时价格"模式,并且清楚地认识到固定点差带来的偏差。如果你的策略是剥头皮或者对点差敏感的短线策略,MT4的回测结果基本不可参考,建议迁移到MT5或者使用Tick Data Suite给MT4补上真实tick数据。
如果你在用MT5,回测时应该选择"每个点基于实时点"模式,并且使用你实际交易的经纪商数据。回测结果出来之后不要只看总收益,至少看最大回撤、盈亏比、交易笔数(不低于200到300笔才有统计意义)。如果条件允许,做一次样本外测试和Walk-Forward分析来检验是否存在过拟合。
无论用哪个平台,回测都只是策略验证的第一步,不是终点。通过回测筛选出来的策略还需要在模拟盘上跑至少一到三个月,看看实际执行和回测之间有多大的偏差,然后才值得考虑上实盘。