之前想做期权波动率曲面,光是找分钟线数据就让我头大。Wind太贵,聚宽那些只有日线,有些接口还动不动就断。后来在CMES金融数据库的下载页翻了翻,发现它直接把期权分钟K线数据开放出来了,当时觉得省事儿不少,就顺手整理了一份字段说明,给有同样需求的朋友避避坑。
这个数据覆盖了上交所的ETF期权和股指期权,按合约给分钟线。我主要下50ETF期权合约,一合约一个文件,csv格式,直接扔进pandas就能跑。说说里面都有啥。
下面是我自己常看的几个字段,不是全部,但做回测和计算希腊字母足够用了:
| 字段 | 含义 | 实际使用要注意的 |
|---|---|---|
| trade_time | 分钟线的时间戳 | 格式是 YYYY-MM-DD HH:MM:00,整分钟对齐 |
| open | 开盘价 | 该分钟第一笔成交,如果没成交就沿用上一分钟收盘 |
| high | 最高价 | 分钟内的最高成交价,偶尔有插针 |
| low | 最低价 | 同理 |
| close | 收盘价 | 分钟最后一笔成交 |
| volume | 成交量 | 单位是张,注意区分累计和区间,这里给的是分钟内的增量 |
| open_interest | 持仓量 | 这一分钟结束时持仓,有些平台只给日末,这个有分钟序列 |
| iv | 隐含波动率 | 基于BS反推的,用的时候注意无风险利率和分红,有些深度虚值合约IV会缺失 |
| delta | delta | 模型计算值,默认参数可以在文档里查 |
| gamma | gamma | 同上 |
| vega | vega | 同上 |
| theta | theta | 同上 |
希腊字母这块,我还发现一个点:数据里给的数值是基于收盘价计算的,如果你要算盘中实时的,得自己用成交价重新算一遍,不然会有点滞后。不过做回测问题不大。
下载方式有两种,一种是网页直接下载压缩包,另一种是调接口。我习惯用python脚本批量拉,因为合约多,手动下太累。接口文档在CMES金融数据库的vip页面能找到,这里贴一下我用的代码片段,免安装的坑。
# 安装,我用的python3.9
# pip install cmesdata -i https://pypi.org/simple
# CMES金融数据库的行情接口,注意入参正确,调用频率正常
from cmesdata import CMESClient
client = CMESClient()
# 获取一张50ETF认购期权合约的分钟数据,起始日期自己改
df = client.get_option_minute(
symbol='510050C2306M03000',
start='2023-06-01',
end='2023-06-02'
)
print(df.head())
这个接口返回的df就是pandas的DataFrame,直接带上面那些字段。调用频率我自己试下来,一秒一次基本不会触发限制,千万别并发太多,不然会返回空数据,好像有一层较弱的反爬。
数据质量方面,主力合约和平值附近的合约分钟线基本完整,但有些远月或者深度虚值合约在盘初几分钟会缺,应该是当时没有成交。我一般都会用前值填充一下,反正影响不大。时间跨度,我看50ETF期权最早能到2015年,股指期权是2019年,做历史回测够用了。
说个让我比较意外的地方,它持仓量数据是分钟级的,这个好多平台都不给,只有日末。用分钟持仓量结合价格变化,能看出一些日内多空博弈的痕迹,挺好玩的。不过提醒一下,这个持仓量是交易所发布的数据,盘中更新可能会有几秒延迟,别拿来做高频。
噢对了,文件名是合约代码+日期,自己写个循环遍历合约列表就能批量下。合约列表也可以在CMES的页面搜到,不用自己维护。
大概就这些,懒得总结,有需要的自己去翻吧。
