分类
绩效
难度
入门
适用场景
回测EA 评估

回测

回测是把 EA 的交易规则套用在历史价格数据上进行模拟,用来估算该策略在过去会有怎样的表现。

亦称:历史回测, 策略测试, backtest

更新于

一句话讲清

把 EA 的规则放到历史价格上跑一遍,看它当时会怎么做。它记录的是一次模拟,不是一份预测;两者究竟有多少共同点,完全取决于你怎么搭建这次模拟。

为什么重要

回测是绝大多数 EA 唯一拿得出来的证据,所以弄清楚它能证明什么、不能证明什么,几乎就是 EA 评估的全部。它能用很低的成本淘汰一个策略,也能说明规则确实与描述相符;它做不到的是预测,而几乎每一笔令人失望的购买,都始于把它当成预测来读。

  • 它是可被证伪的,而营销文案永远不是。回测会写明数据来源、日期区间和成本模型,买家因此可以追问这次运行能否复现——而一个不肯写明这些的 EA,其实已经告诉了你一些事情。
  • 它是失败成本最低的地方。在历史上亏钱的规则不会到实盘就开始赚钱,所以回测用一晚上的算力就筛掉了候选者。
  • 它的结果是一个区间,而不是一个数字。同一套规则换数据源、换点差、换起始日期,会得到一片分散的结果,而这片分散的宽度才是真正的发现。

用它验证策略

用在哪里

  • 在投入资金或前推测试时间之前,先筛掉一个策略构想。
  • 确定使用者应当预期的交易频率、平均持仓时间以及最糟糕的连亏段。
  • 生成 EA 页面上公布的数字——盈利因子、回撤、胜率——这正是运行来源本身就属于该主张一部分的原因。
  • 把已有的 EA 放到更新的数据窗口上重跑,检查它的行为是否已经漂移。

可靠的结果长什么样

  • 数据来源、日期区间与测试模型都已写明,因此这次运行可以被复现,而不是只能被相信。
  • 该运行把点差与佣金建模在贴近现实的水平,而不是停留在一个理想的固定值上。
  • 窗口跨越多种市场状态:至少包含一段趋势行情、一段震荡行情和一段承压行情。
  • 没有人在所报告的这个窗口上调过参;即便调过,页面也会在旁边给出一段未被触碰的样本外窗口。
  • 成交笔数在数百量级,因此那些醒目的统计数字不是由少数几笔极端交易撑起来的。

警示信号

  • 一张没有数据来源、没有日期区间、也没有成交笔数的资金曲线截图。
  • 起点选得过于凑巧的窗口:测试从上一轮危机之后才开始的 EA,等于自己给自己出了考卷。
  • 以不合情理的精度给出的参数,例如 37 周期均线搭配 23.7 点的止损。
  • 来自模板而非来自真实运行的建模质量数字。MT5 的 Model 0 是用 M1 K 线生成 tick,只有 Model 4 才回放录制的真实 tick。这些页面背后的 schema 曾把该字段的默认值设为 99,于是一次 Model 0 的运行照样显示 '99% modelling quality, against a 92% minimum',直到该默认值在 2026-08-06 被移除。
  • 只在作者做过优化的那一个品种上展示的结果。

回测与实盘的差异

  • 成交过于乐观。测试器假定订单以模拟价格送到了市场;实盘执行还要加上滑点、重新报价和延迟,这三样都要花钱。
  • 成本是静态的。使用固定点差的回测看不到新闻前后和交易时段交接时的点差扩大,而那恰恰是许多策略下单的时刻。
  • 市场已经发生过了。测试窗口里不含任何策略没见过的市场状态,而实盘迟早会送来一种。
  • 应当预期实盘的盈利因子与期望值低于测试数字。适度的差距是正常的;符号发生改变则意味着这次测试的成本设定有误,或者规则被过度拟合了。
  • 这个差距在这里被实测过。本站的十四个上架产品中,回测盈利因子集中在 1.23 到 1.53 之间,而上架之后的样本外窗口却从 0.72 一路散到 6.43,成交仅七到 142 笔:其中两个低于 1.0,而且包括这一组里回测成绩第二好的那一个。样本小到这种程度,两个方向上看起来就是这样。

