1. 逐笔成交数据初识
在量化研究与高频数据分析中,逐笔成交数据(Tick-by-Tick Trade Data,也常被称为成交明细、分笔成交)是最细粒度的市场交易记录。它不同于按固定周期聚合的K线,也不同于只保留最优档位快照的行情切片,而是每发生一笔撮合成交就记录一条,完整保留了成交发生的时间、价格、数量以及主动买卖方向。理解逐笔成交数据,是后续做特征提取、样本构建、微观结构建模的第一块基石。
从定义上说,逐笔成交数据描述的是“谁在什么时刻、以什么价格、成交了多少、由哪一方主动发起”。它回答的是交易层面的问题,而不是委托层面的问题。委托层面的信息属于逐笔委托数据(Order-by-Order),两者常被混淆:逐笔委托记录的是每一笔挂单、撤单的申报行为,逐笔成交记录的是申报被撮合后的结果。做特征工程时,二者往往需要配合使用,但本节先聚焦成交侧。
一条逐笔成交记录长什么样
不同数据源字段命名略有差异,但核心字段高度一致。以常见的A股Level-2逐笔成交为例,一条记录通常包含以下内容:
| 字段 | 含义 | 示例值 | 说明 |
|---|---|---|---|
| 时间 | 成交时刻 | 09:31:07.320 | 精确到毫秒或10毫秒,是时序特征的基础 |
| 证券代码 | 标的标识 | 600519 | 用于多标的对齐 |
| 成交价格 | 撮合价 | 1685.00 | 单位元,需注意复权处理 |
| 成交数量 | 成交量 | 300 | 股或手,需统一单位 |
| 成交金额 | 价×量 | 505500 | 部分数据源直接给出 |
| 买卖方向 | 主动方标识 | B / S | B为主动买(外盘),S为主动卖(内盘) |
| 成交编号 | 序列号 | 1023871 | 用于去重与排序 |
其中买卖方向是最容易被误解的字段。它标识的是“主动成交方”:若一笔成交由买方以卖一价主动吃单完成,则记为B(主动买);若由卖方以买一价主动砸单完成,则记为S(主动卖)。部分数据源还会给出中性标识N(如集合竞价撮合、无法判定主动方的情形)。方向字段直接决定了后续“主买量、主卖量、净主动买入”等特征的计算口径,务必在数据字典中确认其定义,不能想当然。
数据来源与获取方式
逐笔成交数据的来源主要有三类。第一类是交易所官方Level-2行情,通过券商或行情服务商(如Level-2授权厂商)以文件或实时流形式提供,权威性最高,字段规范,但通常需要付费授权。第二类是第三方数据平台,如聚宽、米筐、Tushare、Wind等,它们对原始数据做了清洗与标准化,接口友好,适合研究与回测,但字段口径可能与交易所原始定义存在差异。第三类是自建采集,通过行情网关接收实时推送并落库,适合对时效性要求高的实盘场景,但需要处理丢包、乱序、重复等问题。
无论哪种来源,拿到数据后都应先做一次“体检”:检查时间范围是否覆盖目标区间、是否存在重复成交编号、买卖方向字段的取值集合是否符合预期、成交价格是否落在当日涨跌停区间内、成交量是否出现异常零值。这些检查看似琐碎,却能避免后续特征计算出系统性偏差。
从原始记录到可用结构
原始逐笔成交往往以追加日志的形式到达,顺序即时间顺序,但跨数据源合并时可能出现乱序。工程上通常先按“证券代码+成交编号”去重,再按时间戳稳定排序,最后统一单位(价格统一为元、数量统一为股、金额统一为元),形成一张标准化的成交明细表。这张表是后续所有特征提取的输入底座。
上图把“来源—清洗—标准化”这条链路画清楚了:三类来源在字段口径上并不完全一致,必须先经过统一的体检与清洗,才能汇入同一张明细表。注意图中清洗环节特意标出了“方向取值校验”和“涨跌停区间检查”,这两项正是逐笔成交数据最容易出问题的地方。
一个可动手的小例子
假设我们拿到某只股票连续三笔成交记录(示例数据,仅用于说明结构):
时间,代码,价格,数量,方向,成交编号
09:31:07.320,600519,1685.00,300,B,1023871
09:31:07.560,600519,1684.80,200,S,1023872
09:31:08.010,600519,1685.20,500,B,1023873
按方向汇总,主买量 = 300 + 500 = 800 股,主卖量 = 200 股,净主动买入 = 800 − 200 = 600 股。若把时间窗口切到秒级,09:31:07 这一秒内主买 300、主卖 200,净流入 100 股;09:31:08 这一秒主买 500。可以看到,仅仅三笔记录就已经能支撑“方向净额”“秒级成交强度”这类基础特征。这正是逐笔成交数据的价值所在——它把市场行为拆到了最小可观测单元,让后续的特征提取有据可依。