3. 逐笔数据解析
构建订单流不平衡指标,第一步不是算,而是把原始逐笔数据“读对”。交易所推送的逐笔数据通常分成两条独立但需要对齐的流:成交记录(Trade / Tick)描述“已经发生了什么”,订单簿快照(Order Book Snapshot / Depth)描述“此刻挂单排成什么样”。两者字段语义、时间戳口径、更新频率都不同,混用会直接导致后续的买卖压力特征失真。
一、成交记录的关键字段
以常见的逐笔成交结构为例,一条记录至少包含以下信息:
- 成交编号 / 序列号:用于去重与排序,是判断数据是否丢包的基准。
- 时间戳:交易所撮合时间,精度通常到毫秒或微秒。
- 标的代码:多标的混合流中必须用于分流。
- 成交价、成交量:价格压力计算的基础。
- 买卖方向标识:主动买(外盘)或主动卖(内盘),这是订单流不平衡的核心输入。
- 成交类型:集合竞价、连续竞价、大宗、盘后等,需按需过滤。
方向标识是最容易出错的地方。部分数据源只给“成交价与当时买一/卖一的关系”,需要自行推断:成交价等于卖一价视为主动买,等于买一价视为主动卖,介于两者之间则需结合上一笔价格或逐笔委托判断。推断规则必须在整条流水线上保持一致,否则同一笔成交在不同模块里会被算成相反方向。
二、订单簿快照的字段与结构
快照一般给出某一时刻的买一至买N、卖一至卖N的价格与挂单量,以及快照时间戳。字段包括档位价格、档位数量、总委买/委卖量。需要注意三点:
- 档位深度:不同数据源提供 5 档、10 档或全档,档位数不同会改变“盘口不平衡”的定义口径。
- 快照频率:常见为每 3 秒或每 500 毫秒一张,远低于逐笔成交频率,因此快照是“稀疏采样”,不能当作连续状态。
- 量纲:挂单量可能是股数、手数或金额,必须与成交量统一单位后再比较。
三、时间戳口径与对齐
成交记录与快照的时间戳往往来自不同时钟:成交是撮合事件时间,快照是行情切片时间,二者可能存在几十毫秒到数秒的偏移。若直接把“某笔成交”匹配到“最近一张快照”,在快照频率低时会产生明显错配。实践中应明确两条原则:
- 成交用于刻画“流量”:按时间窗口聚合主动买量、主动卖量,计算净流入。
- 快照用于刻画“存量”:取窗口起点或终点的盘口状态,计算挂单不平衡。
两者在窗口层面合并,而不是逐笔强行配对。若必须逐笔对齐,应使用“快照时间戳 ≤ 成交时间戳”的最近一张快照,并记录对齐延迟,延迟超过阈值(例如超过一个快照周期)的样本标记为不可靠。
四、清洗的四个必做动作
去重:行情网关重连或补发时,同一成交编号可能被推送多次。以成交编号为键做幂等去重,是保证净流入不被重复累加的前提。
排序与断档检查:按时间戳升序排列后,检查序列号是否连续。若出现跳号,说明中间有丢包,此时该窗口的成交量会被低估,应在特征中打上“数据不完整”标记,而不是直接使用。
过滤非连续成交:集合竞价阶段的成交没有连续买卖盘口,大宗交易价格偏离盘口,盘后固定价格交易也不反映日内压力。这些记录若混入,会污染主动买卖方向统计,应按成交类型字段剔除。
统一量纲与精度:成交量若为“手”,需乘以每手股数;快照挂单量若为金额,需除以价格还原为股数。价格保留位数应与最小变动价位一致,避免浮点误差导致“等于买一价”的判断失效。
五、一个可执行的字段检查清单
在正式计算前,建议对每个交易日的文件跑一遍字段级校验,把问题挡在特征计算之前。下表是一份可直接套用的检查项示例(阈值为合理假设,需按实际数据源调整):
| 检查项 | 检查方法 | 异常处理 |
|---|---|---|
| 成交编号唯一性 | 按编号分组计数,统计重复条数 | 保留首条,其余丢弃 |
| 序列号连续性 | 相邻序列号差值是否为 1 | 断档窗口标记“不完整” |
| 方向标识缺失率 | 方向字段为空的比例 | 超过 1% 则该日数据降级使用 |
| 快照时间间隔 | 相邻快照时间差分布 | 间隔超过 2 倍标准周期视为缺失 |
| 量纲一致性 | 成交量与挂单量单位比对 | 统一换算为股 |
完成上述步骤后,成交流与快照流才具备进入特征构建的条件:成交侧可以稳定输出窗口内的主动买量、主动卖量与净流入,快照侧可以稳定输出窗口端点的买卖挂单不平衡。后续所有订单流不平衡指标,都应建立在这份“已对齐、已清洗”的数据底座之上,而不是直接在原始推送流上做即时计算。