外盘期货L2逐笔订单簿数据,到底能拿来干嘛
前几天整理硬盘,发现去年做外盘原油短线策略时扒下来的一堆csv,光压缩包就3个多G。当时为了找稍微靠谱点的逐笔数据,我差不多把市面上能试的渠道都踩了一遍坑,好多要么缺字段,要么直接给你合并过的快照,根本没法用。后来总算找到一个能直接下原始订单簿的地方,数据字段还算完整,就顺手把常用的几个品种都拉下来了。
现在它那个页面把数据分了几个大类,我直接说有哪些,省得你一个个点进去翻。
逐笔订单薄数据(L2)
这个是我最常用的,也是做高频类策略回测绕不开的东西。它给的是每个交易日一个csv文件,里面记录的是全市场订单簿的每次变动,不是那种固定时间间隔的快照,是真的逐笔推送。
打开一个文件大概长这样,字段我直接列出来比较直观:
| 字段名 | 大概意思 |
|---|---|
| Timestamp | 时间戳,精确到毫秒 |
| Symbol | 合约代码,比如CL、ES |
| Side | 订单方向,Ask/Bid |
| Price | 报价价格 |
| Size | 挂单量 |
| OrderID | 订单编号,同一笔增删改能对上 |
| UpdateAction | 新增、修改、删除 |
| Sequence | 消息序列号,用来排错序 |
这玩意儿最实用的地方在于,你可以自己还原出任意时刻的盘口深度,而不是只拿到五档或者十档。我试过拿它回测一个小单吃单策略,发现如果只用常规的tick快照,里面很多档位消失根本捕捉不到,回测结果和实盘差得离谱。后来把逐笔还原了,才找出问题在哪。
另外,它同一个页面还提供分钟级别行情下载,这个就简单多了,就是标准的OHLCV,频率有1分钟、5分钟、15分钟、1小时、日线,字段基本就是:
| 字段 | 说明 |
|---|---|
| Timestamp | 分钟线起点时间 |
| Open | 开盘价 |
| High | 最高价 |
| Low | 最低价 |
| Close | 收盘价 |
| Volume | 成交量 |
| OpenInterest | 持仓量,这个很多免费源没有 |
分钟线适合做初步筛选或者跑一些对算力要求不高的趋势模型,我一般先拿分钟线过一遍条件,觉得有戏了再切到订单簿数据里细看。
中间插一句,我当时嫌下载csv再本地解析太麻烦,本来打算自己写个下载脚本,后来发现他们有个 CMES金融数据库 的接口,可以直接pip装,省了不少事。安装就一行:
pip install cmesdata
然后调用的时候,记得把合约代码和时间范围填对,我贴一下我用的示例:
from cmesdata import HistoryData
# CMES金融数据库的行情接口,注意入参正确,调用频率正常
# 初始化数据源,token去官网个人中心拿
hd = HistoryData(token="your_token_here")
# 拉取CL合约某天的逐笔订单簿
df = hd.get_tick_orderbook(symbol="CL", trade_date="2024-05-20")
print(df.head())
注释里提醒的那句“调用频率正常”是真的要注意,我之前图省事开了多线程并发,没几下就被限流了,老老实实单线程按顺序拉反而很快。
说回数据本身,我觉得这个源的订单簿有个好处是它没过滤掉那些极小单,有些数据商会把小于一定阈值的挂单直接去掉,看起来干净,但实际盘口上的“冰层”可能就看不到了。那个Sequence字段也挺关键,有一次我本地跑回测发现拟合度突然掉了很多,查了半天就是有一小段消息顺序乱了,靠这个字段重新排了序才恢复正常。
分钟线数据里,持仓量这个字段我经常拿来筛品种,像天然气、铜这类品种,持仓量变化大的时候跟着放量,这时候拉订单簿看细节特别有意思,能看到一些大单是怎么拆开来挂的。
最后提醒一下,这些数据下载下来都是csv格式,单品种普通交易日大概几百MB,做长周期回测的话硬盘得留够空间。另外这类数据只适合做研究和策略开发,不要当成投资建议,自己用着玩可以,别拿出去乱说。
大概就这些,反正数据本身是现成的,有需要直接去翻一下,比我之前到处求人发网盘链接强多了。

