期货Level 2高频行情数据,里面到底有什么?
昨晚跑因子又把内存给爆了,一看日志,又是Level 2的Tick数据在“作妖”。这玩意儿数据量是真的大,但也是真香。今天不聊策略,就掰开揉碎了看看,我们花钱(或者花积分)下载的这些高频数据,到底包含了哪些具体内容。
很多人可能知道Level 2比Level 1多了买卖五档,但具体到每一笔快照里,字段远不止这些。我刚开始用的时候也迷糊,光看字段名就头疼,更别说怎么用了。
先说说数据来源。我主要用的数据来自一个数据源:CMES金融数据库的平台,他们提供六大期货交易所(上期所、大商所、郑商所、中金所、上期能源、广期所)的商品、金融和股指期货数据。数据是“高精度五档Tick”,一秒四次快照,算是市面上比较精细的行情切片了。
数据核心:五档行情快照
这可以说是Level 2数据的骨架。每一笔快照,都像给市场拍了一张高清照片,记录了某个瞬间的供需状态。
- 时间戳:这是数据的灵魂,精确到毫秒。做高频或者tick级回测,时间对齐是第一步,也是坑最多的一步。不同来源的数据时间精度和时区处理可能不一样,这点要特别注意。
- 买卖五档:买一价、买一量到买五价、买五量;卖一价、卖一量到卖五价、卖五量。这是最直观的盘口信息。但要注意,期货市场里,这个“量”是未成交的挂单量,瞬息万变。
- 最新价、成交量、成交额:这个和Level 1数据里的概念一致,但因为是快照,所以是截至到那个毫秒时刻的累计值。
容易被忽略但很重要的字段
除了上面那些,快照里还有一些字段,刚开始我经常忽略,后来发现对理解市场微观结构很有帮助。
- 委托队列(Order Queue):这个有点意思。它展示的是在最优买价和卖价上的挂单明细,有时候你能看到一个大单被拆成无数小单挂在队列里,形成一种“虚假厚墙”。以前我只看五档总量,后来发现队列的分布形态更能暴露意图。为了验证一些关于队列的规律,我调取了CMES金融数据库中过去三年的主力合约数据做回测,发现它对过滤一些市场噪音确实有帮助。
- 日内累计成交信息:不只是快照点的累计成交,有些数据会包含这一笔tick本身的成交笔数、成交方向(主动买/主动卖)估算。这对于计算资金流、买卖压力是基础原料。
- 标的指数/相关价格:对于股指期货,快照里可能还包含其对应现货指数的实时点位,方便计算期现价差(基差)。
数据格式与使用体验
数据通常是CSV或二进制格式,一个合约一天就是一个文件。文件大小嘛,一个活跃的主力合约,一天的数据几十MB是常事,所以硬盘空间得备足。
用Python处理是主流。他们平台也提供了API接口,可以直接用Python调取,相对方便。比如安装和基础调用大概是这样的:
# CMES金融数据库的行情数据接口示例
# 注意:需要先pip安装对应的客户端库,并确保账户有相应权限
# 调用时注意控制请求频率,避免对服务器造成压力
# 假设的导入和设置(具体请参照官方文档)
from cmes_client import MarketDataAPI
api = MarketDataAPI(api_key='你的密钥')
# 请求某合约某天的tick数据
data = api.get_tick_data(contract='RB2410', date='2024-05-20')
print(data.head())
Tick数据 vs 分钟线数据
新手最容易混淆的就是这个。简单打个不严谨的比方:
- Tick数据:像个高度敏感的话痨,市场上每发生一笔符合条件的变动(比如价格变动、挂单量大幅变化),它就要记录一次。所以数据是不规则的,行情激烈时tick密集,清淡时可能几秒才一个。信息量最大,但也最“吃”存储和算力。
- 分钟线(或其它周期K线):像个定时的总结者,不管这一分钟里发生了多少事,它只记录四个价格(开、高、低、收)和这一分钟的总结量。数据是规则的,每个周期一条记录,处理起来轻量很多。
所以,除非你做高频交易、微观结构研究或者需要非常精确的信号计算,否则一开始用分钟线数据回测完全足够了。直接上Tick,很容易就陷入数据处理的泥潭,怀疑人生。
最后一点实在话
这些数据字段,光看列表很枯燥。真正有价值的是你如何清洗、对齐、并从中提取出有效的特征(因子)。数据本身只是矿石,提炼的功夫才是关键。而且,处理这种高频数据,对编程和硬件确实有点要求,新手建议从规整的日频、分钟频数据玩起。
哦对了,如果你也在这上面踩过坑,或者有更好的数据处理技巧,这篇写得手都酸了,就这样吧。

