4. 穿透多档盘口的定义与度量
在撮合系统中,一笔大额卖单进入订单簿后,往往不会只与最优买一价成交,而是沿着买盘方向逐档“吃掉”多个价位的挂单,直到剩余数量被消化或价格触及限价边界。这种一笔(或一组同源)卖单连续消耗多个买盘价位的现象,就是穿透多档盘口。理解它,关键不在于“吃了几档”这个直觉描述,而在于把穿透行为转化为可计算、可比较、可回放的量化指标。
先明确参照约定:本文所有“档”均以成交前订单簿的买盘快照为基准,买一为第 1 档,价格依次递减;穿透档数指向下穿越的买盘价位个数,方向为“价格下行”。若切换为卖盘视角或成交后快照,必须重新声明,全文保持一致。
三个核心度量指标
穿透档数(Depth Penetrated)是最直观的指标:成交价覆盖了多少个不同的买盘价位。设成交前买盘第 i 档价格为 Pi、挂单量为 Qi,成交明细中最低成交价为 Pmin,则穿透档数 N 为满足 Pi ≥ Pmin 的最大 i。它回答“打到了多深”,但不反映每档吃了多少。
成交量分布(Volume Distribution)刻画卖单在各档的消耗结构。对每档记录成交量 vi,形成向量 (v1, v2, …, vN),并可归一化为占比 wi = vi / Vtotal。同样是穿透 5 档,若 v1 占 80%,说明主要冲击在买一,属于“浅穿透厚成交”;若各档均匀分布,则说明买盘薄、冲击沿价格快速扩散,市场冲击成本更高。
加权平均成交价(VWAP)把价格与量结合起来:VWAP = Σ(Pi · vi) / Σvi。它与成交前买一价的差额即平均穿透滑点,是衡量这笔卖单真实执行成本的核心。单看穿透档数会低估“买一很厚”的情形,而 VWAP 能把它折算成价格语言。
指标之间的关系与判读
三个指标并非并列,而是层层递进:穿透档数给出“空间范围”,成交量分布给出“内部结构”,VWAP 给出“价格结果”。实际分析中,建议按“先看 N,再看分布,最后看 VWAP 与滑点”的顺序判读。例如上图中,穿透 5 档但买一占比 37.5%、买五仅 6.25%,说明冲击集中在盘口上半部,属于“前重后轻”型穿透;若 VWAP 与买一价差距很小,则尽管档数多,实际执行成本仍可控。
需要警惕两个常见误读。其一,穿透档数不等于冲击成本:买一挂单极厚时,一笔巨单可能只穿透 1 档却产生巨大成交量,滑点反而小;反之薄盘口穿透 10 档,VWAP 可能远离买一价。其二,成交量分布要看归一化占比而非绝对量,否则不同规模卖单之间无法横向比较。
度量时的实现要点
要在回放或仿真中稳定计算这些指标,需注意数据对齐。成交明细通常只给成交价与成交量,不含“第几档”标签,因此必须用成交前的订单簿快照做映射:对每笔成交价 P,找到快照中满足 Pi ≥ P > Pi+1 的档位 i,将成交量累加到 vi。若同一价位在成交过程中被部分成交后又补单,应以快照为准,避免把补单量误计入本次穿透。
# 伪代码:基于成交前快照计算三项指标(示例)
snapshot = [(10.00, 3000), (9.99, 2000), (9.98, 1500),
(9.97, 1000), (9.96, 1200)] # (价格, 挂单量),买一在前
trades = [(10.00, 3000), (9.99, 2000), (9.98, 1500),
(9.97, 1000), (9.96, 500)] # (成交价, 成交量)
vol = [0] * len(snapshot)
for price, qty in trades:
for i, (p, _) in enumerate(snapshot):
lower = snapshot[i+1][0] if i+1 < len(snapshot) else -1
if p >= price > lower:
vol[i] += qty
break
total = sum(vol)
vwap = sum(snapshot[i][0] * vol[i] for i in range(len(vol))) / total
depth = max(i for i in range(len(vol)) if vol[i] > 0) + 1
slippage = snapshot[0][0] - vwap
这段逻辑的关键在于“价格区间归属”而非“精确价格相等”,因为实际成交价可能落在两档之间(尤其在连续竞价与集合竞价混合场景)。此外,若卖单未全部成交(例如限价 9.97 只打到买四),则穿透档数应只计实际有成交的档位,剩余未成交部分单独记录为“残余量”,不能算入 VWAP 分母。
一个可复用的度量记录表
为了让多次模拟结果可对比,建议每次穿透实验固定记录以下字段。下表为上文示例的填写结果,可直接作为模板使用:
| 字段 | 含义 | 示例值 |
|---|---|---|
| 卖单规模 / 限价 | 本次委托数量与价格边界 | 8,000 股 / 9.94 |
| 快照口径 | 成交前买盘五档 | 成交前 |
| 穿透档数 N | 有成交的买盘档位数 | 5 |
| 成交量分布 | 各档成交量及归一化占比 | 3000/2000/1500/1000/500;37.5%/25%/18.75%/12.5%/6.25% |
| VWAP | 加权平均成交价 | 9.9869 |
| 平均滑点 | 买一价 − VWAP | 0.0131 |
| 残余量 | 未成交部分 | 0(全部成交) |
有了这套口径,穿透行为就从“感觉打得很深”变成了可复现的数字:N 描述范围,分布描述结构,VWAP 与滑点描述代价。后续调整卖单规模、盘口厚度或撮合规则时,只需重跑同一套计算,即可定量观察指标如何随参数变化,这也是穿透多档盘口模拟的核心价值所在。