2. 尾盘时段划分与数据采集规范
尾盘复盘的第一步不是打开行情软件随意翻看,而是先把“尾盘”这个模糊概念切成可度量、可对齐、可复现的时间窗口,再为每个窗口定义清楚要采集什么数据、以什么频率采集、字段如何命名。如果时间窗口不统一,不同交易日的复盘结论就无法横向比较;如果字段口径不统一,成交明细与委托队列之间就无法互相印证。本节围绕这两件事展开:先划分窗口,再落地采集规范。
一、把尾盘切成四个可对齐的窗口
实务中常说的“尾盘”通常指14:30至15:00这半小时,但真正决定尾盘成交结构的,是其中几个性质完全不同的子区间。建议按以下四个窗口划分,并以交易所时间戳为准,全部采用“左闭右开”区间,避免边界重复计数:
- W1 尾盘前段(14:30:00–14:45:00):资金开始试探性调仓,成交温和放大,委托队列的撤单率通常开始抬升,是观察“谁先动”的窗口。
- W2 尾盘加速段(14:45:00–14:57:00):主动买卖盘集中释放,大单成交占比明显上升,价格波动加剧,是尾盘成交集中度分析的核心区间。
- W3 集合竞价阶段(14:57:00–15:00:00):连续竞价停止,进入收盘集合竞价,只接受申报、不即时成交,最终在15:00:00一次性撮合,形成收盘价。
- W4 收盘定格(15:00:00):以收盘集合竞价撮合结果为准,记录收盘价、收盘成交量与未成交申报的最终状态。
需要特别强调W3与W1、W2的性质差异:前两个窗口是连续竞价,逐笔成交连续产生;W3是集合竞价,期间没有逐笔成交,只有申报进入和撤单,真正的成交在15:00:00一次性发生。很多复盘者把14:57之后的申报量误当作成交量,导致尾盘成交占比被高估,这是最常见的口径错误。因此采集时必须把“申报”与“成交”两类事件分开记录,并在时间轴上明确标注撮合时点。
二、确定采集字段:三类数据各管一段
尾盘复盘常用的原始数据有三类,它们回答的问题不同,不能互相替代。第一类是成交明细,字段至少包括:成交时间(精确到毫秒)、证券代码、成交价格、成交数量、成交金额、买卖方向标识(主动买/主动卖/中性)、成交编号。它回答“成交了什么、以什么方向成交”,是计算尾盘成交占比、大单占比、主动净买入的基础。
第二类是委托队列快照,字段包括:快照时间、买一至买十价与量、卖一至卖十价与量、总委买量、总委卖量。它回答“盘口厚度如何变化”,用于观察尾盘买卖盘力量对比和撤单造成的队列塌陷。快照频率建议固定为3秒一档,与多数行情源的最小推送粒度对齐,便于跨日比较。
第三类是逐笔委托,字段包括:申报时间、申报价格、申报数量、买卖方向、订单类型、撤单标识。它回答“申报如何进入和退出”,尤其在W3集合竞价阶段,逐笔成交缺失,逐笔委托是唯一能反映过程的数据。三类数据的采集频率与窗口对应关系已在图中标明,实操时应把频率写进采集脚本的配置项,而不是靠人工记忆。
三、字段口径与命名规范
采集规范的核心是“口径唯一”。建议统一以下约定:时间一律使用交易所时间戳,不做本地时区转换;价格保留两位小数,数量以股为单位、金额以元为单位,避免手与股混用;买卖方向以“主动方”定义,即成交中主动成交的一方,无法判定时标记为中性,不得强行归类。字段命名采用小写下划线风格,例如 trade_time、trade_price、trade_volume、bid1_price、ask1_volume、order_cancel_flag,保证不同交易日、不同标的的数据可以直接拼接。
一个容易被忽略的细节是去重与补漏。逐笔数据在收盘前后可能出现重复推送或短暂断流,采集端应以“成交编号+时间戳”作为唯一键去重,并记录每个窗口的实际记录条数与理论条数的偏差率。偏差率超过设定阈值(例如1%)时,该交易日的数据应标记为“不完整”,在后续复盘结论中降权使用,而不是直接混入统计。
四、可直接套用的采集配置示例
下面是一份采集配置的示例结构,参数为教学示例值,实际使用时按所用行情接口调整。它的作用是让“窗口—频率—字段”三者在配置层面绑定,避免采集时漏项:
windows:
W1: {start: "14:30:00", end: "14:45:00", mode: continuous}
W2: {start: "14:45:00", end: "14:57:00", mode: continuous}
W3: {start: "14:57:00", end: "15:00:00", mode: call_auction}
W4: {start: "15:00:00", end: "15:00:01", mode: snapshot}
collect:
trade_detail: {fields: [trade_time, code, trade_price, trade_volume,
trade_amount, side, trade_id], freq: tick}
order_book: {fields: [snap_time, bid1_price, bid1_volume,
ask1_price, ask1_volume, total_bid, total_ask],
freq: "3s"}
order_tick: {fields: [order_time, order_price, order_volume,
side, order_type, cancel_flag], freq: tick}
quality:
dedup_key: [trade_id, trade_time]
max_missing_rate: 0.01
采集完成后,先做一次窗口级校验:统计每个窗口的成交笔数、成交金额、快照条数、逐笔委托条数,与理论值比对。例如W2共12分钟、按3秒一档应有240条快照,若实际只有230条,说明存在断流,需要回补或标记。只有通过校验的数据,才进入后续的成交集中度与队列变化分析。