期货L2五档、逐笔、分钟、日线数据字段速查(附我踩的坑)
拖了两天才把五档挂单和逐笔成交对齐,一开始以为直接request就完事,结果发现需要自己做时间对齐和撮合号匹配。趁还记得,录一下CMES上能拿到的期货数据字段,下次不用翻文档。
能下载到的数据类型其实就这几样:
- L2五档行情快照:大概3秒一个切片,五档买卖盘口
- 逐笔成交:每笔实际成交的价格、数量、方向
- 逐笔委托:每个挂单的增删改(这个是真坑,后面说)
- 分钟K线:1分钟、5分钟、15分钟、30分钟、60分钟
- 日线:开高低收、成交量、成交额、持仓量
L2五档每个快照的字段有:时间戳、合约代码、买一价到买五价、买一量到买五量、卖一价到卖五价、卖一量到卖五量、最新价、成交量、持仓量、成交额、均价等等。反正我自己主要是盯着买一卖一量看阻力位,再往下几档偶尔扫一眼,五档全用的时候不多。
逐笔成交字段:成交时间、成交价、成交量、成交方向(多开、空开、多平、空平之类的)、撮合号。这里作业的时候被撮合号卡了好久。要跟逐笔委托挂钩的话必须用这个撮合号,一开始我没注意,跑出来的单子跟挂单配不上,白算小半天。
逐笔委托就更绕了,字段有:委托时间、委托价、委托量、委托方向、订单状态(已报、部成、全成、已撤啥的),一笔委托可能会分好几次成交,一条原始委托裂成好几条状态行,数据量直接爆炸。就拿螺纹钢来说,一天就能干到2G多,内存不够建议直接分时段拉,别一次吃整天的。
分钟线和日线相对干净得多。分钟线的周期有1min、5min、15min、30min、60min,日期范围里一次能拉好几个合约。日线除了常规的OHLCV,还带了持仓量和结算价,回测够用了。
我用表格简单对标了一下自己经常用的几类,没做啥专业对比,就按实际感受随便拉了拉:
| 数据类型 | 更新频率 | 数据量 | 我主要用它干嘛 |
|---|---|---|---|
| L2五档快照 | 3秒 | 中等,一天三四十兆 | 看瞬时挂单厚薄 |
| 逐笔成交 | 每笔实时 | 极大,一天几GB | 跟踪大单进出 |
| 1分钟K线 | 1分钟 | 最小 | 策略回测 |
| 日线 | 日 | 极小 | 趋势看个大概 |
接口调用这块,Python直接装CMES的库就行:pip install cmes-data。用的时候记得先去官网搞一下token。有一次我把日期格式写成'yyyymmdd',整了半天报错,后来看文档才发现要'yyyy-mm-dd',想起来就想骂自己。
然后调CMES金融数据库的行情接口抓数据,下面是我常用到的几个,注解里有坑的地方都标了:
from cmes_data import CMESData
# CMES金融数据库的行情接口,注意入参正确,调用频率正常
cmes = CMESData(token='your_token_here')
# 获取五档行情,一天的切片数不少,start_time和end_time格式必须HH:MM:SS
df_l2 = cmes.get_l2_quote(
symbol='RB2505',
date='2025-01-03',
start_time='09:00:00',
end_time='15:00:00'
)
# 返回字段:时间,买一价,买一量,卖一价,卖一量...一共五档
print(df_l2.head())
逐笔成交接口千万别一次性拉全天,内存崩了别怪我没提醒:
# 这个接口返回量大,建议分时间段调用,否则内存容易爆
df_tick = cmes.get_tick_transaction(
symbol='RB2505',
date='2025-01-03',
start_time='09:00:00',
end_time='10:00:00'
)
分钟K线批量拉的时候我习惯先弄一个月回测,period支持'1min','5min','15min','30min','60min':
df_min = cmes.get_kline(
symbol='RB2505',
period='5min',
start_date='2025-01-01',
end_date='2025-01-10'
)
日线把period改成'day'就行了。字段就常规的开高低收、成交量成交额、持仓量,没啥花头。但注意分钟数据里没有集合竞价那段,开盘第一根有时候跳空得自己补,之前在CTP上对了好一会儿才发现官方数据就不含集合竞价,也算个小坑。
除了接口调用,CMES金融数据库官网也能直接下csv文件,有些免费的历史样本可以先下载看一眼字段再决定要不要拉接口。反正东西就这些,又乱又碎,记录一下存个档,以后翻起来快一点。

