1. 逐笔行情数据解析与分钟聚合目标

逐笔行情是交易所向市场推送的最细粒度成交与委托数据,它记录了每一笔成交的价格、数量、方向以及每一笔委托的申报、撤单行为。分钟聚合则是把这些离散的、时间间隔不规则的逐笔事件,按一分钟的时间窗口归并成一条结构化的 K 线或统计记录。理解这两端——原始逐笔字段与目标聚合指标——是后续所有计算工作的前提。本节先厘清逐笔成交与逐笔委托各自的数据结构,再明确分钟聚合要产出哪些指标、每个指标由哪些字段推导而来。

逐笔成交与逐笔委托的数据结构

逐笔成交(Trade)描述的是“已经发生的撮合”。一条典型的逐笔成交记录包含以下核心字段:证券代码、成交时间(精确到毫秒或微秒)、成交编号、成交价格、成交数量、成交方向(主动买或主动卖,部分市场用 BS 标志或买卖盘序号推断)、买方委托序号与卖方委托序号。其中成交方向是聚合中非常关键的字段,它决定了主动买入量与主动卖出量的划分,进而影响资金流向类指标。

逐笔委托(Order)描述的是“进入撮合队列的申报”,字段包括:证券代码、委托时间、委托编号、委托价格、委托数量、委托方向(买/卖)、委托类型(限价、市价、本方最优等)。在深市等市场中,逐笔委托还包含撤单记录,撤单通常以独立的委托类型或数量为负的形式出现。逐笔委托本身不产生成交,但它刻画了盘口的供给与需求变化,是计算委托总量、撤单率、大单申报等指标的基础。

两类数据在时间轴上交错到达,且同一时刻可能有多条记录。实际处理时通常先按时间排序,再按证券代码分组,保证同一只证券的事件流严格有序。需要注意,成交记录中的买方委托序号和卖方委托序号可以与委托记录关联,从而还原“哪一笔委托促成了这笔成交”,这是后续做委托生命周期分析的关键连接点。

逐笔成交 Trade 成交时间 / 成交编号 成交价格 / 成交数量 成交方向(主动买/卖) 买方委托序号 / 卖方委托序号 证券代码 逐笔委托 Order 委托时间 / 委托编号 委托价格 / 委托数量 委托方向(买/卖) 委托类型(限价/市价/撤单) 证券代码 1 分钟窗口 按时间排序 按证券分组 左闭右开区间 [t, t+60s) 事件流归并 分钟聚合输出指标 价格类 开盘价、最高价、最低价、收盘价、均价 数量类 成交量、成交额、成交笔数、平均单笔量 方向类 主动买量、主动卖量、净主动买入量 委托类 委托总量、撤单量、撤单率、大单申报笔数 时间戳:窗口起始时间 + 证券代码

分钟聚合的计算目标

分钟聚合的目标不是简单地把逐笔记录“压缩”,而是要在每个一分钟窗口内,用逐笔字段推导出一组可比较、可回测、可入库的指标。这些指标大致分为四类。

价格类指标:窗口内第一笔成交价为开盘价,最后一笔为收盘价,最高成交价与最低成交价分别取窗口内极值。均价可用成交额除以成交量得到,也可用成交量加权平均价(VWAP)表示。这里要特别注意窗口边界约定:采用左闭右开区间 [t, t+60s),即 09:30:00 的记录归入 09:30 这一分钟,09:31:00 的记录归入下一分钟,避免同一笔记录被重复计入相邻窗口。

数量类指标:成交量是窗口内所有成交数量之和,成交额是成交价格乘成交数量后求和,成交笔数是成交记录条数,平均单笔量等于成交量除以成交笔数。这些指标直接由逐笔成交字段累加得到,计算逻辑清晰,但要注意单位统一(股与手、元与万元)。

方向类指标:主动买量是成交方向为“买”的成交数量之和,主动卖量为“卖”的成交数量之和,净主动买入量等于主动买量减主动卖量。若原始数据没有显式方向字段,则需要用成交价与当时买卖盘价比较来推断,这属于数据清洗环节,必须在聚合前完成并记录推断规则。

委托类指标:委托总量是窗口内新增委托数量之和,撤单量是撤单记录数量之和,撤单率等于撤单量除以委托总量,大单申报笔数可按单笔委托量超过某一阈值(例如 10 万股)来统计。委托类指标依赖逐笔委托数据,与成交类指标分开计算后再按窗口对齐合并。

从字段到指标的映射关系

把上述关系整理成一张映射表,可以在实现时直接对照,避免字段用错或口径不一致。下表为示例口径,实际阈值与单位需按所用数据源调整。

输出指标 来源数据 计算口径(示例)
开盘价 / 收盘价 逐笔成交 窗口内首笔 / 末笔成交价
最高价 / 最低价 逐笔成交 窗口内成交价极值
成交量 / 成交额 逐笔成交 Σ数量 / Σ(价格×数量)
主动买量 / 主动卖量 逐笔成交 按成交方向分组求和
委托总量 / 撤单量 逐笔委托 按委托类型分组求和
撤单率 逐笔委托 撤单量 ÷ 委托总量

实现前的两个关键约定

第一是时间基准。逐笔时间戳可能来自交易所时钟,也可能经过本地接收系统打点,两者存在毫秒级偏差。聚合前应统一使用交易所时间字段,并在数据说明中固定下来,否则同一分钟窗口在不同批次数据上会漂移。第二是空窗口处理。若某一分钟没有任何成交,是输出一条成交量为零的记录,还是直接跳过,需要在目标表结构中提前定义。对于连续回测场景,通常保留空窗口并补零,以保证时间序列等间隔。

建议在正式聚合前,先抽取一个交易日的单只证券逐笔数据,手工核对 2 至 3 个分钟窗口的成交量与成交额,确认窗口边界、方向字段和单位换算三项口径无误,再批量运行。这一步能提前暴露大部分字段理解偏差。