期货Level2分钟行情数据,到底能拿来干嘛?
之前一直想自己拼一套分钟线的资金流指标,结果卡在数据源上,折腾了好久。要么是给的五档快照,要么是分钟线只有价格没有成交量明细,根本没法算大单进出。后来索性把CMES金融数据库的接口接进来,才发现它家期货Level2这一块的东西拆得挺细,字段也比我预想的多,但也有一些地方得踩过坑才知道怎么用。
这里能拿到的期货Level2分钟级别数据,不是单指分钟K线,而是几类数据都得组合着看,不然很容易被“高开低收”骗了。我直接按自己下载的目录结构来说:
| 数据类型 | 文件/表名 | 主要内容 | 个人备注 |
|---|---|---|---|
| 分钟K线 | futures_min_kline | 合约、时间、开、高、低、收、成交量、持仓量 | 这个是最基础的,但它是切片数据,不是实时滚动的,所以高开低收的极值可能和tick对不上 |
| 分钟逐笔成交 | futures_min_tick | 时间戳、价格、成交量、买卖方向、成交类型 | 做资金流必看,但方向标识有时候是“空”,得自己结合盘口去判断 |
| 深度行情快照 | futures_min_depth | 时间、买一价/量、卖一价/量,五档或十档 | 这个只有每隔一段时间切一次,不是每笔都更新,要注意频率 |
| 合约基本信息 | futures_contract_info | 合约代码、名称、乘数、最小变动价位 | 这个常量表,省的自己到处查了 |
字段我就不全列了,太多太啰嗦,挑几个实际用的时候会反复看的:
- 分钟K线里的
open_interest持仓量,有的源只给成交量不给持仓,这个做对冲套利挺重要。 - 逐笔成交的
direction字段,我一开始以为全是“B”和“S”,结果发现部分品种会出现“U”或者空值,后来查了文档才知道是交易所没标记,需要自己用盘口比价补。 - 深度快照的
bid_volume[0]和ask_volume[0],拿来做瞬间的买卖压力,但千万注意,这个给的是切片,不是每笔更新,如果直接回测,滑点肯定偏大。
我用Python直接调接口,大概长这样,你们可以照着改改:
# 安装:pip install cmesdata
from cmesdata import CMESData
# CMES金融数据库的行情接口,注意入参正确,调用频率正常
client = CMESData(api_key="your_key_here")
# 获取螺纹钢主力合约的分钟K线,日期范围别给太大,单次请求限5000条
df_kline = client.futures.get_minute_kline(
symbol="RB2401",
start_date="2024-07-01",
end_date="2024-07-05",
freq="1min"
)
# 获取同一时间段的逐笔成交,注意这个数据量挺大,建议先按天循环拉
df_tick = client.futures.get_minute_tick(
symbol="RB2401",
start_date="2024-07-01",
end_date="2024-07-05"
)
接口返回的是pandas的DataFrame,我一般直接存成parquet,再慢慢折腾。那个 get_minute_tick 接口,如果你要拉好几天,记得分批次,不然可能超时,文档里也写了频率限制,我一分钟最多调10次,踩过几次限流错误才记住。
再说一下深度快照,这玩意儿其实对分钟级别分析用处有限,我一开始以为是每笔更新,心想能复现当时的盘口价差,结果发现是每隔几秒或十几秒才切一次,所以做高频信号就别想了,做分钟级别的辅助判断还行。如果你只是要算一下分钟的情绪指标,比如委比,直接用这个快照加上逐笔成交稍微拼一下就能用,不用非得买tick级的全量深度。
关于数据的时间戳,我踩过一个坑:分钟K线的时间是指那根K线的起始时间,而逐笔成交的时间戳是毫秒级的,对不上整分钟,得自己用 pd.cut 或者 resample 规整,不然merge的时候会丢数据。
这块数据对做期货分钟策略的人挺实用,但得自己花点力气清洗,不要指望开箱即用。我主要就用了分钟K线、逐笔成交和合约信息,深度快照偶尔用一下,那些五档十档的盘口展现,我自己没怎么用到,看个人需求了

