2. 高频行情基础
在进入高频行情回放验证之前,必须先厘清一个根本问题:我们回放的“行情”到底是什么。不同数据源在时间粒度、字段结构、更新机制上差异巨大,若把快照行情当成逐笔行情使用,或把逐笔委托与逐笔成交混为一谈,回放结果与实盘结果就会出现系统性偏差。本节围绕四类核心行情对象展开,帮助大家建立统一的数据认知框架。
一、四类核心行情对象及其本质
逐笔成交记录的是每一笔已经撮合成交的明细,通常包含成交时间、成交价、成交量、买卖方向(主动方)以及成交编号。它是市场真实交易结果的“流水账”,频率最高,是微观结构分析、成交量分布、大单识别的基础。
逐笔委托记录的是每一笔进入撮合系统的委托单,包含委托时间、委托价、委托量、买卖方向、委托类型与委托编号。它反映的是交易意图而非交易结果,是还原订单簿动态变化的关键输入。在部分市场中,逐笔委托还区分限价、市价、本方最优等类型。
快照行情是在固定时间间隔(如每3秒、每500毫秒或每100毫秒)对订单簿进行的一次“切片”采样,通常包含买卖各若干档的价量、最新价、成交量、成交额等。它是对订单簿的降采样,信息有损,但结构规整、易于存储和回放。
订单簿是撮合系统的核心数据结构,维护着所有未成交委托的买卖队列。逐笔委托和逐笔成交是订单簿的“输入事件”,订单簿是这些事件累积后的“状态”,而快照行情则是该状态在某一时刻的“投影”。
二、数据频率与常见术语
不同行情类型的更新频率差异显著。逐笔数据是事件驱动,频率取决于市场活跃度,热门标的每秒可达数千甚至上万条;快照行情是时间驱动,A股常见3秒快照,期货与部分海外市场可达500毫秒、100毫秒甚至更细。理解频率差异,是回放时选择时间对齐策略的前提。
| 行情类型 | 驱动方式 | 典型频率 | 核心字段 | 主要用途 |
|---|---|---|---|---|
| 逐笔成交 | 事件驱动 | 毫秒级,随成交发生 | 成交价、量、方向、编号 | 成交量分析、大单识别 |
| 逐笔委托 | 事件驱动 | 毫秒级,随委托发生 | 委托价、量、方向、类型 | 订单簿重建、意图分析 |
| 快照行情 | 时间驱动 | 3秒 / 500ms / 100ms | 买卖N档、最新价、总量 | 策略回测、盘口特征 |
| 订单簿 | 状态维护 | 随事件实时变化 | 买卖队列全量 | 微观结构、撮合模拟 |
常见术语包括:盘口(买卖各档报价)、价差(买一与卖一之差)、深度(档位数量)、主动买/主动卖(成交方向)、委托编号与成交编号(唯一标识)、时间戳(精确到毫秒或微秒)、快照序列号(用于检测丢包与乱序)。这些术语在回放验证中会反复出现,必须准确对应。
三、典型应用场景与回放验证要点
在回放验证实战中,不同行情类型对应不同的验证目标。若策略依赖盘口形态,应以快照行情为主进行回放,并重点检查快照时间戳是否连续、序列号是否跳变;若策略依赖订单簿重建,则必须使用逐笔委托与逐笔成交,按事件时间顺序重放,并验证重建后的订单簿与官方快照是否一致。
一个常见的验证流程如下:
- 加载逐笔委托与逐笔成交数据,按时间戳排序,处理同一时间戳内的先后关系。
- 逐条应用事件:委托进入订单簿,成交则从订单簿中扣减对应队列。
- 在每个快照时间点,从当前订单簿中提取买卖各档价量。
- 与真实快照行情逐字段对比,统计匹配率与偏差分布。
- 对偏差较大的时间点,回溯原始事件,定位是数据问题还是逻辑问题。
# 伪代码:逐笔事件驱动订单簿重建
for event in sorted(events, key=lambda e: (e.timestamp, e.seq)):
if event.type == "ORDER":
orderbook.add_order(event)
elif event.type == "TRADE":
orderbook.apply_trade(event)
if event.timestamp >= next_snapshot_time:
snapshot = orderbook.sample(depth=10)
compare(snapshot, real_snapshot)
next_snapshot_time += interval
四、常见误区与复盘
误区二:忽略时间戳精度与时钟源差异。不同交易所、不同数据源的时间戳可能来自不同时钟,直接混用会造成事件顺序错乱。
误区三:认为逐笔委托一定完整。部分市场只提供逐笔成交,不提供逐笔委托,此时订单簿重建需要依赖成交推断,精度有限。
误区四:快照序列号跳变未处理。序列号跳变往往意味着丢包,若不处理,回放结果会出现“凭空消失”的档位。
复盘时建议建立一张“数据质量检查清单”:时间戳是否单调、序列号是否连续、买卖方向字段是否合法、价格是否在涨跌停范围内、成交量是否非负、快照档位是否满足深度要求。只有数据质量过关,后续的回放对比才有意义。