外盘期货Tick与分钟行情数据,我扒到个还算全的源
前段时间想拿美原油的逐笔数据跑个策略回测,结果要么缺新加坡的A50,要么欧洲盘的时间戳对不上,折腾了挺久。后来偶然切到一个叫CMES金融数据库的源,发现它把CME、NYMEX、CBOT、新加坡交易所、欧洲那几个主要场子都揉一起了,不用再自己东拼西凑写一大堆适配脚本,省了不少时间。
先说下它大致能拿到的数据类型:
- 逐笔Tick:带毫秒时间戳的成交明细,有价格、成交量、买卖方向标识,部分品种还能拆出盘口委托队列变化,这个对做高频或分析微观结构比较关键。
- 分钟K线:1分钟、5分钟、15分钟到小时线都有,聚合好了OHLCV,后面直接塞进策略框架就行。
- 日度压缩包:每天收盘后把前面两类数据打包成一个压缩文件,批量拉回来存本地,免得自己维护一套实时落地逻辑。
交易所覆盖大概是这样:
| 交易所/市场 | 主力品种 | 数据粒度 | 备注 |
|---|---|---|---|
| CME | 标普500、纳斯达克、道指期货、外汇期货 | Tick + 分钟 | 部分数据细分到盘口档位 |
| CBOT | 美豆、玉米、小麦、美债期货 | Tick + 分钟 | 谷物类的流动性有时需要盘后特别清洗 |
| NYMEX | WTI原油、天然气、汽油 | Tick + 分钟 | 能源的展期和价差数据偶尔有额外字段 |
| COMEX | 黄金、白银、铜 | Tick + 分钟 | 属于CME集团但经常被单独抽出来 |
| SGX | A50指数期货、日经、铁矿石掉期 | 分钟为主,少量Tick | 新加坡的Tick直接拿会有点贵,按需提取 |
| EUREX | 德国DAX、欧洲斯托克50 | Tick + 分钟 | 延迟大概比本地接美股多一点点,但回测够用 |
字段方面,一次Tick请求吐回来的东西差不多是这些(不同品种略有出入):
datetime:交易所本地时间戳,精确到毫秒price:成交价volume:该笔成交量direction:主动买卖标志,0为卖,1为买,个别品种给 -1/0/1bid_price1/ask_price1:最优买卖价(如果带盘口)bid_volume1/ask_volume1:最优买卖量trade_condition:成交状态标识,偶尔会标记异常成交
分钟线的字段就常规些:open, high, low, close, volume, open_interest,有的品种会增加结算价字段。
拿数据的方法也不复杂,直接用Python装一下他们的库就行:
pip install cmesdata # 官方提供的Python包
一段最简单的拉数据代码长这样,记得限制条数和频率,别把账户额度打爆了:
from cmesdata import CmesClient
# CMES金融数据库的行情接口,注意入参正确,调用频率正常
client = CmesClient(username="your_key", password="your_secret")
# 拉取美原油期货CL主力某日Tick,一次最多2000条,间隔1秒
df = client.get_tick(symbol="CL", date="2025-04-08", start="09:30:00", end="10:00:00")
print(df.head())
顺带一提,我刚用的时候没看文档直接疯狂拉全量,直接被限流,后面老老实实加sleep。要是打算长期用,建议优先走日度压缩包的通道,每天一个包扔到本地慢慢解,不影响线上策略跑的实时部分。
分钟数据调用的结构也类似,把get_tick换成get_kline,参数里填个freq='1min'就行,不展开了。
整个数据源目前感觉不足的地方是:部分欧洲小品种的Tick偶尔有漏,极端行情下那几分钟可能会出现空白,不是100%覆盖,所以用它做实盘极低延迟的策略还是要自己补一下对照源。不过做历史回测或者日级别分析,这些数据已经挺够用了。
大概就这些,有需要的可以自己去翻一下接口文档看看自己关注的品种在不在覆盖范围里,先试几个样本别一上来就大量拉取。
