3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在期权量化交易中,**隐含波动率(Implied Volatility, IV)**是度量期权价格贵贱的核心指标。QMT 平台提供了原生高效接口 ContextInfo.get_option_iv(),让投资者能够在盘中实时获取指定期权合约的隐含波动率,快速构建波动率曲面及波动率套利策略。
ContextInfo.get_option_iv()ContextInfo.get_option_iv(optioncode)optioncode (str):期权合约代码,如 '10003280.SHO'(上交所期权)或包含市场后缀的合约代码。double:实时隐含波动率数值(如 0.23 表示 23% 的年化隐含波动率)。#encoding:gbk
def init(ContextInfo):
ContextInfo.option_code = '10003280.SHO'
def handlebar(ContextInfo):
# 仅在最后一根 K 线/最新 tick 打印
if ContextInfo.is_last_bar():
iv = ContextInfo.get_option_iv(ContextInfo.option_code)
print(f"合约 {ContextInfo.option_code} 最新实时 IV: {iv:.4f}")
除了原生获取实时 IV,QMT 还提供了 Black-Scholes-Merton (BSM) 模型相关 API,方便进行定价与 IV 的逆向校验:
ContextInfo.bsm_price(optionType, objectPrices, strikePrice, riskFree, sigma, days, dividend)ContextInfo.bsm_iv(optionType, objectPrices, strikePrice, optionPrice, riskFree, days, dividend)结合原生 get_option_iv() 与 BSM 模型,可以精准计算期权偏离度(Mispricing)。
以下策略展示了如何在 QMT 中获取 510300ETF 期权的实时 IV,并根据波动率偏离度发出交易信号。
#encoding:gbk
import numpy as np
def init(ContextInfo):
ContextInfo.set_account('6000000058')
# 设定标的及关联期权
ContextInfo.target_option = '10003280.SHO'
ContextInfo.set_universe([ContextInfo.target_option])
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 1. 获取实时隐含波动率
realtime_iv = ContextInfo.get_option_iv(ContextInfo.target_option)
# 2. 获取期权详细信息
detail = ContextInfo.get_option_detail_data(ContextInfo.target_option)
if not detail:
return
strike_price = detail['OptExercisePrice'] # 行权价
opt_type = 'C' if detail['optType'] == 'CALL' else 'P' # 认购/认沽
# 3. 计算历史波动率做对比(假设为 0.20)
historical_iv = detail.get('OptUndlHistoryRate', 0.20)
# 4. 波动率套利逻辑:当 IV 显著高于历史波动率时做空波动率(卖出开仓)
print(f"合约: {ContextInfo.target_option}, 实时IV: {realtime_iv:.4f}, 历史波动率: {historical_iv:.4f}")
if realtime_iv > historical_iv * 1.25:
print("信号:IV 偏高,执行卖出开仓策略(做空波动率)")
# 卖出开仓示例 (opType=52, orderType=1101)
# passorder(52, 1101, ContextInfo.accid, ContextInfo.target_option, 5, -1, 1, ContextInfo)
elif realtime_iv < historical_iv * 0.75:
print("信号:IV 偏低,执行买入开仓策略(做多波动率)")
# 买入开仓示例 (opType=50, orderType=1101)
# passorder(50, 1101, ContextInfo.accid, ContextInfo.target_option, 5, -1, 1, ContextInfo)
ContextInfo.subscribe_quote() 使用。ContextInfo.get_option_list() 动态筛选当月或近月交易活跃的期权合约列表。