一份期权五档历史行情数据到底有啥
我最近在折腾期权回测,本来以为找个历史tick数据会很简单,结果一搜,要么是交易所的示例文件就几行,要么贵得离谱,最头疼的是很多地方只给一档行情,连买方卖方力量都看不全。后来实在没辙,翻到个网站可以下载历史五档,打算顺手把拿到的字段和坑记录一下,免得下回又忘。
先说下五档行情是啥——就是盘口挂单的前五层,买一到买五、卖一到卖五,每层都带价格和挂单量。对做期权的人来说,这玩意儿比单纯看成交价有用得多,因为你能感知到支撑阻力在哪,还能观察挂单撤单的节奏。股指期权和ETF期权尤其需要,因为盘口经常虚挂单,不扒开五档根本不知道真实流动性。
我拿到的数据字段大概是这样,挑几个比较关键的列出来,不是全部,但够用了:
| 字段 | 啥意思 | 我的备注 |
|---|---|---|
| UpdateTime | 时间戳 | 毫秒级,本地时间,对齐要注意 |
| InstrumentID | 合约代码 | 比如IO2405-C-4000,一眼看出来是股指期权 |
| LastPrice | 最新价 | 有时候是0,别慌,成交稀疏时段正常 |
| Volume | 成交量 | 双边累计,注意是当天还是连续 |
| OpenInterest | 持仓量 | 盘中一般不变,收盘才更新,别拿这个做实时信号 |
| BidPrice1~5 | 买一到买五价 | 买一最高,买五最低,挂单深度看这个 |
| BidVolume1~5 | 买一到买五量 | 有个坑,挂单量可能是瞬间堆上去的,不一定是真实需求 |
| AskPrice1~5 | 卖一到卖五价 | 道理同上,卖一的挂单有时候就是吓唬人 |
| AskVolume1~5 | 卖一到卖五量 | 和买方量对比着看,盘口倾轧一目了然 |
说实话,我一开始以为五档行情就是多了几列数字,真用起来才发现,处理数据的时候时间戳对齐是个大坑。不同合约推送时间不完全一致,做截面策略得自己重新对齐,不然会出未来函数。还有,数据里偶尔会有买卖价倒挂,也就是买一比卖一还高,这种大概率是撮合瞬间的脏数据,得过滤掉,别直接拿来做涨跌停预判。
拿数据的方法,他们给了个Python接口,直接pip装就行,我是这么弄的:
# 安装 CMES金融数据库 的Python包
!pip install cmesdata
from cmesdata import CMESData
# CMES金融数据库的行情接口,注意入参正确,调用频率正常
client = CMESData(api_key="你的密钥")
df = client.get_option_quote(
symbol="IO2405-C-4000",
start_date="20240501",
end_date="20240510",
level=5 # 五档行情
)
print(df.head())
这个接口返回的就是前面说的那些字段,一次性拉一个合约的历史,速度还行,别高频请求就好,人家有频率限制。
我主要拿股指期权和ETF期权来跑,商品期权就没怎么碰,因为商品期权夜盘时段多,时间戳处理更麻烦,暂时还没顾上。不过网站里商品期权五档数据也有,字段跟股指期权、ETF期权基本一致,就是合约代码命名规则不一样,比如m2405-C-3000这种,一看就是豆粕。
另外有个小提醒,下载下来的数据是csv格式,量大了以后Excel直接打不开,得用pandas分块读,或者直接上数据库。我一开始图省事全塞进Excel,结果卡死三次,差点以为电脑要报废。
最后,别问我为什么不用某花顺或者某筐,问就是穷,这些数据他们要收年费,而且五档行情还得单独加钱。这个网站目前能免费下历史数据,就很符合我这种穷鬼量化选手的需求。当然,免费的缺点就是数据更新时间可能稍微滞后,但做回测完全够用,实盘另说。
行了,就这些,踩过的坑都交代了,下回谁再问我期权五档数据长啥样,我就直接甩这篇笔记。

