2. 十档盘口数据解析
十档盘口是行情系统对某一时刻订单簿的“切片快照”。它并不记录每一笔挂单的完整队列,而是把买方向价格最高的十档、卖方向价格最低的十档聚合后推送出来。理解这份数据,关键要抓住三件事:字段含义、快照频率、时间戳对齐规则。只有把这三件事理清,才能进一步用逐笔委托与逐笔成交去还原两次快照之间盘口发生了什么。
一、十档盘口的字段结构
以常见的 Level-2 行情快照为例,一条盘口记录通常包含:证券代码、交易所、快照时间戳、最新价、成交量、成交额,以及买一至买十、卖一至卖十共二十组“价格—数量”对。买方向按价格从高到低排列(买一最高),卖方向按价格从低到高排列(卖一最低),这是全文统一采用的参照约定,后续图示与计算均以此为准。
需要特别注意两个易混字段:数量通常表示该价位上“未成交的挂单总量”,单位可能是股或手,需按数据源说明换算;档位序号只代表当前排序位置,并不代表固定价格。当买一被完全吃掉后,原买二会“上移”成为新的买一,档位序号变化而价格可能整体抬升。因此不能把“买一”当作某个固定价格的别名。
| 字段 | 含义 | 常见陷阱 |
|---|---|---|
| 时间戳 | 快照生成或撮合时刻 | 交易所时间与本地接收时间不同 |
| 买一价/量 | 最高买价及其挂单量 | 量为零时该档可能实际不存在 |
| 卖一价/量 | 最低卖价及其挂单量 | 与买一价可能相等(集合竞价) |
| 档位序号 | 排序位置,非固定价格 | 档位会随成交整体移动 |
二、快照频率与“切片丢失”问题
不同市场的快照频率差异很大。以沪深市场为例,逐笔委托与逐笔成交是逐笔推送的,而十档盘口快照通常按固定间隔(如每 3 秒)或按“有变化才推送”的方式生成。这意味着两次快照之间可能发生了数十笔甚至上百笔委托与成交,盘口已经多次变化,但我们只看到首尾两个状态。
这就是“切片丢失”:快照是离散采样,不是连续录像。若某价位在两次快照之间被挂上又被撤掉,最终快照里根本看不到它。因此,仅凭快照无法还原中间过程,必须借助逐笔数据补齐。理解这一点,是后续“从逐笔还原盘口”方法的出发点。
三、时间戳对齐规则
还原盘口时,最容易被忽视的是时间戳口径。常见有三类:交易所撮合时间、行情网关生成时间、本地接收时间。三者依次递增,且存在网络与处理延迟。若用本地接收时间去匹配逐笔成交,会把“成交发生”误判为“成交到达”,导致盘口还原出现系统性偏移。
正确做法是:统一使用交易所侧时间戳作为对齐基准。逐笔委托、逐笔成交、快照三类数据都带有交易所时间,按该时间排序后,再以快照时间为分界点,把两次快照之间的逐笔事件归入同一区间。若某类数据缺少交易所时间,则需用序号或通道内顺序号辅助对齐,而不能简单用本地时间替代。
对齐示例(时间单位:毫秒,均为交易所时间)
快照S1 09:30:00.000 买一 10.00 × 5000
逐笔成交 09:30:00.800 卖方向主动成交 10.00 × 1200
逐笔委托 09:30:01.500 新增买单 10.00 × 3000
逐笔撤单 09:30:02.200 撤销买单 10.00 × 800
快照S2 09:30:03.000 买一 10.00 × 6000
校验:5000 - 1200 + 3000 - 800 = 6000 ✓
上例中,S1 到 S2 之间买一价未变,但数量从 5000 变为 6000。若只看两张快照,会以为“凭空多了 1000”;把逐笔事件按时间插入后,数量变化被完整解释。这就是对齐规则的实际价值。
四、从逐笔还原盘口状态的基本方法
还原的本质是“以快照为锚点,用逐笔事件做增量修正”。具体可分三步:
- 建立初始盘口:取某一时刻的快照作为起点,把买十档、卖十档的价格与数量装入有序结构(买方向降序、卖方向升序)。
- 按时间顺序处理逐笔事件:新增委托在对应价位加量;撤单在对应价位减量;成交则同时扣减买方与卖方对应价位的挂单量,并更新最新价与成交量。
- 与下一张快照比对:处理完区间内全部逐笔后,将还原结果与下一张快照逐档比对。若价格与数量完全一致,说明区间内事件无遗漏;若不一致,则定位差异档位,检查是否有漏单、重复推送或时间戳错位。
需要强调的是,逐笔委托中的“新增”并不等于“立即生效”,部分市场存在委托与成交的先后顺序问题;撤单也可能针对已被部分成交的委托。因此减量时要按“剩余可撤量”处理,而不是直接减去原始委托量。这些细节决定了还原能否与快照严格闭合。
五、实操中的校验与常见偏差
还原结果与快照比对时,建议逐档输出“价格、快照量、还原量、差值”四列,差值非零的档位即为排查入口。常见偏差有三类:一是漏单,多因逐笔数据通道丢包或过滤条件过严;二是重复推送,同一笔事件被处理两次,表现为数量翻倍;三是时间戳错位,把下一区间的成交算进了当前区间,表现为相邻两张快照的差值一正一负、相互抵消。
此外,集合竞价阶段买卖价可能相等、部分档位数量为零,还原逻辑要允许“空档”存在,不能假设十档必然填满。涨跌停时一侧档位可能全部为空,也需单独处理。把这些边界情况纳入校验,盘口还原才具备工程可用性。
掌握字段、频率与时间戳对齐这三项基础后,十档盘口就不再是一张静态表格,而是一条可被逐笔事件解释、可被快照校验的动态状态链。后续的历史状态可视化,正是建立在这条状态链的准确还原之上。