3. 盘口时间线数据采集方法
做开盘急涨的盘口复盘,第一步不是看图说话,而是把“当时到底发生了什么”还原成一条可对齐、可检索的时间线。这条时间线通常由三类数据拼成:逐笔成交(每一笔撮合的成交价、成交量、成交方向)、委托队列(买一至买五、卖一至卖五的挂单量与价位,以及逐笔委托的增减)、分时快照(按固定间隔抓取的最新价、均价、成交量、涨跌幅、买卖盘口)。三者粒度不同、时间戳口径不同,采集与清洗的核心任务就是让它们在同一个时间轴上“对得上”。
三类数据的采集口径
逐笔成交数据来自交易所的成交回报,字段一般包括成交时间(精确到毫秒或秒)、证券代码、成交价、成交量和成交方向(主动买/主动卖,部分数据源以买卖盘序号推断)。采集时要注意两点:一是时间戳是交易所撮合时间还是行情落地时间,二者可能相差几十到数百毫秒;二是集合竞价阶段的成交往往在开盘瞬间集中回报,时间戳可能被压缩在同一秒内,需要保留原始序号来维持先后顺序。
委托队列数据反映的是盘口挂单的实时变化。Level-1 行情只给买一卖一,Level-2 才提供十档甚至逐笔委托。对开盘急涨复盘而言,最关键的是开盘前后卖盘的消耗速度和买盘的堆积节奏,因此至少要采集买五卖五的价位与数量,采样间隔建议不高于 3 秒;若数据源支持逐笔委托,则应完整保留委托编号、方向、价格、数量和委托类型(限价/市价/本方最优等)。
分时快照是成本最低、最容易获得的一类数据,通常按 3 秒一笔推送。它适合做整体节奏的骨架,但不适合判断单笔大单的方向,因为快照只给盘口状态,不给逐笔明细。实操中常见的做法是:以分时快照为时间骨架,把逐笔成交和委托队列挂接到骨架的各个时间点上。
清洗:先把“脏数据”处理干净
原始数据到手后,常见问题有四类。第一是重复推送:行情落地时同一笔成交可能被重复写入,必须按成交编号或“时间+价格+量+方向”组合去重,否则成交量会被放大。第二是缺失:网络抖动会导致某些快照丢失,此时应标记空档而不是用前后值插值,因为盘口是状态量,插值会伪造出并不存在的挂单。第三是异常值:价格为 0、成交量明显超过流通盘、买卖档位价格倒挂等,需要按规则剔除并记录。第四是单位不统一:有的数据源价格用“分”,有的用“元”;成交量有的用“股”,有的用“手”,清洗时必须统一,否则后续统计会差出两个数量级。
一个可直接套用的清洗规则示例如下(以 Python 伪代码表达,字段名为示例):
# 1. 去重:同一成交编号只保留首条
tick = tick.drop_duplicates(subset=["trade_id"], keep="first")
# 2. 单位统一:价格转为元,成交量转为手
tick["price"] = tick["price"] / 100 # 若原始单位为分
tick["volume"] = tick["volume"] / 100 # 若原始单位为股
# 3. 异常剔除:价格为0或量超过阈值
tick = tick[(tick["price"] > 0) & (tick["volume"] <= 100000)]
# 4. 快照缺失标记:相邻快照间隔超过 6 秒记为空档
snap["gap"] = snap["ts"].diff().dt.total_seconds() > 6
清洗完成后应输出一份“数据质量摘要”:总记录数、去重条数、剔除条数、空档数量、时间跨度。这份摘要不是形式主义,它决定了后面复盘结论的可信度——如果开盘后 3 秒内的快照缺失严重,那么“急涨第一波由谁推动”的判断就要打折扣。
时间对齐:让三条线落在同一根轴上
对齐的关键是选定基准时间轴。推荐以交易所撮合时间为准,把分时快照的时间点作为骨架节点,逐笔成交按“成交时间不晚于该快照时间”的规则归入最近的前一个快照区间。举例来说,若快照时间为 09:30:00、09:30:03、09:30:06,某笔成交时间为 09:30:04.250,则它归入 09:30:03 至 09:30:06 这个区间,区间内所有成交的成交量之和应等于该区间快照累计成交量的增量,这个等式就是对齐是否成功的校验条件。
委托队列的对齐稍复杂:它本身是状态量,每个快照点对应一个盘口状态。对齐时只需保证每个快照点上的买五卖五数据完整,并把相邻快照之间的委托变化视为“区间内的净变化”。若使用逐笔委托数据,则可以进一步还原出每一笔挂单和撤单,从而算出“卖一被吃掉多少、新挂多少”,这对判断急涨是“真实买盘推动”还是“卖盘撤单造成的虚涨”非常关键。
采集与对齐的落地检查清单
把上述流程固化成一张可执行的检查表,每次复盘前过一遍,能显著减少返工:
| 环节 | 检查项 | 合格标准(示例) |
|---|---|---|
| 采集 | 逐笔成交是否含成交编号与方向 | 字段齐全,方向非空 |
| 采集 | 委托队列是否覆盖买五卖五 | 十档齐全,采样间隔 ≤ 3 秒 |
| 采集 | 快照时间跨度是否覆盖 09:24:57–09:30:30 | 无超过 6 秒的空档 |
| 清洗 | 去重、单位统一、异常剔除是否执行 | 质量摘要中各项计数可追溯 |
| 对齐 | 区间成交量校验偏差 | ≤ 1% |
| 对齐 | 盘口状态与成交方向是否自洽 | 主动买占比与价格上行方向一致 |
需要强调的是,采集与对齐的目标不是追求“数据完美”,而是让复盘时每一个结论都能追溯到具体的时间点和具体的记录。当你能指着 09:30:03 至 09:30:06 这个区间说“这里卖一被连续吃掉 800 手、买一同步上移两档”,盘口时间线才真正成为分析工具,而不是一堆看起来很像数据的表格。