1. 逐笔行情数据解析与分钟聚合目标
逐笔行情是交易所向市场推送的最细粒度成交与委托数据,它记录了每一笔成交的价格、数量、方向以及每一笔委托的申报、撤单行为。分钟聚合则是把这些离散的、时间间隔不规则的逐笔事件,按一分钟的时间窗口归并成一条结构化的 K 线或统计记录。理解这两端——原始逐笔字段与目标聚合指标——是后续所有计算工作的前提。本节先厘清逐笔成交与逐笔委托各自的数据结构,再明确分钟聚合要产出哪些指标、每个指标由哪些字段推导而来。
逐笔成交与逐笔委托的数据结构
逐笔成交(Trade)描述的是“已经发生的撮合”。一条典型的逐笔成交记录包含以下核心字段:证券代码、成交时间(精确到毫秒或微秒)、成交编号、成交价格、成交数量、成交方向(主动买或主动卖,部分市场用 BS 标志或买卖盘序号推断)、买方委托序号与卖方委托序号。其中成交方向是聚合中非常关键的字段,它决定了主动买入量与主动卖出量的划分,进而影响资金流向类指标。
逐笔委托(Order)描述的是“进入撮合队列的申报”,字段包括:证券代码、委托时间、委托编号、委托价格、委托数量、委托方向(买/卖)、委托类型(限价、市价、本方最优等)。在深市等市场中,逐笔委托还包含撤单记录,撤单通常以独立的委托类型或数量为负的形式出现。逐笔委托本身不产生成交,但它刻画了盘口的供给与需求变化,是计算委托总量、撤单率、大单申报等指标的基础。
两类数据在时间轴上交错到达,且同一时刻可能有多条记录。实际处理时通常先按时间排序,再按证券代码分组,保证同一只证券的事件流严格有序。需要注意,成交记录中的买方委托序号和卖方委托序号可以与委托记录关联,从而还原“哪一笔委托促成了这笔成交”,这是后续做委托生命周期分析的关键连接点。
分钟聚合的计算目标
分钟聚合的目标不是简单地把逐笔记录“压缩”,而是要在每个一分钟窗口内,用逐笔字段推导出一组可比较、可回测、可入库的指标。这些指标大致分为四类。
价格类指标:窗口内第一笔成交价为开盘价,最后一笔为收盘价,最高成交价与最低成交价分别取窗口内极值。均价可用成交额除以成交量得到,也可用成交量加权平均价(VWAP)表示。这里要特别注意窗口边界约定:采用左闭右开区间 [t, t+60s),即 09:30:00 的记录归入 09:30 这一分钟,09:31:00 的记录归入下一分钟,避免同一笔记录被重复计入相邻窗口。
数量类指标:成交量是窗口内所有成交数量之和,成交额是成交价格乘成交数量后求和,成交笔数是成交记录条数,平均单笔量等于成交量除以成交笔数。这些指标直接由逐笔成交字段累加得到,计算逻辑清晰,但要注意单位统一(股与手、元与万元)。
方向类指标:主动买量是成交方向为“买”的成交数量之和,主动卖量为“卖”的成交数量之和,净主动买入量等于主动买量减主动卖量。若原始数据没有显式方向字段,则需要用成交价与当时买卖盘价比较来推断,这属于数据清洗环节,必须在聚合前完成并记录推断规则。
委托类指标:委托总量是窗口内新增委托数量之和,撤单量是撤单记录数量之和,撤单率等于撤单量除以委托总量,大单申报笔数可按单笔委托量超过某一阈值(例如 10 万股)来统计。委托类指标依赖逐笔委托数据,与成交类指标分开计算后再按窗口对齐合并。
从字段到指标的映射关系
把上述关系整理成一张映射表,可以在实现时直接对照,避免字段用错或口径不一致。下表为示例口径,实际阈值与单位需按所用数据源调整。
| 输出指标 | 来源数据 | 计算口径(示例) |
|---|---|---|
| 开盘价 / 收盘价 | 逐笔成交 | 窗口内首笔 / 末笔成交价 |
| 最高价 / 最低价 | 逐笔成交 | 窗口内成交价极值 |
| 成交量 / 成交额 | 逐笔成交 | Σ数量 / Σ(价格×数量) |
| 主动买量 / 主动卖量 | 逐笔成交 | 按成交方向分组求和 |
| 委托总量 / 撤单量 | 逐笔委托 | 按委托类型分组求和 |
| 撤单率 | 逐笔委托 | 撤单量 ÷ 委托总量 |
实现前的两个关键约定
第一是时间基准。逐笔时间戳可能来自交易所时钟,也可能经过本地接收系统打点,两者存在毫秒级偏差。聚合前应统一使用交易所时间字段,并在数据说明中固定下来,否则同一分钟窗口在不同批次数据上会漂移。第二是空窗口处理。若某一分钟没有任何成交,是输出一条成交量为零的记录,还是直接跳过,需要在目标表结构中提前定义。对于连续回测场景,通常保留空窗口并补零,以保证时间序列等间隔。