1. Tick 数据基础
1.1 Tick 数据的定义
Tick 数据是金融市场中最原始、最细粒度的交易数据记录。每一笔 Tick 代表交易所撮合系统在某一时刻生成的一条成交或报价快照。在 A 股市场,Tick 数据通常包含以下字段:
| 字段 | 说明 | 示例 |
|---|---|---|
| 时间戳 | 精确到毫秒或微秒的成交时间 | 2025-03-21 09:30:01.250 |
| 最新价 | 当前最后一笔成交价格 | 15.68 |
| 成交量 | 当前 Tick 对应的成交手数 | 200 |
| 成交额 | 当前 Tick 对应的成交金额 | 313,600 |
| 买卖方向 | 主动买/主动卖/未知 | B(主动买) |
| 买一~买五 | 申买价与量(Level-2 行情) | 15.67 / 1500 |
| 卖一~卖五 | 申卖价与量(Level-2 行情) | 15.69 / 800 |
关键认知:Tick 数据不是"每秒一条"的固定频率数据,而是事件驱动的——只要有成交或报价变动,就会产生一条新的 Tick。在交易活跃时段,每秒可能产生数十条 Tick;在冷清时段,可能几秒才有一条。
1.2 Tick 数据与分钟数据的区别
分钟数据是对 Tick 数据按固定时间窗口(如 1 分钟、5 分钟)进行聚合后的结果。两者在信息密度、延迟敏感度和回测精度上存在本质差异:
| 对比维度 | Tick 数据 | 分钟数据 |
|---|---|---|
| 时间粒度 | 毫秒/微秒级,事件驱动 | 固定 60 秒间隔 |
| 数据量 | 单只股票日均 3000~8000 条 | 单只股票日均 240 条 |
| 价格信息 | 每一笔成交价 + 盘口深度 | 仅 O(开盘)/ H(最高)/ L(最低)/ C(收盘) |
| 成交量分布 | 精确到每一笔 | 分钟累计量,丢失内部分布 |
| 订单簿状态 | 实时买卖盘口快照 | 无盘口信息 |
| 回测精度 | 可模拟真实撮合与滑点 | 只能近似估计成交 |
| 存储成本 | 高(单只股票年约 500MB) | 低(单只股票年约 10MB) |
实战启示:使用分钟数据回测时,你无法知道"价格在分钟内的波动路径"。例如,某分钟 K 线收阳,但实际价格是先暴跌后拉回——如果策略在分钟开盘价买入,可能买在最高点;而 Tick 数据能精确捕捉到这种日内微观结构。
1.3 Tick 数据在量化回测中的重要性
为什么专业量化团队越来越依赖 Tick 数据而非分钟数据?以下三个核心原因决定了 Tick 数据在高频交易和精细回测中的不可替代性:
- 滑点模拟更真实——Tick 数据包含盘口深度(买一~买五、卖一~卖五),可以精确计算市价单的预期成交价格和冲击成本,避免分钟回测中"以收盘价成交"的理想化偏差。
- 信号延迟可量化——Tick 级时间戳允许你测量从信号产生到订单送达交易所之间的真实延迟,从而评估策略对延迟的敏感度。
- 微观结构因子挖掘——订单簿不平衡、Tick 级动量、买卖压力比等高频因子,只有基于 Tick 数据才能构建,这些因子在分钟数据上完全不可见。
常见误区:不要认为"我的策略是日频交易,不需要 Tick 数据"。即使持仓周期为一天,入场时刻的 Tick 级滑点也可能吃掉策略的大部分利润。用分钟数据回测时,滑点往往被严重低估。
1.4 Tick 数据与分钟数据的结构对比
下面的 SVG 图直观展示了 Tick 数据与分钟数据在信息维度上的差异:
1.5 Tick 数据在回测流程中的位置
在完整的 Tick 级回测流程中,Tick 数据处于最底层输入的位置,向上逐层构建信号、订单和绩效:
1.6 读取 Tick 数据的 Python 示例
以下代码展示了如何用 Python 读取并解析 CSV 格式的 Tick 数据:
import pandas as pd
# 读取 Tick 数据(CSV 格式)
tick_df = pd.read_csv(
'sh600519_20250321_tick.csv',
dtype={
'time': str,
'price': float,
'volume': int,
'turnover': float,
'direction': str
}
)
# 将时间戳列转为 datetime 类型
tick_df['time'] = pd.to_datetime(tick_df['time'])
# 查看前 5 条 Tick
print(tick_df.head())
# 统计当日 Tick 总数
print(f"当日 Tick 总数: {len(tick_df)}")
# 计算 Tick 级收益率(对数收益率)
tick_df['log_return'] = np.log(
tick_df['price'] / tick_df['price'].shift(1)
)
数据获取提示:国内 Tick 数据通常来自 Level-2 行情接口(如通达信、万得、聚宽等),或通过交易所授权数据商购买。CSV 格式是最通用的存储方式,但生产环境建议使用 Parquet 或 HDF5 格式以提升读写性能。