Tick级数据:从原始数据到高频信号的起点
做高频交易的人都知道,Tick数据是整个策略的「原油」。你想想看,没有精炼过的原油能直接烧吗?当然不能。Tick数据也一样——原始、杂乱、但蕴含着巨大的价值。
我个人习惯把Tick数据比作市场的「心电图」。每一笔成交、每一次报价变动,都是市场心跳的真实记录。今天我们就来聊聊,怎么读懂这张心电图。
Tick数据结构:到底长什么样?
先看最基础的东西。一个标准的Tick数据行,通常包含这些字段:
| 字段 | 含义 | 示例 |
|---|---|---|
| Timestamp | 时间戳 | 2024-01-15 09:30:00.123456 |
| Symbol | 股票代码 | 600519.SH |
| Price | 成交价 | 168.50 |
| Volume | 成交量 | 100 |
| Side | 买卖方向 | B / S |
| Type | 数据类别 | Trade / Quote |
嗯,这里要注意:不同交易所的Tick数据格式差异很大。上交所和深交所的逐笔数据,字段命名就完全不同。我在项目中遇到过最头疼的事,就是对接三家交易所的数据格式——每家都有自己的「方言」。
时间戳对齐:高频数据的命门
为什么时间戳对齐这么重要?我给你讲个真实案例。
我曾经调试一个套利策略,回测时收益曲线漂亮得不行。结果实盘一跑,亏得亲妈都不认识。查了三天,最后发现是时间戳没对齐——成交数据和报价数据差了2毫秒。2毫秒啊朋友们,在高频世界里,这足够让市场翻几个来回了。
核心要点:时间戳对齐不是简单的「把时间设成一样」。你需要考虑:
- 交易所时钟 vs 本地时钟的偏差
- 网络传输延迟
- 数据接收顺序与真实发生顺序的差异
说白了,时间戳对齐就是给每一笔数据打上「真实发生时间」的标签。我常用的方法是:
# 一个简单的时间戳对齐示例
import pandas as pd
def align_timestamps(trade_df, quote_df, tolerance='1ms'):
"""
对齐成交和报价数据的时间戳
tolerance: 允许的最大时间偏差
"""
# 将时间戳设为索引
trade_df.set_index('timestamp', inplace=True)
quote_df.set_index('timestamp', inplace=True)
# 使用asof合并,找到每个成交时间点最近的报价
aligned = pd.merge_asof(
trade_df.sort_index(),
quote_df.sort_index(),
left_index=True,
right_index=True,
direction='nearest',
tolerance=pd.Timedelta(tolerance)
)
return aligned.dropna()
Level 1/2/3数据:层层递进的信息
很多新手分不清这三个层级。我简单解释一下:
- Level 1:就是最基础的行情——最新价、成交量、买卖一档。说白了,你在炒股软件上看到的就是这个。
- Level 2:多了十档买卖盘口,还有逐笔成交。能看到谁在买、谁在卖。
- Level 3:最深层的数据,包含完整的订单簿状态变化。每一笔委托的进入、撤单、成交,全都能看到。
我的经验:做高频策略,至少要用Level 2数据。Level 3数据虽然信息最全,但数据量巨大——一天就能产生几个GB。我见过有人用Level 3数据做回测,结果内存直接爆了。
逐笔成交与逐笔委托:市场的「微观粒子」
逐笔成交和逐笔委托,是Tick数据中最精细的两个维度。我习惯把它们比作:
- 逐笔成交:已经发生的交易,是「结果」
- 逐笔委托:正在路上的订单,是「过程」
为什么要区分这两个?因为只看成交数据,你永远不知道市场真正的「意图」。举个例子:
某只股票突然拉涨,你看到成交数据是连续的大买单。但如果你看委托数据,可能会发现——这些大买单背后,有人在偷偷撤单。这就是所谓的「虚假流动性」。我早期做策略时就吃过这个亏,只看成交数据,结果被庄家耍得团团转。
避坑指南:我曾经以为逐笔成交数据就够用了,直到有一次策略在回测里表现完美,实盘却连续亏损。后来发现,问题出在「冰山订单」上——大单被拆成小单,逐笔成交数据根本看不出来。从那以后,我坚持同时分析成交和委托数据。
知识体系结构图
下面这张图,是我自己梳理的Tick数据知识体系。你看完应该能有个整体印象:
实战中的数据处理流程
说了这么多理论,来点实际的。我一般处理Tick数据的流程是这样的:
- 数据清洗:去掉重复的Tick、修正异常的时间戳、处理缺失值
- 时间对齐:把成交数据和报价数据对齐到同一个时间轴上
- 订单簿重建:根据逐笔委托数据,实时重建买卖盘口
- 信号提取:从重建的订单簿中,提取各种微观结构信号
一个关键提醒:数据清洗这一步千万别省。我见过有人直接拿原始Tick数据跑策略,结果因为一个时间戳错误,整个回测结果都是错的。数据质量决定了策略的天花板。
好了,关于Tick级数据的基础知识就聊到这里。记住一句话:数据是死的,但你对数据的理解是活的。多动手、多踩坑,才能真正掌握这些微观结构。
公众号:蓝海数据掘金营,微信deep3321