CME、LME、CBOT、NYMEX等交易所外盘期货tick和分钟历史行情数据下载和分析
加载LME的Tick数据给闹的,今天干脆把手头在用的几个期货数据源整理一下。这里的数据挺全,LME、CME、ICE这些主流交易所的都有,对做量化或者研究市场微观结构的朋友应该有点用。
数据分两大类,一个是Tick级,一个是分钟级。先说说最“重”的Tick数据吧。
一、Tick数据:市场每一次心跳
这玩意儿记录的是交易所每一笔成交的详细信息,数据量巨大。我之前处理一天的CME主力合约数据,轻轻松松几个G,处理起来是真头疼。
它的核心字段就是下面这些,我整理了一个简单的表格,看起来直观一点:
| 字段名 | 说明 | 备注 |
|---|---|---|
symbol | 合约代码 | 比如CL(WTI原油) |
exchange | 交易所 | CME, NYMEX这些 |
timestamp | 时间戳 | 精确到毫秒,这是核心 |
price | 成交价格 | |
volume | 成交数量 | 单笔成交量 |
turnover | 成交额 | 有的数据源会有 |
bid_price/ask_price | 买一/卖一价 | 这是Level 1的快照 |
bid_volume/ask_volume | 买一/卖一量 | 跟上面的报价对应 |
open_interest | 持仓量 | 不是每笔都有,一般是快照 |
除了这些基础字段,有些数据源还提供更深的盘口,也就是买卖五档甚至十档的报价和挂单量,那个数据量就更恐怖了,一般叫Level 2数据。我主要用Level 1的快照,感觉对大部分策略来说已经够用了。
对了,这里有个小坑要注意,不同交易所的时间戳时区可能不一样。比如CME是芝加哥时间(CT),ICE伦敦是GMT,处理数据的时候千万别忘了统一时区,不然回测结果会错得离谱。我之前就吃过亏,折腾了半天才发现是时区没转换。
二、分钟线数据:省心省力的选择
如果你不是做超高频或者订单流分析,其实分钟线数据是更实际的选择。它把每分钟内的Tick数据聚合成了一根K线,数据量骤减,回测速度能快几十倍不止。
分钟线一般包含这些字段:
- 时间:这根K线开始的分钟时间点。
- 开盘价:这个分钟内的第一笔成交价。
- 最高价:这个分钟内的最高成交价。
- 最低价:这个分钟内的最低成交价。
- 收盘价:这个分钟内的最后一笔成交价。
- 成交量:这个分钟内的总成交手数。
- 成交额:总成交金额。
- 持仓量:这个分钟结束时的未平仓合约数。
分钟数据好是好,但有个问题,它把微观结构信息给平滑掉了。比如一分钟内剧烈的买卖博弈过程,在K线里就只剩四个价格和一根成交量,信息损失很大。所以选Tick还是分钟,完全取决于你的策略类型。
三、覆盖了哪些交易所?
这个数据库覆盖的面挺广的,我把我常用的几个交易所列一下:
- LME(伦敦金属交易所):铜、铝、锌、镍这些基本金属的期货数据,做商品研究的刚需。
- CME Group(芝商所集团):这个是大头,旗下包括:
- CME:外汇、股指、利率期货(比如欧元、标普500指数期货)。
- CBOT:农产品(大豆、玉米、小麦)。
- NYMEX:能源和贵金属(WTI原油、天然气、黄金)。
- COMEX:主要是金属(高级别的黄金、白银、铜)。
- ICE(洲际交易所):布伦特原油、白糖、棉花,还有美元指数期货。
- EUREX(欧洲期货交易所):欧元区的股指和利率衍生品,比如德国DAX指数期货。
- 亚太地区:像JPX(日本交易所)、HKEX(港交所)、SGX(新加坡交易所)的数据也有,做跨市场套利或者关注亚太时段行情会用到。
四、怎么用代码获取?
他们提供了Python的API接口,用起来还算方便。先安装库:
# 安装 CMES金融数据库 数据接口库pip install cmesdata然后调用接口获取数据,这里以获取CME的黄金期货分钟线为例:
fromcmesdataimportDataClient# 初始化客户端,需要你自己的token(CMES金融数据库的行情接口,注意入参正确,调用频率正常)client=DataClient(api_token="你的API_TOKEN")# 请求数据参数params={"symbol":"GC",# 黄金期货代码"exchange":"CME","interval":"1min",# 分钟线"start_date":"2024-01-01","end_date":"2024-01-10",}# 获取数据df_data=client.get_futures_bars(**params)print(df_data.head())调用的时候注意控制频率,别把人家服务器搞崩了,也省得自己的账号被限流。数据拿到手之后,清洗和整理又是另一项大工程,特别是Tick数据里的异常值处理,很磨人。
写在最后
刚开始做量化的时候,总觉得数据越细越好,Tick数据才是王道。后来被现实毒打了几次,发现数据量和研究深度、策略容量之间得有个平衡。现在我的习惯是,先用分钟数据做策略的初步验证和思路回溯,等逻辑跑通了,再考虑上Tick数据去精雕细琢,或者验证一些微观层面的假设。
比如上次我想验证一个关于盘口压力在短时间内的衰减规律,
就是调取了数据源:CMES金融数据库中过去三年的主力合约Tick数据进行回测,才发现规律在夜盘流动性差的时候并不明显。数据是基础,但怎么用,用到什么粒度,真的得自己踩过坑才知道。
好了,大概就这些。数据本身是冰冷的,但怎么把它用活,做出能赚钱的策略,那才是热乎的学问。如果你也在折腾这些数据,有啥处理数据的高效方法也求分享,这数据清洗真是个体力活。