2. Tick数据基础
高频行情标签校准的第一步,是彻底理解原始Tick数据的结构、来源与存储方式。Tick数据是逐笔成交与逐笔报价的微观记录,其质量直接决定后续标签校准的成败。本章从三个核心维度展开:数据结构、数据源、存储格式。
2.1 Tick数据结构
一条标准的Tick记录至少包含四个核心字段:时间戳、成交价格、成交量、买卖盘口快照。下表列出国内股票市场Level-2 Tick的典型字段定义:
| 字段 | 类型 | 说明 | 示例 |
|---|---|---|---|
| Timestamp | int64 / datetime | 交易所撮合时间,精度通常为毫秒或微秒 | 2025-03-21 09:30:00.123 |
| Price | float64 | 最新成交价,单位元 | 15.68 |
| Volume | int64 | 该笔成交量,单位股(A股) | 1000 |
| BidPrice1 | float64 | 买一价 | 15.67 |
| BidVolume1 | int64 | 买一量 | 5000 |
| AskPrice1 | float64 | 卖一价 | 15.69 |
| AskVolume1 | int64 | 卖一量 | 3000 |
| TradeFlag | char | 成交方向:B(主动买)、S(主动卖)、N(未知) | B |
校准要点:时间戳精度是标签校准的基石。若原始Tick时间戳仅到秒级,则无法准确还原订单簿事件顺序,必须通过盘口变化反推或使用更高精度数据源。
买卖盘口通常包含10档(Level-2)或5档(Level-1)。在标签校准中,最常用的是前3档价量数据,用于计算订单簿斜率、价差、深度等微观结构特征。
2.2 Tick数据源
Tick数据源分为交易所直连、第三方数据商、开源数据集三类。下表对比其核心差异:
| 数据源类型 | 延迟 | 字段完整性 | 成本 | 典型代表 |
|---|---|---|---|---|
| 交易所直连 | 微秒级 | 全字段(含逐笔委托) | 极高 | 上交所L1/L2、深交所L2 |
| 第三方数据商 | 毫秒级 | 核心字段(缺逐笔委托) | 中等 | Wind、聚宽、Tushare |
| 开源数据集 | 秒级或离线 | 有限字段(通常仅成交) | 免费 | Kaggle、Quandl |
避坑提示:第三方数据商常对时间戳做“对齐处理”(如截断到毫秒或整秒),这会破坏Tick的微观时序。校准前必须检查时间戳的单调性与精度,必要时做重采样或丢弃。
选择数据源时,需权衡三个因素:
- 精度需求:标签校准若涉及订单簿重建,必须使用微秒级时间戳。
- 字段覆盖:缺少逐笔委托字段将无法还原订单簿事件流。
- 数据连续性:断点或缺失会导致标签序列出现空洞。
2.3 Tick数据存储格式
高频Tick数据量巨大(单只股票日均约10万条),存储格式需兼顾读写速度与压缩率。业界常用以下三种格式:
| 格式 | 压缩率 | 读取速度 | 适用场景 |
|---|---|---|---|
| Parquet | 高(列式压缩) | 快(列裁剪) | 离线分析、特征工程 |
| HDF5 | 中 | 中 | 科研、小规模回测 |
| CSV | 低(无压缩) | 慢(全量解析) | 调试、小样本交换 |
推荐使用Parquet格式存储校准后的Tick数据。以下是一个写入示例:
import pandas as pd
# 假设 tick_df 是包含时间戳、价格、成交量、盘口的DataFrame
tick_df = pd.DataFrame({
'timestamp': pd.to_datetime(['2025-03-21 09:30:00.123',
'2025-03-21 09:30:00.456']),
'price': [15.68, 15.69],
'volume': [1000, 500],
'bid_price1': [15.67, 15.68],
'bid_vol1': [5000, 4800],
'ask_price1': [15.69, 15.70],
'ask_vol1': [3000, 3200]
})
# 写入Parquet,启用snappy压缩
tick_df.to_parquet('tick_20250321.parquet',
compression='snappy',
index=False)
存储建议:按日期分区存储,文件名包含股票代码与日期,如
600519_20250321.parquet。校准后的标签字段(如异常标记、订单簿特征)应作为独立列追加,避免修改原始数据。
下面用一张SVG图总结Tick数据的完整生命周期:从交易所产生,经数据源分发,到存储为结构化文件,最后用于标签校准。
2.4 数据质量检查清单
在开始标签校准之前,必须对原始Tick数据执行以下检查:
- 时间戳单调性:确保无回退或重复时间戳。
- 价格合理性:价格在涨跌停范围内,无负值或零值。
- 成交量非负:成交量必须大于0,且与盘口变化逻辑一致。
- 盘口价差非负:卖一价 ≥ 买一价,否则为异常。
- 字段完整性:无大面积缺失值,特别是时间戳和价格。
实操建议:编写一个数据质量报告函数,输出每日Tick的缺失率、异常比例、时间戳间隔分布。将报告作为校准流程的第一步,可节省大量调试时间。