如何在MetaTrader 4中回测EA

要在MT4中回测EA(智能交易系统),先在History Center(F2)中加载价格历史,打开策略测试器(Ctrl+R),选择EA、交易品种、周期、模型和点差,按Start,然后查看Report选项卡。但一份好报告本身证明不了多少:MT4测试器忽略浮动点差、执行速度和滑点;如果试过很多组设置,最好的那组可能只是最幸运的。

下面我们一步步完成测试,然后讨论测试之后真正重要的问题:为什么回测可能好得不真实,如何用优化器从未见过的数据来验证,以及为什么实盘记录更有分量。这里没有什么神奇数字。文中的每个数字要么来自注明的来源,要么来自我们展示并标明的自行计算。菜单和字段名称与截图一致,使用MT4英文界面。

第1步:加载价格历史

回测的质量取决于背后的历史数据。在MT4中点击Tools → History Center或按F2,选择一个品种,然后按Download。终端会加载M1数据,并由此生成其他时间周期。

MetaTrader 4的History Center窗口,显示货币对列表

关于这些数据,有三点需要了解:

  • 它可能不是你的经纪商的数据。Download按钮使用MetaTrader的历史数据服务器,MT4帮助文档提醒,这些数据可能与经纪商交易服务器上的历史不同。
  • 你可以导入自己的数据。History Center的Import按钮支持CSV、PRN、TXT、HTM和HST文件,例如来自经纪商的历史数据。
  • 检查数据是否存在。如果测试器找不到某个品种和周期的历史,它只会下载最后512根K线。在相信结果之前,先看看测试日期和K线数量。

第2步:设置策略测试器

EA必须已编译并位于终端的Experts文件夹中。如果它没有出现在列表里,请参阅如何在MT4上安装和运行EA。然后通过View → Strategy Tester或Ctrl+R打开测试器,在Settings选项卡中填写以下字段:

MT4策略测试器的Settings选项卡:Expert Advisor、Symbol、Model、Period和Spread字段

  1. Expert Advisor:要测试的EA。
  2. Symbol:货币对。使用EA设计时针对的货币对。测试器只交易被测试的品种,因此交易多个货币对的EA无法在这里作为整体测试。
  3. Model:测试器重建价格走势的方式(见下表)。
  4. Period:EA运行的时间周期。
  5. Spread:见表格下方的说明。
  6. Use date:勾选后设置From和To日期。选择涵盖不同市场状况的时段,并记下要留给后文样本外测试的部分。
  7. Expert properties:在Testing选项卡中设置初始资金和持仓类型(Long、Short或两者)。在Inputs选项卡中设置EA的参数。Value列是单次测试使用的值,而Start、Step和Stop只在优化时起作用。

MT4的Expert properties窗口,包含Testing、Inputs和Optimization选项卡

关闭EA的资金管理,使用固定手数。如果手数随余额增长,后面的交易权重会超过前面的交易,两次测试就难以比较。EUR/USD交易0.10手时,1点价值1美元,计算很简单(参见外汇中的点(pip)是什么?)。

按Start。开启Visual mode后,测试会在图表上回放,这是观察EA实际如何交易的好方法。测试结束后会出现Results、Graph和Report选项卡。

选择哪种模型

模型工作方式适用于
Every tick使用所有可用的较低周期,并通过插值填补空白在K线内部交易的EA的最终测试
Control points使用最接近的较低周期粗略估算和优化
Open prices only只使用已完成的K线只在新K线开盘时行动的EA

“Every tick”这个名字具有误导性。使用标准历史数据时,这些tick是由分钟K线生成的,而不是真实记录的。当较低周期没有覆盖整个测试时段时,MetaQuotes不建议使用这种模型,因为结果不准确。

Spread字段

MT4历史数据只保存Bid价格,所以点差由测试器自行添加,而且整个测试只使用一个值。“Current”取你按下Start那一刻的点差。同样的测试在平静的周二和周五深夜分别运行,可能得到两个不同的结果。建议改为输入一个数字,单位是point:在5位报价中,19 point = 1.9点(pip)。请使用你的经纪商的典型数值。如果还不了解基础知识,请阅读外汇中的点差:含义及如何计算。

第3步:阅读报告

下面是一份较早的EUR/USD测试报告,以及根据MT4帮助文档对其主要行的解释:

MT4策略测试器的Report选项卡:modelling quality 90%,34笔交易,盈利因子1.51

项目本报告中含义
Modelling quality90.00%由较低周期建模tick的程度
SpreadCurrent (19)整个测试一个点差,1.9点
Total trades34样本大小
Profit factor1.51总盈利 ÷ 总亏损:746.77 ÷ 493.14。数值为1表示两者相等
Expected payoff7.46每笔交易的平均结果:253.63 ÷ 34
Absolute drawdown48.82低于初始资金的最大亏损
Maximal drawdown256.58 (2.51%)从净值高点到其后低点的最大跌幅

