3. 深度变化图谱的数据基础
深度变化图谱并不是一张“画出来的图”,而是由四类底层数据逐层加工得到的产物:逐笔交易数据回答“谁在什么价位成交了多少”,价格序列回答“每个时点的参考价是多少”,档位归属回答“每一笔成交落在哪个价格档”,深度指标回答“各档位的挂单量、成交量与撤单量如何随时间变化”。这四层数据任何一层出现偏差,图谱上的迁移轨迹就会失真。本节围绕这四层数据的采集口径、对齐方式与清洗规则展开,重点说明“怎么采、怎么算、怎么判异常”。
一、四层数据的采集口径与依赖关系
采集前必须先固定口径,否则后续清洗无从判断对错。交易数据通常来自逐笔成交(Trade)与逐笔委托(Order)两个流:成交流给出成交价、成交量、成交方向(主动买/主动卖,或由买卖盘口推断),委托流给出委托价、委托量、委托类型与撤单事件。价格序列一般取分钟或秒级中间价 mid = (bid1 + ask1) / 2,也可用成交加权均价 VWAP 作为参考价,但两者不可混用——中间价反映盘口中枢,VWAP 反映实际成交重心,图谱中若用 VWAP 做档位划分基准,就必须全程一致。档位归属是把连续价格离散化的过程,常见做法是以最小变动价位 tick 为步长,或以参考价的百分比带宽(如 ±0.1%、±0.2%)划分档位。深度指标则是在每个档位上聚合挂单量、成交量、撤单量与净流入量。
四层数据的依赖关系是单向的:交易数据与价格序列是原始输入,档位归属是映射规则,深度指标是聚合结果。因此采集顺序应为“先落原始流、再定参考价、后做档位映射、最后算指标”,任何一步都不能用下游结果反推上游。
二、交易数据清洗:先保真,再补全
逐笔数据最常见的四类问题是重复推送、时间戳乱序、价格越界和零量成交。处理原则是“先保真、再补全”:重复记录按 trade_id 去重,保留首次到达的记录;时间戳乱序按交易所时间戳重排,而不是按本地接收时间;价格越界(超出当日涨跌停或明显偏离盘口)的记录直接剔除并记入异常日志,不做修正;零量或负量成交视为无效记录丢弃。对于撤单事件,必须与原始委托按 order_id 关联,否则撤单量会被重复计入。
一个容易被忽略的细节是成交方向。若数据源不直接提供主动买卖标识,需要用成交价与当时盘口比较推断:成交价 ≥ ask1 记为主动买,成交价 ≤ bid1 记为主动卖,介于两者之间则按上一笔方向或按 tick 规则处理。推断规则一旦确定,全流程不得更改,否则净流入指标会出现系统性偏差。
三、价格序列与档位归属:映射规则要守恒
价格序列的作用是提供档位划分的基准。若采用百分比带宽,需在每个时间窗内以该窗的参考价为锚点重新计算档位边界,这意味着同一绝对价格在不同时间窗可能属于不同档位,这是正常现象,但必须在元数据中记录锚点,否则跨窗比较会错位。若采用固定 tick 步长,则档位边界稳定,但需处理“价格落在两档边界上”的归属问题——通常约定“左闭右开”,即价格等于边界值时归入较高档位。
档位映射必须满足总量守恒:映射前所有成交的成交量之和,应等于映射后各档成交量之和。若出现跨档成交(一笔大单吃掉多个档位),应按各档实际成交量拆分,而不是整笔归入成交价所在档。校验方法很简单:对每个时间窗,比较 Σ vol_traded(档位) 与原始成交总量,偏差超过 0.1% 即需回查映射逻辑。
四、深度指标计算与异常判读
深度指标在“档位 × 时间窗”的二维网格上聚合。以 1 分钟窗为例,某档位的净流入可写为:
net_flow[d, t] = Σ buy_vol(d, t) − Σ sell_vol(d, t)
depth_change[d, t] = depth_end(d, t) − depth_start(d, t)
migration[d, t] = depth_change[d, t] − net_flow[d, t]
其中 migration 表示该档位深度的变化中,扣除实际成交后的“迁移”部分,主要来自挂单新增与撤单。若 migration 为正且远大于成交量,说明有大量挂单在该档位堆积;若为负且绝对值较大,则可能是撤单潮。判读时需结合 vol_cancel 交叉验证:撤单量突增而成交量平稳,通常意味着流动性撤离而非真实成交驱动。
异常判读有三条实用规则:其一,单档深度变化率 Δdepth/Δt 超过该档过去 20 个窗口标准差的 3 倍,标记为尖峰;其二,某档位成交量超过其挂单量的 80%,说明该档被快速消耗,需检查是否触发跨档拆分;其三,各档净流入之和与全市场主动买卖差不等,说明方向推断或档位映射存在遗漏。这三条规则可直接写成清洗后的校验脚本,作为图谱生成前的最后一道闸门。
五、一份可直接套用的采集字段清单
下表给出四层数据各自的最小字段集,字段名可按实际数据源调整,但语义不可缺失。缺失任一关键字段,图谱的某一维度就无法闭合。
| 数据层 | 关键字段 | 用途 | 缺失后果 |
|---|---|---|---|
| 逐笔成交 | trade_id、时间戳、成交价、成交量、方向 | 计算成交量与净流入 | 无法去重、方向偏差 |
| 逐笔委托 | order_id、时间戳、委托价、委托量、撤单标识 | 计算挂单量与撤单量 | 迁移量无法解释 |
| 价格序列 | 时间戳、bid1、ask1、参考价类型 | 档位锚点与重采样 | 档位边界漂移 |
| 档位归属 | 档位编号、边界规则、锚点时间 | 价格到档位的映射 | 跨窗比较错位 |
| 深度指标 | 档位、时间窗、depth、vol_traded、vol_cancel、net_flow | 图谱直接输入 | 图谱无法生成 |
把这五组字段按“原始流 → 参考价 → 映射 → 聚合”的顺序串起来,并在每一层设置守恒校验与异常标记,深度变化图谱的数据基础才算真正可靠。图谱上看到的每一次档位迁移,背后都应当能追溯到一笔具体的成交或撤单,而不是清洗过程中被悄悄修正过的数字。