回测

回测(backtest)是把一条完整写明的交易规则,在明确的成交模型下跑在历史数据上,并报告扣除成本之后会发生什么。它的结果以数据覆盖范围、成交假设和试过多少条规则为条件;它描述的是在那些假设之下的过去,并不能证明未来的优势。

Senzoukria · 术语表 · 更新于 2026 年 9 月


回测开跑之前需要什么

  • 一条完整写下来的规则:品种、交易时段与时区、K 线构建方式、信号时点、入场、出场、手数,以及数据排除条件。
  • 真正包含该规则所需输入的数据。足迹规则需要每个价位上成交的买量和卖量;盘口规则需要挂单簿历史;这两样都无法从 OHLC K 线里还原出来。
  • 一个成交模型,说明决策在什么时候做出、入场按哪个价格成交,以及当止损和止盈可能在同一根 K 线内都被触及时怎么处理。
  • 成本:每张合约和每笔委托的手续费、入场与出场的滑点,并按该品种的每跳价值换算成金额。

三类历史测试

一个限价被某笔已记录的成交触及,并不能证明你的委托一定会成交;排队位置不在数据里。数据覆盖上的空洞也不等于市场没有波动。这些限制属于结果本身,而不是脚注。

每种模型回答的是不同的问题
模型能评估不能确立
OHLC K 线测试基于收盘 K 线的规则K 线内的先后顺序、排队成交
逐笔成交回放基于已记录成交的规则缺失的历史盘口深度
挂单簿回放覆盖范围内的盘口事件你自己那笔反事实委托能否确定成交

结果到底说明了什么

一条向上的资金曲线只回答了一个很窄的问题:在产生它的那些假设之下,过去发生了什么。它完全没有说明这条规则是不是在测试之前就定义好了、那些成交是不是真能拿到,以及一路上被丢掉了多少个变体。在尝试很多次之后得到的结果越亮眼,需要的证据就越多。请把样本外结果、失败的配置,以及对更高成本的敏感性,和曲线一起报告出来。

在 Senzoukria 里

「回放」界面有一个自动回测模式。它的面板会把脚本编辑器里的策略,在本机缓存的 K 线上逐根跑一遍。开跑之前,面板会按交易时段报告这些缓存 K 线的覆盖范围,并说明缺了什么,这样结果就带着它实际覆盖的窗口标签。

「交易成本」区块接受以跳数表示的手续费和滑点;它的提示写着:把两者都设为零,是回测撒谎的第一种方式。决策在收盘 K 线上做出,入场按下一根开盘价成交,出场使用 K 线价格;引擎不会去重建交易所的排队队列。一个回测助手可以对跑完之后的统计结果给出评论。这个界面不会发出任何委托;实盘执行只存在于由人手动武装的自动驾驶之中。

常见错误

  • 把在合成 K 线上做的语法检查当成回测。
  • 以零成本跑出结果,再拿它去和一个计入了成本的结果比较。
  • 把一个价位从一个期货到期月直接带到下一个月,却不处理换月时的价格差。
  • 只留下赢的那个变体,忘了一共试过多少个。

其他语言版本

常见问题

订单流策略能回测吗?
能,前提是历史数据里含有该规则读取的输入。足迹规则需要每个价位上成交的买量和卖量,逐笔历史能提供,K 线不能。读取挂单流动性的规则需要记录下来的盘口深度,这类数据更少见、体积也更大。缺了这些输入,规则就无法被评估,只能被近似。
一个盈利的回测能证明存在优势吗?
不能。结果取决于成交假设、成本、数据缺口、试过多少种配置,以及那段时期的市场环境。一个在更高成本下依然成立、在从未见过的数据上依然站得住、并且在测试之前就定义好的回测,是更强的证据——但它仍然只是关于过去的证据。
回测应该记录哪些东西?
规则的版本和参数、试过的配置数量、数据来源、合约、日期区间、交易时段和缺失区间、入场时点和歧义 K 线的处理方式、手续费和滑点、训练集与测试集的切分、按窗口统计的净结果和回撤,以及一条事先定好的否决标准。正是这份记录,让结果可复现、可比较。

继续阅读