期货回测:成本、回放与滚动前推(walk-forward)

期货回测是在明确的执行模型下,把一条规则应用到历史数据上。对订单流策略而言,要区分基于K线的测试、成交回放和订单簿重建。三者回答的是不同的问题:当时能观察到什么、能执行什么。

Senzoukria · 学习 · 更新于 2026 年 9 月


先定义规则,再选择参数

记录品种、合约、交易时段的时区、K线构建方式和信号时点。足迹图交易规则需要按 bid/ask 记录的成交;热力图规则需要历史深度。两者都无法从普通K线中重建。

保存展期规则和数据覆盖报告。数据缺口不等于市场横盘。一个期货合约上的价位,不处理合约间价差就不能直接套用到另一个合约上。

K线测试、成交回放与订单簿回放

模型可以评估无法确定
OHLC K线收盘确认的规则K线内部顺序、排队成交
成交回放已记录的成交缺失的历史深度
订单簿回放覆盖范围内的深度事件你自己的假设成交是否一定发生

如果止损和目标都落在同一根K线内,OHLC 无法判断哪一个先被触及。要写明引擎的处理规则。某个限价被成交触及,并不能证明你自己的订单会成交。

成本可能反转结果

示例:毛期望 2.5 跳,减去入场滑点 0.5 跳、出场滑点 0.5 跳以及折合 0.8 跳的往返手续费,剩下净 0.7 跳。总滑点再多一跳,结果就变成 −0.3 跳。这些是假设输入,并非平台实测表现。

按品种实际的每跳价值换算手续费。区分按合约和按订单收取的费用,避免遗漏或重复计算点差。

无信息泄漏的 walk-forward 测试

  1. 事先固定训练长度、测试长度和参数选择方法。
  2. 只在训练数据上拟合,并冻结选定的参数。
  3. 评估随后的窗口,计入成本和亏损交易。
  4. 按时间顺序推进,保留每一个样本外结果。
  5. 保留一段完全未动用的最终区间,用于尚未针对这些结果调优的决策。

从大量配置中挑出最优者会引入选择偏差。The Probability of Backtest Overfitting 研究了这一问题。稳健性分析是在检验结果,而不是为未来收益背书。

实验记录

  • 规则版本、参数以及尝试过的配置数量。
  • 数据来源、合约、日期、时段和缺失区间。
  • 入场时点、模糊K线的处理规则、手续费和滑点。
  • 训练/测试划分、各窗口的净结果和回撤。
  • 淘汰标准以及对更高成本的敏感度。

Hurst 指数估计GEX 状态可以启发一个假设,但不能替代对决策当时已知信息的记录。

在 Senzoukria 中做研究

脚本编写指标和规则,再用历史回测测试受支持的 JavaScript 和 Python 策略。历史执行模型基于K线,并不重建排队优先级。C++ 使用独立的运行环境,没有历史回测功能。

回放和经纪商执行是两个不同的步骤。可选的实盘自动驾驶需要明确的手动启用和兼容的 Rithmic 账户。回测不会启用它,也不能证明获得了自营交易公司的许可。请把研究记录保存在交易日志中。

从量化交易入门开始

常见问题

订单流交易可以回测吗?
可以,前提是历史数据包含所需的输入。足迹图规则需要按 bid/ask 划分的成交量;深度规则需要订单簿历史。OHLC K线无法还原缺失的逐笔成交或深度。
什么是 walk-forward 测试?
在训练窗口上选定参数,在随后的测试窗口中冻结这些参数,然后按时间顺序向前推进。选择规则保持不变,并防止未来信息进入训练。
盈利的回测能证明存在优势吗?
不能。执行假设、成本、数据缺口、选择偏差和不断变化的市场环境都可能使结果失效。应报告样本外结果以及失败的配置。
哪些语言支持历史回测?
Senzoukria 桌面端支持 JavaScript 和 Python 策略的历史回测。C++ 脚本运行在独立的 WebAssembly 环境中,不提供历史回测。