3. 事件定位的数据基础
盘口价差骤增往往发生在几秒甚至几百毫秒之内,事后回看行情软件的分时图,只能看到价差“突然变宽”这一结果,却看不到是谁先撤了单、谁在扫单、哪一笔成交把买一卖一同时打穿。要把这类事件定位到具体账户、具体委托和具体成交,必须依赖三类底层数据:逐笔委托、逐笔成交和行情快照。它们各自回答不同的问题,只有清洗对齐之后,才能拼出一条完整的事件因果链。
三类数据各自回答什么问题
逐笔委托数据记录每一笔进入撮合系统的委托指令,典型字段包括委托编号、委托时间(精确到毫秒或微秒)、买卖方向、委托价格、委托数量、委托类型(限价/市价/本方最优等)以及撤单标识。它回答的是“谁在什么时刻挂出了什么单、又撤掉了什么单”。在价差骤增场景中,大额撤单往往是价差扩大的直接推手,逐笔委托是识别撤单行为的唯一数据源。
逐笔成交数据记录撮合引擎实际达成的每一笔交易,字段通常包含成交编号、成交时间、成交价格、成交数量、买卖双方委托编号以及成交方向标识(主动买/主动卖)。它回答的是“哪两笔委托在什么价位成交了多少”。当价差骤增伴随某一侧被快速吃掉时,逐笔成交能还原扫单节奏和成交价位序列。
快照数据是按固定频率(常见为每3秒一笔,部分场景为逐笔快照)对盘口状态做的切片,包含买一至买十、卖一至卖十的价格与数量、最新价、累计成交量、累计成交额等。它回答的是“某一时刻盘口的整体形态”。快照的优点是直观、易算价差,缺点是频率有限,容易漏掉两次快照之间的瞬时变化,因此它更适合作为事件的时间锚点和结果验证,而不是唯一依据。
清洗:先保证“每一行都可信”
原始数据在进入分析之前,通常存在几类必须处理的问题。第一是重复记录:部分行情源在断线重连后会重发一段数据,若直接累加成交量会导致统计失真,处理方式是按成交编号或“委托编号+成交时间+价格+数量”组合去重。第二是撤单与成交的混淆:逐笔委托中的撤单记录数量字段有时表示“撤单量”,有时表示“剩余量”,必须结合数据字典确认语义,否则会把撤单误算成新增挂单。第三是异常值与空值:价格为0、数量为负、买卖方向缺失的记录应剔除或标记,不能参与价差计算。
此外要特别注意集合竞价与连续竞价的边界。开盘集合竞价阶段的委托和成交规则与连续竞价不同,若把9:25之前的快照与之后的逐笔数据混在一起计算价差,很容易得到虚假的“骤增”。实操中通常按交易阶段打标签,只对连续竞价时段做事件定位。
对齐:让三类数据落在同一条时间轴上
三类数据的时间戳来源不同,直接比较会错位。逐笔数据通常带交易所撮合时间,快照带行情生成时间,两者之间可能存在几十到几百毫秒的传输延迟。对齐的核心原则是:以交易所时间为基准,把快照视为一个时间区间而非一个瞬时点。具体做法是,对每一笔逐笔委托和成交,找到其时间戳落入的快照区间(上一快照时间, 本快照时间],将该事件归并到本快照;这样每个快照的价差变化都能对应到区间内发生的委托与成交事件集合。
委托与成交之间的关联则依靠委托编号。逐笔成交中记录的买方委托编号和卖方委托编号,可以反查逐笔委托中的原始挂单信息,从而判断某笔成交是“新单主动成交”还是“老单被扫”。这一步是区分“主动扫单导致价差扩大”与“被动撤单导致价差扩大”的关键。
一个可复用的对齐示例
假设某标的在10:15:03附近价差从0.02元骤增至0.15元。取10:15:00与10:15:03两个快照,前者卖一价10.00元、买一价9.98元,后者卖一价10.13元、买一价9.98元。归并区间内的逐笔数据后发现:卖一档原挂单8000股在10:15:03.120被撤,同时有一笔2000股主动买单成交于10.00元。由此可判断,价差扩大的主因是卖一撤单而非买盘扫货,事件定位指向撤单委托编号及其所属账户。这个示例中的数值为教学假设,实际分析应以真实数据为准。
需要强调的是,清洗与对齐不是一次性的准备工作,而是每次事件定位都要复核的前置环节。数据口径不清、时间基准不统一,后续无论用多精细的模型,结论都不可靠。