逐笔回放(K 线测试、逐笔回放与盘口回放的区别)

逐笔回放(tick replay)是一种回测或回放模式:它按时间顺序把每一笔历史成交连同价格、手数和主动方向喂给策略,而不是喂预先合成好的 K 线。它介于只能看到 OHLC 和成交量的 K 线测试,与还会重建每一刻订单簿的盘口回放之间。

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


历史数据的三个精细度层级

选哪一层由规则决定,而不是由偏好决定。读取逐价位失衡的策略必须要有逐笔数据,因为每个价位上的买卖量正是从它重建出来的。读取 DOM 的策略需要盘口历史,而大多数数据源根本不做归档。只看收盘价的规则用 K 线就够了,放到逐笔上跑只会让测试变慢。

每种回测模式能观察到什么
模式输入数据能评估评估不了
K 线测试OHLC、成交量,有时含每根 K 线的 delta基于收盘价、K 线成交量、K 线 delta 的规则逐价位的 bid × ask、K 线内部的先后顺序、精确偏移
逐笔回放每一笔成交及其价格、手数、主动方向足迹图规则、失衡、K 线内部的 MAE/MFE、成交明细挂单流动性、排队位置、冰山单识别
盘口回放成交数据加上订单簿快照或 MBO 事件深度规则、流动性撤单、考虑排队的成交数据里没有盲区,但数据本身很少是完整的

逐笔回放改变了结果里的什么

  • 成交发生在一个真实存在过的成交价上,而不是一个也许从未被报出过的 K 线收盘价。
  • 交易内部的偏移是已知的,因此 MAE 和 MFE 是精确值,而不是被 K 线最高最低价框住的估计。
  • 信号在条件于 K 线内部首次成立时触发,而不是等到 K 线收盘。
  • 逐笔归档里的缺口会作为缺口显现出来;K 线数据源则会悄悄把它抹平。

在 Senzoukria 里

桌面端回测面板提供一个「精细度」设置,以及两条从已连接经纪商取数的历史通道:「下载缺失的历史」抓取服务器端 K 线,「下载足迹历史」则按窗口逐段抽取逐笔数据。面板里对逐笔通道的描述是:每一笔成交连同它的主动方向,重建成每个价位上的 bid × ask,这正是读取逐价位失衡的策略所需要的输入。当服务器返回的 K 线带有 OHLC、成交量和 delta 却没有足迹层级时,面板会说明这类策略仍然需要那次逐笔抽取。如果经纪商没有返回任何逐笔数据,提示会指出该账户可能没有开通历史逐笔回放,这是权限问题,而不是软件设置问题。

「回放」界面会按用户设定的速度,在同一张图、同一套指标上逐笔播放一段录制的 CME 时段。历史策略回测支持 TypeScript 和 Python 策略;C++ 脚本运行在另一套 WebAssembly 运行时里,不提供历史回测。

常见错误

  • 把足迹图规则放在 K 线上跑,然后把结果当成对这条规则的检验。
  • 以为「按下一笔成交价成交」包含了排队优先权;它并不包含。
  • 把一个空的逐笔窗口当成市场清淡,而不是归档缺失。
  • 对一个只归档成交数据的数据源,期待它能做盘口回放。

其他语言版本

常见问题

逐笔回放和笔数图是一回事吗?
不是。笔数图是一种 K 线类型,每根 K 线在固定笔数的成交之后收线。逐笔回放则是一种把历史成交一笔一笔喂给图表或策略的模式。一次逐笔回放可以合成任意 K 线类型,包括时间、成交量、区间或笔数 K 线。
经纪商为什么会拒绝提供历史逐笔数据?
历史逐笔数据和历史 K 线在账户上是两项独立权限,由经纪商或数据商开通并计费。Senzoukria 的面板会原样转述经纪商的答复:请求被拒绝,还是返回为空。这样用户才能分清是权限问题,还是归档没有回溯到那么早。
盘口回放给出的成交价真实吗?
它比逐笔成交给出的边界更接近真实,因为委托可以沿着历史深度逐层吃单;但它仍然假设策略自己的委托不会改变盘口,而且归档是完整的。手数越大,这两个假设就越站不住。

继续阅读