3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在期权交易与风险管理中,隐含波动率(Implied Volatility, IV) 是最核心的指标之一。QMT 平台提供了基于 Black-Scholes-Merton (BSM) 模型的内置函数 ContextInfo.bsm_iv(),让开发者能够非常高效地实时计算期权隐含波动率。
ContextInfo.bsm_iv(optionType, objectPrices, strikePrice, optionPrice, riskFree, days, dividend)
'C' 表示认购期权(Call),'P' 表示认沽期权(Put)。0.03 表示 3%)。0)。以下策略展示了如何在 QMT 中获取期权实时行情、计算剩余天数,并通过 ContextInfo.bsm_iv 实时计算隐含波动率。
#coding:gbk
import time
import datetime
def init(ContextInfo):
# 设定订阅的期权代码与标的代码
ContextInfo.option_code = '10003280.SHO' # 示例期权代码
ContextInfo.target_code = '510300.SH' # 标的 300ETF
ContextInfo.set_universe([ContextInfo.option_code, ContextInfo.target_code])
# 获取期权合约详细信息(如行权价、到期日、期权类型等)
detail = ContextInfo.get_option_detail_data(ContextInfo.option_code)
ContextInfo.strike_price = detail['OptExercisePrice']
ContextInfo.expire_date = str(detail['ExpireDate']) # 格式如 '20231225'
ContextInfo.option_type = 'C' if detail['optType'] == 'CALL' else 'P'
print(f"初始化期权: {ContextInfo.option_code}, 行权价: {ContextInfo.strike_price}, 类型: {ContextInfo.option_type}")
def handlebar(ContextInfo):
if not ContextInfo.is_last_bar():
return
# 1. 获取标的与期权的最新价格
target_tick = ContextInfo.get_full_tick([ContextInfo.target_code])
option_tick = ContextInfo.get_full_tick([ContextInfo.option_code])
if ContextInfo.target_code not in target_tick or ContextInfo.option_code not in option_tick:
return
target_price = target_tick[ContextInfo.target_code]['lastPrice']
option_price = option_tick[ContextInfo.option_code]['lastPrice']
# 2. 计算剩余天数
today = datetime.datetime.now()
expire_dt = datetime.datetime.strptime(ContextInfo.expire_date, '%Y%m%d')
days = (expire_dt - today).days + 1
if days <= 0:
days = 0.5 # 避免到期日或负数计算异常
# 3. 设置参数
risk_free = 0.025 # 无风险利率 2.5%
dividend = 0.0 # 股息率
# 4. 调用 bsm_iv 计算隐含波动率
iv = ContextInfo.bsm_iv(
ContextInfo.option_type,
target_price,
ContextInfo.strike_price,
option_price,
risk_free,
days,
dividend
)
# 5. 输出或绘图
print(f"[行情更新] 标的价格: {target_price:.4f}, 期权现价: {option_price:.4f}, 剩余天数: {days}天")
print(f"计算所得隐含波动率 (IV): {iv * 100:.2f}%")
# 在图表上画出隐含波动率曲线
ContextInfo.paint('Implied_Volatility', iv * 100, -1, 0, 'red')
nan,策略中需做好健壮性判断。days 参数支持浮点数,盘中交易时可以换算为更精准的 剩余小时/24。