3. Level2数据分类与格式
在Level2行情体系中,数据并不是单一的一张“行情表”,而是由多个粒度、多个通道、多个时间切片共同构成的数据族。理解这些数据的分类与格式,是后续做逐笔回放、订单簿重建和微观结构分析的前提。本节将Level2数据拆成五类核心对象:逐笔委托、逐笔成交、快照行情、订单簿深度,以及交易所接口与字段规范,并说明它们之间的对应关系与常见陷阱。
一、核心原理:五类数据的定位与关系
逐笔委托(Order/Tick Order)记录的是“订单进入撮合系统”的事件,包含委托序号、方向、价格、数量、订单类型等;逐笔成交(Trade/Tick Trade)记录的是“撮合成交”的事件,包含成交序号、买卖双方订单号、成交价、成交量、成交方向等。两者是事件流,具有严格的时间顺序和唯一序号,是重建订单簿的原始素材。
快照行情(Snapshot)是交易所按固定频率(如每3秒或每500毫秒)推送的切片,包含最优买卖价、各档价格与数量、成交量统计等。订单簿深度(Order Book Depth)则是快照中多档买卖盘的结构化表达,通常为5档、10档或更多。快照与深度是“状态”,逐笔是“变化”,二者互为校验。
交易所数据接口与字段说明,是上述数据落地为可编程对象的桥梁。不同交易所(如上交所、深交所、中金所、港交所)在字段命名、序号规则、时间戳精度、订单类型编码上存在差异,必须逐字段对照。
二、方法流程:从原始报文到可用对象
处理Level2数据的标准流程可分为四步:解析、对齐、重建、校验。解析阶段按交易所接口文档将二进制或JSON报文映射为字段;对齐阶段用交易所时间戳与本地接收时间做双时间轴;重建阶段用逐笔委托和逐笔成交驱动订单簿;校验阶段用快照深度比对重建结果。
- 解析:读取接口文档,确认字段偏移、字节序、编码方式(如深交所Binary、上交所FAST)。
- 对齐:统一时间戳精度(毫秒/微秒),处理序号跳变与重传。
- 重建:按订单号维护买卖队列,逐笔更新价格档位。
- 校验:每收到快照,比对最优价与各档量,偏差超阈值则触发复盘。
以下是一个字段映射的配置片段示例,用于将原始报文映射为内部结构:
{
"exchange": "SZSE",
"channel": "level2_order",
"fields": {
"seq_no": {"offset": 0, "type": "uint32"},
"order_no": {"offset": 4, "type": "uint64"},
"side": {"offset": 12, "type": "char", "map": {"1":"B","2":"S"}},
"price": {"offset": 13, "type": "int64", "scale": 10000},
"qty": {"offset": 21, "type": "int64"},
"order_type": {"offset": 29, "type": "char"},
"timestamp": {"offset": 30, "type": "uint64", "unit": "ns"}
}
}
三、案例/场景:逐笔与快照的交叉验证
假设某股票在10:00:00.000收到快照,买一价为10.50、量为5000。随后逐笔委托显示一笔卖单以10.50成交2000,逐笔成交确认该笔成交。此时重建订单簿的买一量应变为3000。若下一张快照仍显示买一量5000,则说明存在未处理的撤单或数据丢失。
常见场景还包括:集合竞价阶段的逐笔委托与连续竞价字段含义不同;科创板/创业板的价格笼子机制会产生特殊订单类型;港股市场的暗盘与碎股交易需要单独通道。这些场景都要求字段说明必须与交易所版本严格对应。
四、常见字段说明与对比清单
下表汇总了五类数据中最常见的字段及其含义,便于快速对照不同交易所接口:
| 数据类别 | 常见字段 | 含义说明 | 注意事项 |
|---|---|---|---|
| 逐笔委托 | OrderNo、Side、Price、Qty、OrderType、Timestamp | 订单进入撮合系统的事件 | OrderType区分市价/限价/本方最优 |
| 逐笔成交 | TradeNo、BidOrderNo、AskOrderNo、Price、Qty、Timestamp | 撮合成交事件 | 成交方向由主动方决定 |
| 快照行情 | BidPrice1、BidQty1、AskPrice1、AskQty1、Volume、Turnover | 固定频率切片状态 | 注意快照时间与本地时间差 |
| 订单簿深度 | BidPrice[1..N]、BidQty[1..N]、AskPrice[1..N]、AskQty[1..N] | 多档买卖盘结构 | 档位数量因交易所而异 |
| 交易所接口 | Channel、SeqNo、MsgType、Body、Checksum | 报文封装与传输规范 | 序号连续性用于丢包检测 |
另一个常见误区是忽略时间戳单位。部分交易所使用纳秒,部分使用毫秒,若未统一,重建出的订单簿时序会出现错乱。建议在解析层强制转换为统一微秒时间轴,并保留原始时间戳字段备查。
最后,交易所接口版本更新频繁,字段偏移和编码可能随版本变化。工程上应把字段映射配置化,并建立版本对照表,避免硬编码导致的解析失败。只有把数据分类、字段语义和接口规范三者对齐,后续的逐笔回放与订单簿重建才能稳定可靠。