1. 课程导入
在进入逐笔成交、快照解析与订单簿重建的实战之前,我们需要先建立一张清晰的“行情地图”。很多初学者一上来就急着写解析代码,结果在字段含义、数据时序和重建逻辑之间反复踩坑。本章的目标不是写代码,而是让你明白:Level2行情到底由哪些数据构成、逐笔与快照各自解决什么问题、订单簿重建为什么值得学,以及这30章我们将沿着怎样的路径推进。
一、Level2行情体系概览
Level1行情通常只提供最优一档买卖价与成交量,信息粒度粗、更新频率低。Level2则在此基础上向下穿透,提供多档委托挂单、逐笔成交、逐笔委托等更细粒度的数据。不同市场的数据组织方式不同,但核心构件大致可以归为三类:
- 快照(Snapshot):按固定时间间隔(如每3秒或每500毫秒)推送一次市场切片,包含买卖各若干档的价格与数量、最新价、成交量等。
- 逐笔成交(Trade/Tick):每一笔真实成交的记录,通常包含成交时间、价格、数量、买卖方向等。
- 逐笔委托(Order):每一笔新进委托、撤单或改单的记录,是重建完整订单簿的关键输入。
这三类数据并非互相替代,而是互补。快照是“截面”,逐笔是“事件流”。理解它们的差异,是后续所有实战工作的前提。
二、逐笔与快照的区别
逐笔数据描述的是“发生了什么”,快照描述的是“某一刻看起来是什么样”。前者是事件驱动,后者是状态采样。二者在时序、完整性和使用方式上有本质差异:
| 对比维度 | 逐笔数据 | 快照数据 |
|---|---|---|
| 数据形态 | 事件流,每笔一条记录 | 状态切片,按周期推送 |
| 时间精度 | 毫秒或微秒级 | 秒级或百毫秒级 |
| 信息完整性 | 可还原中间过程 | 只保留采样时刻状态 |
| 典型用途 | 订单簿重建、微观结构分析 | 行情展示、策略快速判断 |
| 数据量 | 大,需高效处理 | 相对小,易存储 |
一个常见误区是:认为快照已经足够重建订单簿。实际上,快照只给出采样时刻的档位,无法还原两次快照之间的委托增减与成交消耗。若只依赖快照,订单簿在两次推送之间会出现“跳跃”,无法用于精细的队列位置分析或延迟敏感型策略。
三、订单簿重建的价值
订单簿重建,就是利用逐笔委托与逐笔成交,按时间顺序逐条应用事件,维护一个与交易所撮合引擎尽可能一致的买卖委托队列。它的价值体现在三个层面:
- 还原真实市场状态:得到任意时刻的完整多档订单簿,而不仅是采样点。
- 支撑微观结构研究:分析队列长度、撤单率、订单流不平衡、大单挂撤行为等。
- 服务策略与风控:为做市、套利、冲击成本估计和异常交易识别提供基础数据。
下面是一个简化的重建事件处理伪代码,帮助建立直观印象:
for event in sorted(events, key=lambda e: e.seq):
if event.type == "ORDER_ADD":
book[event.side].insert(event.price, event.qty, event.order_id)
elif event.type == "ORDER_CANCEL":
book[event.side].remove(event.order_id)
elif event.type == "TRADE":
book[event.side].reduce(event.order_id, event.qty)
if event.seq % snapshot_interval == 0:
verify(book, snapshot)
注意最后一行:重建不是“写完就完”,而是要用快照做校验。这是实战中保证正确性的关键手段。
四、学习路径与实战目标
本课程共30章,整体遵循“先看懂数据,再处理数据,最后验证与优化”的路径。你可以把它理解为一条从认知到落地的流水线:
- 第1~6章:认知与准备——行情体系、数据格式、字段含义、环境搭建。
- 第7~15章:逐笔解析与处理——成交、委托、撤单的解析与清洗。
- 第16~24章:订单簿重建——数据结构、事件应用、快照校验、性能优化。
- 第25~30章:实战与复盘——完整案例、异常排查、指标评估与扩展。
为了让你对整体数据流有一个直观印象,下面这张图展示了从交易所行情源到订单簿重建的完整链路,以及逐笔与快照在其中的位置:
这张图里有两个关键点值得反复体会:第一,逐笔委托和逐笔成交共同进入重建引擎,缺一不可;第二,快照不是重建的输入,而是校验的基准。很多实现把快照直接当作订单簿来源,结果在两次快照之间丢失了大量委托变化,导致队列位置和撤单行为完全失真。
五、本章小结与实战准备
本章我们完成了四件事:梳理了Level2行情体系的三大构件,对比了逐笔与快照的本质差异,说明了订单簿重建的价值与基本流程,并给出了30章的学习路径。接下来你要做的,不是立刻写复杂代码,而是先确认三件事:
- 你手头的数据包含哪些字段,是否同时具备逐笔成交、逐笔委托和快照;
- 你的数据时间戳精度和序列号是否足以支撑严格排序;
- 你准备用哪种数据结构来维护买卖队列,以及如何做快照校验。
把这三个问题想清楚,后面的逐笔解析和订单簿重建就会顺很多。实战不是比谁写得快,而是比谁少走弯路、少留隐患。