Modelling quality说明tick是如何构建的,而不是EA有多好。按照MetaQuotes公布的公式,由分钟数据建模的K线权重为0.9,因此M1历史的上限是90%。使用“Open prices only”时该字段显示n/a,这是正常的。用第三方工具加载tick数据的交易者报告的数值可达99%。这可能改善K线内部的价格路径,但对执行或过度拟合毫无帮助。MT4帮助文档没有定义Mismatched charts errors,但交易者通常把非零值视为历史数据不一致的信号,并重新下载数据。

不存在通用的“良好”盈利因子或回撤,我们也不会编造一个。盈利因子是在这个样本和测试器的成本下测得的,优化器可能碰巧把它推高。最大回撤是本次测试中发生过的最大跌幅,而不是可能发生的最大跌幅。关于回撤对账户的影响,请参阅外汇资金管理。

样本大小决定一个数字能说明多少。在这份报告中,34笔交易有27笔盈利,即79%。34笔交易时,胜率的95%置信区间约为63%至90%。如果是340笔交易且胜率同为79%,区间约为75%至83%(我们的计算,Wilson区间)。没有固定的交易笔数能让测试有效,但交易越少,数字可能的含义范围就越宽。

MT4测试器遗漏了什么

测试器会模拟隔夜利息、保证金要求和挂单,但并非真实账户遇到的一切:

  • 浮动点差。整个测试只有一个点差。在新闻发布和每日结算时段,真实点差会扩大。
  • 执行速度。MetaQuotes说明测试器的交易操作没有延迟,其Settings选项卡也没有延迟字段。
  • 滑点。交易处理时没有滑点,因此每次成交都比实盘账户所能指望的更干净。

影响有多大,取决于EA每笔交易赚多少。一个简单的示例(我们的算术,不是真实EA的数据):假设真实交易每笔多花0.5到2点的成本。

每笔额外成本平均5点的EA平均50点的EA
0.5点−10%−1%
1点−20%−2%
2点−40%−4%

所以剥头皮EA的回测能说明的远少于长线EA。一个简便的压力测试是调高Spread字段再运行一次:如果结果崩溃,说明这个EA几乎没有承受真实成本的余地。

MT5更接近真实。它的测试器可以使用“Every tick based on real ticks”,并有固定和随机执行延迟设置(参见MT4与MT5对比)。不过它仍然是测试,而不是实盘账户。

为什么最好的回测可能只是最幸运的

大多数EA都有参数:周期、水平、过滤条件。测试器的Optimization选项会按你设置的Start、Step和Stop值反复运行EA,并对结果排序。这是一个有用的工具,但自带陷阱。优化器返回它找到的最好结果,却分不清实力和运气。

这个陷阱叫作过度拟合(overfitting,也称曲线拟合):设置贴合的是过去的噪声,而不是会重复出现的规律。测试看起来出色,是因为这些设置正是为那段历史挑选出来的。

数学家Bailey、Borwein、López de Prado和Zhu在Pseudo-Mathematics and Financial Charlatanism(Notices of the AMS, 2014)中对此做了量化。他们选取没有真实优势的策略,提问:需要多少次独立试验,才能让其中最好的策略在测试中达到夏普比率(Sharpe ratio)1,而之后的预期夏普比率为0。夏普比率衡量收益相对于其波动的大小。MT4报告不显示它,但道理相通。

可用数据运气看起来像实力所需的试验次数
2年7
5年45

这并不多。七个开/关选项就有27 = 128种组合。三个参数各取十个值就有1,000次运行。如果这些运行彼此独立,按论文的公式,仅仅要把最好的幸运夏普比率保持在1,128次试验需要约6.8年数据,1,000次需要约10.6年(我们用方程3.2计算,7次试验为1.9年,45次为5.0年)。

请把这些数字当作警告,而不是界限。相邻设置并不独立,所以优化器的实际试验次数低于运行次数,论文也称独立性假设相当保守。另一方面,论文还指出,比这个最短长度更长的测试仍可能过度拟合。

作者的主要结论很简单:不报告试验次数的回测,无法评估其过度拟合风险。所以当有人给你看一份漂亮的报告时,请问问为此试过多少组设置。

防止过度拟合的三项检查

  1. 相邻设置同样有效。将每个参数上下稍作调整。如果结果在邻近范围内都能保持,EA依赖某个幸运数值的可能性就较小。如果只有一个精确数值有效,就要警惕。
  2. 在未见过的数据上依然成立。在未参与选择设置的时段上测试已固定的设置。这就是下面的样本外测试。
  3. 参数少,交易多。EA的参数越多,拟合噪声的方式就越多。测试的交易越多,就越难用运气解释结果。

