2. 盘口数据基础
要估算不同盘口深度下的可成交量,第一步不是写算法,而是弄清楚“我们手里到底有哪些数据”。行情数据按披露粒度大致分为三档:Level-1(快照)、Level-2(增强快照,含十档委托与逐笔数据)、以及逐笔委托/逐笔成交这类订单流数据。它们决定了你能看到多深的盘口、能否还原撮合过程,也直接决定了可成交量估算的精度上限。
一、Level-1:最优一档的快照行情
Level-1 是最基础的行情,通常每 3 秒推送一次快照,只披露最优一档买卖价量。以 A 股常见字段为例:
| 字段 | 含义 | 对估算的意义 |
|---|---|---|
| 最新价 / 收盘价 | 最近一笔成交价 | 判断当前价位与盘口的关系 |
| 买一价 / 买一量 | 最优买价及其挂单量 | 卖出时最直接的对手盘 |
| 卖一价 / 卖一量 | 最优卖价及其挂单量 | 买入时最直接的对手盘 |
| 成交量 / 成交额 | 当日累计值 | 估算流动性活跃度 |
| 时间戳 | 快照生成时刻 | 对齐多源数据、判断延迟 |
Level-1 的局限非常明显:只有一档,看不到挂单的厚度分布。若买一量只有 500 手,而你要卖 5000 手,Level-1 无法告诉你价格会滑到哪里。因此它只适合做“最小可成交量”的粗略估计,即假设只吃一档时的成交量。
二、Level-2:十档盘口与逐笔数据
Level-2 在快照基础上扩展到买卖各十档,并额外提供逐笔成交与逐笔委托。十档快照的字段结构是成对的:买一价、买一量……买十价、买十量,卖侧同理。它让我们能画出盘口的“深度剖面”,从而按价格档位逐层累加可成交量。
需要特别注意的是,十档快照仍是“切片”,两次快照之间(通常 3 秒)盘口可能已被撮合多次。若只用十档快照做累加,会低估或高估真实可成交量,因为挂单在快照间隙被撤、被吃的情况看不到。这正是逐笔数据存在的价值。
三、逐笔成交与逐笔委托
逐笔成交记录每一笔撮合成交,核心字段包括:成交时间(精确到毫秒或更细)、成交价、成交数量、成交方向(主动买/主动卖,部分市场由买卖盘订单号推断)、买方订单号与卖方订单号。逐笔委托则记录每一笔新订单的进入与撤单,字段包括委托时间、委托价格、委托数量、买卖方向、订单号、订单类型(限价/市价/撤单)。
两者结合,可以还原订单簿的演化过程:新委托进入 → 挂入对应价位 → 成交则扣减对应档位 → 撤单则移除。这样得到的“重建盘口”比快照更连续,也能精确回答“在某一价位上,到底有多少真实可成交的挂单”。
四、从字段到可成交量:一个示例
假设某股票十档卖盘如下(示例数据,仅用于说明方法):卖一 10.00 元 800 手,卖二 10.01 元 1500 手,卖三 10.02 元 3000 手。若你要买入 4000 手,按档位累加:800 + 1500 = 2300 手仍不足,再吃卖三 1700 手,成交均价约为 (800×10.00 + 1500×10.01 + 1700×10.02) / 4000 ≈ 10.0115 元。这就是最朴素的“按档累加”估算。
但若逐笔数据显示,卖一在最近 3 秒内有 600 手被撤单,那么快照里的 800 手其实包含已失效挂单,真实可成交量会低于累加值。反之,若快照间隙有新挂单涌入,累加又会低估。因此工程上通常用逐笔委托重建订单簿,再用重建结果校验快照,二者交叉验证。
五、字段对齐与常见坑
实际使用中,最容易出问题的是时间戳对齐。快照时间、逐笔成交时间、逐笔委托时间往往来自不同通道,精度和时区也可能不同。若直接用快照时间匹配逐笔记录,会出现“成交早于挂单”的错位。建议统一换算到同一时间基准(如交易所撮合时间),并保留原始时间戳以便回溯。
另一个坑是订单号。逐笔成交中的买方订单号、卖方订单号,需要与逐笔委托中的订单号对应,才能追踪一笔委托的完整生命周期。若交易所对订单号做了脱敏或分段编码,需先确认映射规则。此外,撤单在逐笔委托中通常以“撤单记录”形式出现,数量为负或方向字段特殊,解析时要单独处理,不能当作新挂单累加。
总结来说,Level-1 给的是“点”,Level-2 十档给的是“面”,逐笔数据给的是“过程”。可成交量估算的精度,取决于你用的是哪一层数据,以及是否用逐笔数据对快照做了校验。理解每个字段的含义与边界,是后续所有估算方法的地基。