1. 逐笔成交数据初识
在行情数据体系中,逐笔成交(Tick-by-Tick Trade,常简称逐笔成交或成交明细)是最细粒度的交易记录之一。它记录的是交易所撮合引擎每完成一笔撮合后产生的成交事件,而不是按固定时间间隔(如3秒)聚合后的快照。理解逐笔成交,是后续解析字段结构、编写高效读取程序的前提。
一、逐笔成交到底记录了什么
一笔逐笔成交记录通常对应撮合引擎的一次成交动作,核心信息包括:成交时间(精确到毫秒甚至微秒)、证券代码、成交价格、成交数量、成交金额、买卖方向标识(主动买/主动卖或买卖盘性质)、成交编号、以及买卖双方的委托编号等。与快照行情相比,逐笔成交不包含十档盘口,但它保留了“每一笔钱以什么价格、什么方向、多大数量成交”的原始事实。
需要特别区分两个容易混淆的概念:逐笔成交与逐笔委托。逐笔委托记录的是订单进入撮合队列的事件(委托价格、数量、方向、订单类型),逐笔成交记录的是订单被撮合匹配的结果。二者通过委托编号、成交编号可以关联,但字段结构和用途不同。本节聚焦逐笔成交,逐笔委托将在后续章节展开。
二、逐笔成交在交易分析中的作用
逐笔成交的价值在于“还原交易过程”。聚合后的K线或快照只告诉你一段时间内的最高价、最低价、成交量和收盘价,而逐笔成交能回答更细的问题:
- 资金流向判断:通过主动买成交量与主动卖成交量的对比,估算净流入/净流出,识别大单方向。
- 大单与主力行为识别:按成交金额或成交量阈值筛选大单,统计其出现的时间分布与价格位置。
- 微观结构研究:分析成交间隔、成交价格相对买卖价的位置、订单簿消耗速度,用于研究流动性与价格发现。
- 回测与仿真:高频或日内策略回测需要逐笔级成交来模拟真实成交价与滑点,避免用快照价格造成偏差。
- 异常交易排查:对敲、拉抬、虚假申报等行为的识别,往往依赖逐笔成交与委托的时序关系。
举个教学示例(以下为合理假设的示例数据,非实测):某股票在10:00:00.120有一笔成交,价格10.50元、数量2000股、方向为主动买;10:00:00.350又有一笔10.49元、5000股、主动卖。若统计一分钟内主动买成交量为12万股、主动卖成交量为8万股,则可粗略判断该分钟买方力量占优。这类统计正是逐笔成交最直接的应用。
三、常见数据来源与格式概览
逐笔成交数据的来源主要有三类:交易所官方行情(如上交所、深交所的Level-2逐笔成交,通常通过专线或行情网关分发)、商业数据服务商(如Wind、聚源、Tushare、AkShare等提供的接口或文件)、以及券商柜台/量化平台导出的历史文件。不同来源在字段命名、时间精度、编码方式上存在差异,但核心语义一致。
格式方面,常见的有:
- CSV/文本文件:按行存储,字段以逗号或制表符分隔,便于用pandas或流式读取,但文件体积大。
- 二进制格式:如交易所原始二进制行情包、Parquet、Feather等列式存储,读取快、压缩率高,适合大规模历史数据。
- 数据库表:存入ClickHouse、DolphinDB、MySQL等,支持按代码和时间范围查询。
- 实时流:通过TCP/组播行情接口推送,需要按协议解析二进制报文。
下面这张图概括了逐笔成交从产生到被使用的典型链路,以及它与逐笔委托、快照行情的关系,帮助建立整体数据观。
四、读取逐笔成交前应先建立的三个认识
第一,逐笔成交是“事件流”而非“时间序列”。它没有固定采样间隔,同一毫秒可能有多笔成交,也可能长时间没有成交。因此读取时不能假设等间隔,统计时要按时间窗口聚合,而不是按行号对齐。
第二,字段语义依赖数据源。同样是“方向”字段,有的数据源用“B/S”表示主动买/主动卖,有的用“1/2”编码,有的甚至只给买卖委托编号,需要自行推断主动方。读取程序必须先把字段映射表建立清楚,再进入解析逻辑。
第三,数据量级要提前评估。以A股为例,单只活跃股票一天的逐笔成交可达数万至数十万笔,全市场一天可达数亿笔。用pandas一次性读入全市场CSV很容易内存溢出,因此后续章节会重点讲分块读取、列裁剪、类型压缩和流式处理。