在MT4中进行样本外测试

MT4没有专门的模式,但有Use date就够了:

  1. 把历史数据分成两部分。较早的部分是样本内,较新的部分是样本外。在查看任何结果之前决定如何划分。
  2. 将Use date设置为仅较早部分并运行优化,选出你的设置。
  3. 取消勾选Optimization,在Value列输入选定的值,在较新部分上运行一次测试。
  4. 比较两份报告:每笔交易的平均结果、回撤和交易笔数。第二段时期大幅下滑是过度拟合的典型迹象。

MT5测试器可以替你完成这种划分:它的Forward模式取时段的1/2、1/3、1/4或自定义部分,并始终用最新的部分做前向测试。

样本外时段只能用一次。如果你回头修改设置并再次在其上测试,它就不再是未见过的数据,而你又增加了一次试验。论文对留出法测试也有同样的说法:它们不考虑之前尝试过多少次。

如果EA是你买来的,优化是别人做的。你通常无法知道默认设置背后有多少次试验,所以请直接询问。然后在你的经纪商的数据上测试这些设置,并重点关注设置发布之后的时段。对卖家来说,这段时间不可能参与了拟合。

为什么实盘结果更有分量

回测是淘汰EA最快的方法,却是确认EA的薄弱方法。实盘账户一次补上两个最大的缺口:它在真实的点差、延迟和滑点下运行,而且设置冻结后的每一天天然都是样本外。

合理的顺序是回测、样本外测试、模拟账户,然后是小额实盘账户,或卖家经过验证的实盘记录。阅读实盘记录时,同样的逻辑也适用:

  • 是否经过第三方验证,是真实资金账户而不是模拟账户吗?
  • 运行了多久,有多少笔交易?几个好月份证明不了什么。
  • 设置是什么时候固定的?在那之前的结果也可能是拟合出来的。
  • 这是唯一的账户吗?展示十个账户中最好的一个,和展示十次回测中最好的一次是同一个陷阱。

正因如此,在ForexStore上每个机器人的页面都链接到它的实盘账户,我们的外汇机器人排名也基于实盘交易结果而不是回测。实盘记录是更有力的证据,但它不是承诺:过往业绩不保证未来结果。

常见问题

MT4回测需要多高的modelling quality?

没有通用的最低值。使用M1历史时最高为90%,“Open prices only”显示n/a,对于在已完成K线上交易的EA这是正常的。modelling quality描述的是tick如何构建,与过度拟合或执行无关,所以仅有高数值并不能让测试可靠。

回测中多少盈利因子算好?

没有通用的数字。盈利因子是总盈利除以总亏损,大于1表示测试在纸面上赚了钱。它的意义有多大,取决于交易笔数、测试使用的成本,以及为此试过多少组设置。

回测中的过度拟合是什么?

过度拟合是指设置贴合的是过去的噪声,而不是会重复出现的规律。Bailey等人(Notices of the AMS, 2014)表明,在2年数据下,大约7次独立试验就足以让最好的一次在测试中达到夏普比率1,而之后的预期结果为0。5年数据下约为45次。

为什么实盘结果与回测不同?

MT4测试器整个测试只用一个点差,也没有执行延迟和滑点,而实盘账户这三者都会遇到。如果设置是过度拟合的,它们过去贴合的规律在新数据中也可能不存在。

总结

  • 回测需要历史数据(F2)、测试器(Ctrl+R)、合适的模型和你自己设定的点差。
  • modelling quality描述的是tick,不是EA。不要把它或盈利因子当作及格线。
  • MT4测试器忽略浮动点差、执行速度和滑点,因此每笔盈利小的EA在实盘中受影响最大。
  • 众多设置中最好的可能只是最幸运的:2年数据下约7次独立试验,5年数据下约45次。
  • 检查相邻设置,在未见过的数据上测试,优先选择参数少、交易多的EA,并询问进行过多少次试验。
  • 然后是模拟账户,再然后是经过验证的实盘记录。

刚入门?请从我们的外汇交易入门分步指南开始。

来源:MetaTrader 4 Help, Strategy Testing和History Center;MetaTrader 5 Help, Testing;MetaQuotes文章What the Numbers in the Expert Testing Report Mean和Testing Features and Limits in MetaTrader 4;MQL4 Reference, Testing;Bailey, Borwein, López de Prado, Zhu,Pseudo-Mathematics and Financial Charlatanism,Notices of the AMS, 2014。

本文仅供学习参考,不构成投资建议。杠杆产品交易存在亏损风险。