4. Level2行情核心字段解析

Level2行情的价值不在于“数据更多”,而在于它把市场微观结构拆成了四个可观测的维度:价格深度、委托意愿、成交事实、委托行为。十档行情回答“此刻盘口长什么样”,委托队列回答“谁排在前面”,逐笔成交回答“刚刚发生了什么”,逐笔委托回答“订单是怎么进来的”。四者字段体系不同、更新频率不同、语义边界也不同,混用会导致策略信号严重失真。

一、核心原理:四类字段的语义边界

Level2不是Level1的简单加宽。Level1只有最优一档和累计成交量,而Level2把“静态快照”和“动态事件流”分开:十档行情与委托队列属于快照类,按固定频率推送当前状态;逐笔成交与逐笔委托属于事件类,每发生一笔就推送一条,带有唯一序号。理解这一点,才能理解为什么逐笔数据必须做去重和排序。

关键区分:快照字段是“状态”,事件字段是“增量”。状态可以覆盖,增量只能追加。把逐笔成交当快照累加,或把十档行情当事件流处理,都是常见错误。
Level2四类字段体系与数据流向 十档行情 买1-10 / 卖1-10 价格 + 数量 快照 · 3秒/笔 委托队列 前50笔委托明细 价位 + 序号 + 量 快照 · 3秒/笔 逐笔成交 成交价 + 成交量 买卖方向 + 序号 事件 · 毫秒级 逐笔委托 委托价 + 量 类型 + 序号 事件 · 毫秒级 快照类:状态覆盖,用于盘口重建与深度分析 事件类:增量追加,用于订单流分析与微观结构建模 融合层:按序号对齐 + 去重 + 时间戳归一化 → 统一事件时钟 四类字段必须统一到同一时间轴,才能做因果推断

二、方法流程:字段解析与对齐步骤

拿到Level2数据后,不能直接丢进策略。标准处理流程如下:

  1. 字段映射:把交易所原始字段映射到统一模型,例如上交所逐笔成交的“买方订单号”与深交所的“买方委托索引”语义不同,需归一化。
  2. 序号排序:逐笔成交和逐笔委托都带序号,必须按序号升序排列,防止网络乱序导致因果颠倒。
  3. 去重:断线重连后常出现重复推送,用“序号+交易所+证券代码”做唯一键去重。
  4. 时间戳对齐:快照用交易所时间戳,事件用本地接收时间戳,两者需做时钟校准,否则盘口与成交对不上。
  5. 状态重建:用逐笔委托和逐笔成交重建订单簿,再与十档行情快照做交叉验证,偏差超过阈值说明数据异常。
实战建议:先做“快照 vs 重建”一致性校验,再跑策略。如果重建盘口与十档行情长期偏离,优先排查序号缺失和去重逻辑,而不是调策略参数。

三、字段体系对照与案例场景

四类字段的核心字段清单如下表所示。注意“方向”字段在逐笔成交中表示主动方,在逐笔委托中表示买卖方向,语义不同。

数据类别 核心字段 更新方式 典型用途
十档行情 买价1-10、买量1-10、卖价1-10、卖量1-10 快照,约3秒 盘口深度、支撑压力、大单挂单识别
委托队列 委托价位、委托序号、委托数量、委托方向 快照,约3秒 排队位置、撤单概率、队列消耗速度
逐笔成交 成交价、成交量、成交方向、成交序号、成交时间 事件,毫秒级 主动买卖、大单追踪、成交分布
逐笔委托 委托价、委托量、委托方向、委托类型、委托序号 事件,毫秒级 订单流、撤单识别、流动性预测

案例场景:某股票卖一价位突然出现大量委托队列,同时逐笔委托显示连续多笔同价位买单进入,但逐笔成交没有对应放量。这说明是“挂单试探”而非真实成交,策略应警惕假突破。若只看十档行情,会误判为买盘强劲;只有结合委托队列和逐笔委托,才能识别出“挂而不成”的意图。

四、误区与复盘

误区一:把逐笔成交的“方向”当成买卖意愿。逐笔成交方向是主动方,代表的是“谁吃掉了谁”,不是“谁想买”。
误区二:用十档行情数量直接算买卖压力。十档数量包含大量可撤单,真实流动性要看委托队列的排队稳定性。
误区三:忽略序号连续性。序号跳变意味着丢包,重建的订单簿会失真,必须做补拉或标记断点。

复盘时建议按以下清单逐项检查:

  • 逐笔成交与逐笔委托的序号是否连续,断点是否记录。
  • 十档行情快照与重建盘口的偏差是否在可接受范围。
  • 委托队列中同价位委托是否出现异常集中或快速消失。
  • 逐笔成交方向与盘口变化是否一致,是否存在“成交了但盘口没动”的异常。
  • 时间戳是否统一到同一时钟源,跨市场数据是否做了时区处理。
# 逐笔数据去重与排序伪代码
seen = set()
events = []
for msg in stream:
    key = (msg.exchange, msg.symbol, msg.seq)
    if key in seen:
        continue
    seen.add(key)
    events.append(msg)
events.sort(key=lambda x: x.seq)

# 快照与重建盘口一致性校验
rebuilt = rebuild_orderbook(events)
for level in range(10):
    diff = abs(rebuilt.bid[level].qty - snapshot.bid[level].qty)
    if diff > threshold:
        log.warning("盘口偏差过大 level=%d diff=%d", level, diff)

四类字段不是孤立存在的。十档行情给出“结果”,委托队列给出“排队结构”,逐笔成交给出“事实”,逐笔委托给出“意图”。只有把四者按统一序号和时间轴对齐,才能从Level2数据中提取出真正可交易的微观结构信号。字段解析的精度,直接决定了后续订单流策略的上限。