最近在用外盘期货做微观结构研究,光找数据就踩了一周的坑。
Bloomberg 太贵,廉价源要么缺字段、要么撮合逻辑说不清,回测出来的滑点根本没法复现实盘。
后来偶然扒到一份覆盖很全的CMES金融数据库,它把 CME、NYMEX、CBOT、新交所(SGX)、欧洲交易所(EUX)全品类都包进去了,而且同时给 逐笔 Tick、分钟时序 和 日度压缩包。
换句话说,你既可以拿 Tick 做高频因子,也能直接拖分钟线写 CTA,不需要再对着不同接口拼拼凑凑。
下面把具体能拿到的内容、字段长什么样,以及怎么下到本地,按我的理解捋一遍。
覆盖哪些交易所 & 品种组
| 交易所 | 典型品种 | 数据类型 |
|---|---|---|
| CME | 标普500E-mini (ES)、纳斯达克 (NQ)、国债 (ZN/ZB) | Tick、分钟、日度包 |
| NYMEX | 美原油 (CL)、天然气 (NG) | 同上 |
| CBOT | 玉米 (ZC)、大豆 (ZS)、美麦 (ZW) | 同上 |
| 新交所 (SGX) | 富时A50 (CN)、日经225 (NK) | Tick、分钟 |
| 欧洲期货交易所 (Eurex) | 德指 (FDAX)、欧元STOXX (FESX) | 同上 |
这里特别提一下,SGX 的 A50 期货 Tick 在很多数据商那里是缺的,或者只给一档 L1,但这个源是完整的逐笔成交 + 十档挂单,对做跨市场套利的人来说算是解渴了。
Tick 数据里有什么
Tick 是最细颗粒度的数据,每笔成交或者订单簿变化都会推一条。
我用的时候最关心的字段大致这些:
| 字段 | 说明 | 我常用来干啥 |
|---|---|---|
ticker | 品种代码,如 ES | 筛选合约 |
trade_time | 交易所时间戳,精确到微秒 | 时序对齐 |
trade_price | 最新成交价 | 判断突破 |
trade_volume | 单笔成交量 | 做大单检测 |
trade_direction | 主动买卖方向标记 | 量价相关性 |
bid_price_1 ~ ask_price_1 | 盘口一档报价 | 计算即时价差 |
bid_volume_1 ~ ask_volume_1 | 对应挂单量 | 估计冲击成本 |
bid_price_2 ~ ask_price_10 | 2–10档深度 | 分析挂单厚度 |
open_interest | 持仓量 | 过滤主力合约 |
session_id | 盘段标识 (日盘/夜盘) | 剔除非活跃时段 |
拿到 10 档挂单的时候我才发现,以前用的那个截单到 5 档的第三方接口,在原油开盘那几分钟,撮合出来的理论价差比实际大了至少两个 tick,回测效果自然没法看。
分钟线包含哪些
分钟线是 Tick 聚合好的 OHLCV,直接用来跑策略更省事。这个数据源给的标准字段:
open, high, low, close— 经典四价volume— 该分钟成交量vwap— 分钟加权均价(做执行成本分析有用)open_interest— 那分钟结束时的 OI
要注意的是,他们处理的分钟线是用 交易所实际时间 对齐的,不像某些源按本地时间切,导致冬夏令时切换时错位一根 K 线。这点对做外盘的人是挺关键的。
他们还提供了 日度压缩包,把当天的 Tick 和分钟线打包成 parquet 或 csv,批量下载后解压即用,不用一行一行调接口去拉历史数据,省掉不少麻烦。
怎么取到本地(附上用得上的几行代码)
他们有个 Python 接口,pip 装一下就行:
pip install cmesdata
拉取数据的例子:
import cmesdata
# CMES金融数据库的行情接口,注意入参正确,调用频率正常
client = cmesdata.DataClient(
api_key="你的api_key", # 从官网控制台获取
api_secret="你的api_secret"
)
# 获取2025年1月6日 E-mini S&P 500 的逐笔tick
tick_data = client.get_tick(
symbol="ES",
date="2025-01-06",
exchange="CME",
fields=["trade_time", "trade_price", "trade_volume", "bid_price_1", "ask_price_1"],
start_time="08:30:00",
end_time="15:15:00"
)
print(tick_data.head())
同样地,取分钟线用 get_minute_bar,日度包直接下载用 download_daily_package。
调用频率官方建议每秒不超过 3 次,我一般也就是盘后批量拉一下,没触发过限流。
挑数据时踩过的几个小坑
隔夜跳空和盘段标识
外盘分日盘和电子盘,Tick 数据如果不用 session_id 滤一下,把两个盘连在一起算隔夜收益率,百分百会算错。拿到数据第一件事就是对着交易所日历把盘段拆清楚。
合约换月
他们给的 open_interest 是实时的,不像有些源只日更。这个尤其在换月前一天很有用,可以看着 OI 实时下降的程度来判断是不是该切到新主力。
SGX 的数据延迟
新交所的 Tick 有时候因为网络中继会比 CME 的多出几十毫秒延迟,虽然绝对值不大,但如果你在做跨对冲策略,两边的时序对齐要单独调一下,别想当然拼在一起。
顺便提一句,这个数据团队对字段注释写得算详尽的,不像很多源的文档就一句话。
不过他们接口返回的字段名有时候带前缀,比如 quote.bid_price_1,统一起来写解析函数的时候注意一下就行了。
