3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在期权量化交易中,**隐含波动率(Implied Volatility, IV)**是评估期权价格贵贱及市场风险预期的核心指标。QMT(迅投量化系统)提供了内置函数 ContextInfo.bsm_iv(),让开发者可以基于 Black-Scholes-Merton (BSM) 模型轻松反推期权的隐含波动率。
ContextInfo.bsm_iv(optionType, objectPrices, strikePrice, optionPrice, riskFree, days, dividend)
该函数通过传入期权类型、标的价格、行权价、期权现价、无风险利率、剩余天数及标的分红率,反推出使 BSM 理论价等于期权现价的隐含波动率。
| 参数名 | 类型 | 说明 |
|---|---|---|
optionType |
str |
期权类型:'C' 代表认购期权(Call),'P' 代表认沽期权(Put) |
objectPrices |
float |
期权标的资产的当前价格 |
strikePrice |
float |
期权的行权价格 |
optionPrice |
float |
期权的当前市场价格(现价) |
riskFree |
float |
年化无风险收益率(如 0.03 表示 3%) |
days |
int / float |
到期剩余天数 |
dividend |
float |
标的资产的年化分红率(可选/默认常填 0) |
double 类型的隐含波动率数值(例如返回 0.23 表示 23% 的隐含波动率)。如果参数非法,则返回 nan。以下是一个完整的 QMT 策略示例,演示如何在 handlebar 中获取期权的实时行情并计算其隐含波动率:
#coding:gbk
def init(ContextInfo):
# 设定交易或监控的期权合约(以 50ETF 期权为例)
ContextInfo.option_code = '10003280.SHO'
# 设定标的资产代码
ContextInfo.target_code = '510300.SH'
# 订阅行情数据
ContextInfo.set_universe([ContextInfo.option_code, ContextInfo.target_code])
print("期权 IV 计算策略初始化完成")
def handlebar(ContextInfo):
# 仅在最新 Bar 运行以提高效率
if not ContextInfo.is_last_bar():
return
# 1. 获取期权详细信息(获取行权价、期权类型、到期日等)
opt_detail = ContextInfo.get_option_detail_data(ContextInfo.option_code)
if not opt_detail:
print("未能获取到期权详情")
return
strike_price = opt_detail['OptExercisePrice'] # 行权价
opt_type_str = opt_detail['optType'] # 'CALL' 或 'PUT'
opt_type = 'C' if opt_type_str == 'CALL' else 'P'
# 2. 获取标的价格与期权现价
target_tick = ContextInfo.get_full_tick([ContextInfo.target_code])
option_tick = ContextInfo.get_full_tick([ContextInfo.option_code])
target_price = target_tick[ContextInfo.target_code]['lastPrice']
option_price = option_tick[ContextInfo.option_code]['lastPrice']
# 3. 设置计算参数
risk_free = 0.025 # 无风险利率 2.5%
days = 15 # 假设距离到期日剩余 15 天
dividend = 0.0 # 分红率 0%
# 4. 调用 bsm_iv 计算隐含波动率
iv = ContextInfo.bsm_iv(
opt_type,
target_price,
strike_price,
option_price,
risk_free,
days,
dividend
)
print(f"期权代码: {ContextInfo.option_code}")
print(f"标的价格: {target_price}, 行权价: {strike_price}, 期权现价: {option_price}")
print(f"计算得到的隐含波动率 (IV): {iv:.4f}")
get_full_tick 或 get_market_data 成功获取到最新的标的价格与期权成交价/买卖盘价格。bsm_iv 可能计算出异常值或 nan,在策略中建议做好数值有效性校验。ContextInfo.get_option_iv(optioncode) 获取行情服务器直接推送的实时波动率进行对比校验。