2、高频行情数据源解析:Level-2 行情快照、逐笔成交、逐笔委托的数据结构、字段含义与典型数据样例

高频行情是量化交易的“原油”。沪深交易所推出的 Level-2 行情数据,相比传统 Level-1 行情,提供了更细粒度、更丰富的信息维度。本章将深入解析三种核心 Level-2 数据源:行情快照、逐笔成交与逐笔委托,涵盖其数据结构、关键字段含义及典型数据样例,为后续 Spark 处理打下坚实基础。

前置认知:Level-2 行情通常通过行情 SDK(如中证指数、万得、恒生等)以二进制流或结构化文件形式推送。本章以最通用的 CSV/Parquet 列式存储结构为例进行讲解,实际生产环境中需根据具体接口做字段映射。

2.1 Level-2 行情快照(Snapshot)

行情快照是交易所每隔固定时间(通常为 3 秒)发布的“截面”数据,反映了某一时刻的盘口状态。它包含十档买卖盘口、逐笔加权均价、成交总量等核心指标。

2.1.1 数据结构与字段含义

字段名 类型 含义说明
ts_code string 股票代码(如 600519.SH)
trade_date int 交易日期(YYYYMMDD)
update_time string 快照时间戳(HHMMSSsss,精确到毫秒)
pre_close double 昨收价
open double 今开盘价
high double 截至快照时刻的最高价
low double 截至快照时刻的最低价
last_price double 最新成交价(快照时刻)
volume long 累计成交量(股)
amount double 累计成交金额(元)
bid_prices array<double> 十档买价(从买一到买十)
bid_volumes array<long> 十档买量(对应买价的手数)
ask_prices array<double> 十档卖价(从卖一到卖十)
ask_volumes array<long> 十档卖量(对应卖价的手数)

2.1.2 典型数据样例

ts_code,trade_date,update_time,pre_close,open,high,low,last_price,volume,amount,bid_prices,bid_volumes,ask_prices,ask_volumes
600519.SH,20250320,093000000,1800.00,1805.00,1810.00,1798.00,1808.00,1250000,2256000000.00,"[1807.00,1806.00,1805.00,1804.00,1803.00,1802.00,1801.00,1800.00,1799.00,1798.00]","[100,200,150,80,60,40,30,20,10,5]","[1808.00,1809.00,1810.00,1811.00,1812.00,1813.00,1814.00,1815.00,1816.00,1817.00]","[80,120,90,50,30,20,15,10,5,2]"
关键洞察:快照数据是计算“买卖压力指标”(如买卖盘口深度差、加权平均价差)的基础。在 Spark 中,通常将 bid_prices 和 ask_prices 等数组字段展开为多行,以便进行逐档分析。
Level-2 行情快照:十档盘口与核心指标 行情快照 基础信息 ts_code / trade_date update_time (毫秒) pre_close / open / high / low 十档盘口 bid_prices[10] bid_volumes[10] ask_prices[10] / ask_volumes[10] 成交统计 last_price / volume / amount 快照是“截面”数据,每 3 秒生成一次,用于计算盘口变化率、买卖压力差等高频因子

2.2 逐笔成交(Tick Trade)

逐笔成交记录每一笔实际发生的交易,是市场微观结构的“原子”事件。它包含成交价格、成交量、成交方向(主动买/主动卖)以及成交编号等关键信息。

2.2.1 数据结构与字段含义

字段名 类型 含义说明
ts_code string 股票代码
trade_date int 交易日期
trade_time string 成交时间(精确到毫秒)
trade_id long 交易所生成的唯一成交编号
price double 成交价格
volume long 成交量(股)
buy_order_id long 买方委托编号(用于关联委托)
sell_order_id long 卖方委托编号
trade_flag string 成交方向标志:'B' 主动买,'S' 主动卖,'N' 未知

2.2.2 典型数据样例

ts_code,trade_date,trade_time,trade_id,price,volume,buy_order_id,sell_order_id,trade_flag
600519.SH,20250320,093000123,1000001,1808.00,100,200001,300001,B
600519.SH,20250320,093000456,1000002,1807.50,200,200002,300002,S
600519.SH,20250320,093000789,1000003,1808.00,50,200003,300003,B
注意事项:逐笔成交的 trade_flag 字段在不同交易所或数据源中定义可能不同。上交所 Level-2 通常以 'B'/'S' 区分主动买卖;深交所则可能用 '1'/'2' 表示。在 Spark 清洗阶段,务必进行标准化映射。

2.3 逐笔委托(Tick Order)

逐笔委托记录每一笔进入交易所撮合主机的订单,包括订单的提交、撤单、部分成交等状态变化。它是还原市场订单流、计算订单不平衡度的核心数据。

2.3.1 数据结构与字段含义

字段名 类型 含义说明
ts_code string 股票代码
trade_date int 交易日期
order_time string 委托时间(精确到毫秒)
order_id long 交易所委托编号
price double 委托价格
volume long 委托数量(股)
side string 买卖方向:'1' 买,'2' 卖
order_type string 订单类型:'1' 限价单,'2' 市价单,'3' 撤单
order_status string 订单状态:'0' 新单,'1' 部分成交,'2' 完全成交,'3' 已撤单

2.3.2 典型数据样例

ts_code,trade_date,order_time,order_id,price,volume,side,order_type,order_status
600519.SH,20250320,093000000,200001,1808.00,500,1,1,0
600519.SH,20250320,093000100,300001,1807.50,300,2,1,0
600519.SH,20250320,093000120,200001,1808.00,500,1,1,2
600519.SH,20250320,093000200,300002,1807.00,200,2,1,0
实战要点:逐笔委托数据量极大,单只股票一天可能产生数十万条记录。在 Spark 中,通常按 ts_code 和 trade_date 进行分区,并利用 order_id 与逐笔成交进行关联,以还原完整的“订单→成交”链路。
逐笔成交与逐笔委托:订单流还原 逐笔委托 (Tick Order) order_id / price / volume side (买/卖) order_type (限价/市价/撤单) order_status (新单/部分/完全/撤单) 逐笔成交 (Tick Trade) trade_id / price / volume buy_order_id sell_order_id trade_flag (主动买/主动卖) Spark 关联逻辑 order_id = buy_order_id OR order_id = sell_order_id 输出:完整订单流数据 (Order Flow) 用于计算订单不平衡、主动买卖强度等高频因子

2.4 三种数据源对比总结

维度 行情快照 逐笔成交 逐笔委托
数据粒度 3 秒截面 每笔交易 每笔订单
数据量级 低(约 2400 条/股/天) 中(约 1-5 万条/股/天) 高(约 5-20 万条/股/天)
核心用途 盘口深度、价差分析 主动买卖方向、成交量分布 订单流不平衡、撤单率
Spark 处理难点 数组字段展开 时间序列对齐 大规模数据 Join
典型因子示例 买卖盘口压力差 主动买入占比 订单流不平衡指标