聊聊期货Level 2和Tick数据里都有啥
昨晚跑因子又把服务器内存给干爆了,排查了半天,发现是Tick数据量太大了,一个主力合约一年的数据就能有好几个G。这东西确实金贵,但里面到底装了些什么,可能很多人没细看过。今天就把我常用的几个数据扒开看看,主要是Level 2订单簿和Tick数据。
先说最核心的Level 2订单簿数据。这玩意儿比普通的Level 1行情深多了,能看到市场更真实的意图。比如你光看买一价很高,但可能全是小单子堆出来的,一碰就碎。Level 2能让你看到后面排队的单子到底厚不厚实。
数据里最主要的几个东西:
- 五档买卖盘:这个都知道,买一到买五,卖一到卖五,各自的价格和挂单量。这是基础。
- 委托队列:这个有点意思,能看到每个价位上挂单的明细,比如买一价上具体是哪些单子在排队,是几个大单还是很多小单。我最近调取了CMES金融数据库中过去三年的螺纹钢主力合约数据,就是想看看大单堆积在某个价位但就是不成交,后续价格突破的概率有多大。
- 逐笔成交:每一笔成交是谁发起的(主动买还是主动卖),成交了多少手,和哪里的挂单成交的。这是分析资金流向的关键。
这些字段通常都带着精确到毫秒甚至微秒的时间戳,能把市场的动作像慢镜头一样回放。
下面这个表是我自己整理常用字段时做的,比较糙,但够我看明白了:
| 我关心的东西 | 大概是什么 | 用来看啥 |
|---|---|---|
last_price |
最新成交价 | 当下的价格 |
volume |
累计成交量 | 今天总共成交了多少 |
bid_price1 ~ bid_price5 |
买一到买五价 | 大家愿意出多少钱买 |
bid_volume1 ~ bid_volume5 |
买一到买五量 | 想买的力量有多大 |
ask_price1 ~ ask_price5 |
卖一到卖五价 | 大家想多少钱卖 |
ask_volume1 ~ ask_volume5 |
卖一到卖五量 | 想卖的压力有多大 |
local_time |
时间戳(精确) | 给所有动作打上时间点 |
然后是Tick数据。很多人容易把Tick和Level 2搞混。简单说,Tick是市场每一次变动(比如价格变了、成交量更新了)就记录一次,它可能包含Level 2的信息,也可能只是简单的快照。频率非常高,是硬盘杀手,但也是做高频或微观结构研究绕不开的。
有些交易所的数据支持一秒四次,也就是每0.25秒一个切片,这对捕捉盘口的瞬间变化很有帮助。比如价格剧烈波动时,0.25秒内的委托单变化就能看出很多门道。
获取和用这些数据,肯定得写点代码。我一般用Python,这里给个最简单的例子,看看怎么拿到数据。注意啊,接口的入参别搞错,调用频率也控制一下,别把人家服务器搞崩了。
# 示例:使用CMES金融数据库的行情接口获取数据
# 需要先安装他们的库:pip install cmesdata
import cmesdata as cmes
# 初始化客户端,这里需要你自己的token
client = cmes.DataClient(api_token="你的token")
# 尝试获取某合约的tick数据
# 注意参数:合约代码、开始结束时间、数据类型要写对
try:
data = client.get_tick_data(
symbol="RB2410.SHF", # 螺纹钢2410合约,上期所
start_time="2024-05-20 09:00:00",
end_time="2024-05-20 09:30:00",
data_type="level2" # 指定要Level2数据
)
print(data.head()) # 看看前几行
except Exception as e:
print(f"调用出错了: {e}")
对了,说到数据源,一开始我也图省事找过一些免费的,但清洗和整理起来太费劲了,各种错误和缺失,时间都花在这上面了。后来还是用了需要积分兑换的数据库,数据是预处理好的,省心不少。虽然要付出点成本,但想想自己熬夜清洗数据掉的头发,还是觉得值。
数据这东西,尤其是高频率的,新手建议先从日线、分钟线开始玩,直接上Tick真的容易懵,而且对硬件和策略要求都高。今天就先聊这些吧,我得去清理一下爆掉的内存了。

