3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在期权量化交易中,隐含波动率(Implied Volatility, IV)曲面是评估期权价格偏差、寻找跨期与跨行权价套利机会的核心工具。结合国信 QMT 平台的 Python API,我们可以高效获取期权链数据、调用内置函数计算 IV 并绘制三维波动率曲面。
在 QMT 中,构建期权波动率曲面主要依赖以下核心 API:
ContextInfo.get_option_list(undl_code, dedate, opttype, isavailable):获取指定标的(如 510300.SH)在特定到期月的期权合约列表。ContextInfo.get_option_detail_data(optioncode):获取期权合约的行权价(OptExercisePrice)、到期日(ExpireDate)及标的代码等信息。ContextInfo.get_option_iv(optioncode):直接获取期权实时隐含波动率。ContextInfo.bsm_iv(optionType, objectPrices, strikePrice, optionPrice, riskFree, days, dividend):基于 BSM 模型精确计算欧式期权隐含波动率。以下示例展示了如何在 QMT 中获取沪深300ETF期权数据、计算 IV 并构建三维曲面数据逻辑:
#coding:gbk
import numpy as np
import pandas as pd
def init(ContextInfo):
ContextInfo.target_undl = '510300.SH'
# 设置订阅标的
ContextInfo.set_universe([ContextInfo.target_undl])
# 设定交易账号
ContextInfo.set_account('60000001')
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 1. 获取近月与远月期权合约列表
near_month = '202312' # 示例到期月份
call_options = ContextInfo.get_option_list(ContextInfo.target_undl, near_month, 'CALL', True)
# 2. 遍历合约计算/获取隐含波动率
iv_data = []
for opt in call_options:
detail = ContextInfo.get_option_detail_data(opt)
strike_price = detail.get('OptExercisePrice', 0)
# 获取实时 IV
realtime_iv = ContextInfo.get_option_iv(opt)
# 也可以通过 bsm_iv 计算精准 IV
# opt_tick = ContextInfo.get_full_tick([opt])
# opt_price = opt_tick[opt]['lastPrice']
# bsm_iv_val = ContextInfo.bsm_iv('C', 3.5, strike_price, opt_price, 0.025, 30)
iv_data.append({
'code': opt,
'strike': strike_price,
'iv': realtime_iv
})
df_iv = pd.DataFrame(iv_data)
print("--- 隐含波动率数据 --- ")
print(df_iv.head())
# 3. 波动率套利信号判断示例(如判断波动率偏斜与均值回归)
mean_iv = df_iv['iv'].mean()
for idx, row in df_iv.iterrows():
# 当某行权价的 IV 异常高于均值2个标准差时,卖出高估期权
if row['iv'] > mean_iv + 2 * df_iv['iv'].std():
print(f"发现IV高估信号: {row['code']}, 行权价: {row['strike']}, IV: {row['iv']}")
# 可使用 passorder 进行卖出开仓套利操作
# passorder(52, 1101, ContextInfo.accid, row['code'], 5, -1, 1, ContextInfo)
ContextInfo.subscribe_quote 获取 Tick 级实时行情,确保套利指令的及时触发与下单。