推荐的验证方法

  1. 1先把成本模型定下来——贴近现实的点差与佣金——然后再跑,而不是在理想成交上调参、最后再把成本加回去。
  2. 2在优化任何东西之前先留出一段未被触碰的窗口,并且在规则定稿之前不去看它。
  3. 3换第二个数据源重跑。两个数据源之间的分歧只要超过一点点,就是在告诉你结果取决于数据而不是规则。
  4. 4把起始日期挪动几周再跑一次。只在某一个起始日期下才成立的结果,不算结果。

示例

同一个 EA、同一段窗口、四次测试运行,彼此之间只差写进设置文件里的那个固定点差值。

固定点差分别设为 20、30、40 和 60 点
四份完全相同的报告
四份报告文件的 MD5
471C1CE24EC24E669C20BD2B01EBB8A3
每份都是 621,050 字节——这个设置什么也没动。

于 2026-07-31 在 GBPJPYm 上实测,这也是那个产品页面完全不公布点差数字的原因;之后在测试器内运行的记录器把均值测到了 19.14 点。

计算 20 / 30 / 40 / 60 点 → 一份逐字节相同的报告

结果 MT5 的测试器根本没有 Spread 这个键,它是 MT4 遗留下来的,所以真正生效的成本模型从来就不是被设置的那一个

怎么读这个数字

把回测当成一份附带条件的主张来读。这些条件决定了它在接触真实账户之后还能剩下多少。

区间 含义
没有写明数据来源或日期区间 算不上证据。既没有东西可供复现,也没有东西可供反驳。
写明来源,单一品种,优化过的窗口 只是一个起点。它说明规则能在某处赚钱,而这是回测所能说明的最弱的一件事。
写明来源,成本贴近现实,跨越多种市场状态 值得一读。此时这些数字讲的是策略本身,而不再是测试怎么搭的。
在上述基础上再加一段未被触碰的样本外窗口 这是回测单独所能给出的最强证据:其中一部分数据,调参的人当时根本拿不到。
  • 去问优化了什么。每一个在所报告窗口上调过的参数,都从数据里借走了一点结果。
  • 先看成交笔数再看盈利。五十笔交易再漂亮,也分不清策略与运气。
  • 无法复现的回测就是一张截图。把标注来源的那一行当成数字的一部分,而不是脚注。

mt5depot 的 EA 页面会为每一次公开的运行写明数据来源、日期区间与测试模型,而这 30 个产品里只有 6 个带着建模质量数值——那是用真实 tick 跑出来的 18 次运行中的 6 次。有一道构建检查会去读真正发布出去的页面,好让其余 24 个无法宣称这样一个数字。

常见误区

把回测当成预测来读

它报告的是规则在已经存在的数据上会怎么做。未来包含着窗口里没有的状况,这正是前推结果更差的原因,而需要提前规划的恰恰是这个差距。

在同一段窗口上既优化又汇报

每一个调过的参数都会吸收这段窗口的一部分噪声,所以在用来调参的数据上做测试,测的其实是调参本身。结果注定好看,也注定无法重现。

比较两份在不同条件下跑出来的回测

不同的点差、不同的数据源、不同的日期区间和不同的测试模型,都会在与策略无关的情况下推动这些数字。只有当两者背后的设置一致时,两个数字才具有可比性。

想当然地认为窗口越长越好

对日内策略来说,在插值生成的 K 线数据上跑十年,信息量可能还不如在真实 tick 上跑两年,因为那次更长的运行里从来就没有出现过规则实际交易的那条 K 线内部路径。

深入说明

常见问题

回测好看就足以买下一个 EA 吗?
不足以。回测可以淘汰一个策略,也可以说明规则的行为与描述相符,但它无法证明这份优势能在测试窗口不曾包含的状况下继续存在。请在旁边寻找样本外窗口或前推记录,并且在看盈利之前先读成本模型。
EA 的回测应该跑多长时间?
长到足以包含多种市场状态,成交笔数也要多到统计能够稳定下来:对多数策略而言,实务上是数年以及数百笔交易。单看长度并不是标准:在质量差的数据上跑很长,信息量可能还不如在真实 tick 上跑得短一些。
为什么回测结果在不同经纪商之间会不一样?
因为价格历史、点差记录和交易条件都不相同。把同一套规则放到两个数据源上跑,得到明显不同的结果,这本身就是有用的信息:它意味着结果既取决于策略,也同样取决于数据。