高频数据基础:Tick数据、Order Book数据、Trade数据的结构与特征、数据频率与时间戳处理
1. 高频数据三大核心类型
高频交易数据通常分为三类:Tick数据、Order Book(订单簿)数据和Trade(成交)数据。理解它们的结构与特征是进行量化策略开发的第一步。
| 数据类型 | 核心字段 | 数据频率 | 典型用途 |
|---|---|---|---|
| Tick数据 | 时间戳、最新价、成交量、成交额、买卖盘口(Bid/Ask) | 逐笔(微秒级) | 微观结构分析、波动率建模 |
| Order Book数据 | 时间戳、档位价格、档位数量、买卖方向、订单类型 | 快照/增量(毫秒级) | 订单流不平衡、流动性分析 |
| Trade数据 | 时间戳、成交价、成交量、成交方向(买方/卖方发起) | 逐笔(微秒级) | 成交量分布、价格冲击模型 |
实战提示:在Champion Challenger框架中,Tick数据通常作为“基准数据源”,而Order Book和Trade数据则用于构建特征工程。三者时间戳必须对齐,否则会导致回测偏差。
2. Tick数据的结构与特征
Tick数据是交易所发布的最原始数据流,记录每一笔行情变动。其结构通常包含以下字段:
- 时间戳(Timestamp):精确到微秒或纳秒,是数据对齐的核心。
- 最新价(Last Price):当前最后一笔成交价格。
- 成交量(Volume):当前Tick对应的成交数量。
- 买卖盘口(Bid/Ask):最优买价与卖价,以及对应数量。
- 交易状态(Trading Status):连续竞价、集合竞价、停牌等。
# Tick数据示例(Python字典格式)
tick = {
'timestamp': '2025-03-21 09:30:00.123456',
'symbol': 'AAPL',
'last_price': 175.32,
'volume': 100,
'bid_price': 175.30,
'bid_size': 500,
'ask_price': 175.35,
'ask_size': 300,
'status': 'continuous'
}
3. Order Book数据的结构与特征
Order Book数据记录了当前市场所有未成交订单的汇总情况,通常以“快照”或“增量”形式提供。其核心特征包括:
- 多档位(Multi-level):通常包含5档、10档或全档位数据。
- 价格-数量对(Price-Quantity Pairs):每个档位包含价格和对应的委托数量。
- 买卖方向(Bid/Ask Side):买方(Bid)与卖方(Ask)分别列出。
- 增量更新(Incremental Update):只记录变化的部分,减少数据量。
# Order Book快照示例(5档)
order_book = {
'timestamp': '2025-03-21 09:30:00.456789',
'symbol': 'AAPL',
'bids': [
{'price': 175.30, 'size': 500},
{'price': 175.29, 'size': 1200},
{'price': 175.28, 'size': 800},
{'price': 175.27, 'size': 600},
{'price': 175.26, 'size': 400}
],
'asks': [
{'price': 175.35, 'size': 300},
{'price': 175.36, 'size': 700},
{'price': 175.37, 'size': 900},
{'price': 175.38, 'size': 1100},
{'price': 175.39, 'size': 500}
]
}
关键指标:Order Book的“深度”(Depth)和“价差”(Spread)是衡量流动性的核心指标。价差 = 最优卖价 - 最优买价。
4. Trade数据的结构与特征
Trade数据记录每一笔实际成交的订单,是市场活动的最终结果。其结构相对简洁:
- 时间戳:成交发生的精确时间。
- 成交价(Trade Price):实际成交价格。
- 成交量(Trade Volume):该笔成交的数量。
- 成交方向(Trade Direction):买方发起(Buyer Initiated)或卖方发起(Seller Initiated)。
- 成交编号(Trade ID):唯一标识该笔成交。
# Trade数据示例
trade = {
'timestamp': '2025-03-21 09:30:00.789012',
'symbol': 'AAPL',
'trade_price': 175.32,
'trade_volume': 200,
'direction': 'buyer_initiated',
'trade_id': 'T123456789'
}
5. 数据频率与时间戳处理
高频数据的时间戳处理是数据清洗中最关键的一环。常见问题与处理方法如下:
| 问题类型 | 描述 | 处理方法 |
|---|---|---|
| 时间戳精度不一致 | 不同交易所或数据源使用不同精度(秒、毫秒、微秒) | 统一转换为纳秒级整数(Unix Timestamp * 1e9) |
| 时间戳重复 | 同一时间戳出现多条数据 | 按接收顺序添加序列号(Sequence Number) |
| 时间戳缺失 | 数据流中断导致时间戳不连续 | 使用前向填充(Forward Fill)或插值 |
| 时区问题 | 数据使用本地时间而非UTC | 统一转换为UTC时间,避免夏令时影响 |
常见陷阱:不要直接使用字符串格式的时间戳进行排序或计算。务必先转换为数值型(如Unix纳秒时间戳),否则性能会急剧下降,且容易出错。
6. 高频数据时间对齐流程
在Champion Challenger框架中,Tick、Order Book和Trade数据必须按时间对齐,才能构建统一的特征矩阵。下图展示了标准对齐流程:
7. 数据频率选择策略
不同策略对数据频率的要求不同。以下是常见频率选择建议:
- 微秒级(Tick-by-Tick):适用于做市商策略、高频套利、订单流预测。
- 毫秒级(1ms/10ms Bar):适用于统计套利、高频动量策略。
- 秒级(1s/5s Bar):适用于日内趋势跟踪、均值回归策略。
- 分钟级(1min/5min Bar):适用于中低频日内策略、组合优化。
实战建议:在Champion Challenger框架中,建议先使用Tick级数据构建特征,然后通过“降采样”生成不同频率的Bar数据,以便对比不同频率下的策略表现。