🚀 AI 一键生成 qmt 策略代码

QMT 期权策略:如何直接获取期权的实时隐含波动率?

qmt | 发布时间: 2025/12/20
以下内容由 EasyQuant 生成。

问题描述

有没有接口可以直接获取期权的隐含波动率数据?

解决方案

在 QMT (Quant Maker Trading) 平台中,确实提供了直接获取期权隐含波动率(Implied Volatility, IV)的接口,同时也提供了基于 BS 模型自行计算隐含波动率的函数。

以下是详细的接口说明和使用示例。

QMT 获取期权隐含波动率接口说明

1. 直接获取实时隐含波动率

QMT 提供了一个直接的接口 ContextInfo.get_option_iv,用于获取指定期权合约的实时隐含波动率。

函数原型

ContextInfo.get_option_iv(optioncode)

参数说明

  • optioncode: 字符串 (string),期权代码,例如 '10003280.SHO'

返回值

  • double: 返回该期权的实时隐含波动率数值。

2. 基于 BS 模型计算隐含波动率

如果您需要根据特定的市场参数(如自定义的无风险利率、标的价格等)来反推隐含波动率,可以使用 ContextInfo.bsm_iv 函数。该函数基于 Black-Scholes-Merton 模型计算欧式期权的隐含波动率。

函数原型

ContextInfo.bsm_iv(optionType, objectPrices, strikePrice, optionPrice, riskFree, days, dividend)

参数说明

  • optionType: 字符串,期权类型。认购为 'C',认沽为 'P'
  • objectPrices: 浮点数,期权标的当前价格。
  • strikePrice: 浮点数,期权行权价。
  • optionPrice: 浮点数,期权当前价格(权利金)。
  • riskFree: 浮点数,无风险收益率(例如 0.03 代表 3%)。
  • days: 整数,距离到期日的剩余天数。
  • dividend: 浮点数,标的分红率。

返回值

  • double: 计算得出的隐含波动率。

3. 代码示例

以下代码展示了如何在策略中调用这两个接口。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 设置账号(示例账号,实盘需替换)
    ContextInfo.accid = '6000000248'
    print("策略初始化完成")

def handlebar(ContextInfo):
    # 示例期权代码:上交所期权 10003280.SHO
    # 注意:请确保该合约在当前回测或实盘时间段内存在
    option_code = '10003280.SHO'
    
    # 1. 直接获取实时隐含波动率
    # 注意:此接口通常用于实盘或模拟盘获取实时行情快照中的IV
    realtime_iv = ContextInfo.get_option_iv(option_code)
    print(f"[{option_code}] 实时隐含波动率: {realtime_iv}")
    
    # 2. 使用 BS 模型计算隐含波动率 (示例参数)
    # 假设场景:
    # 标的价格: 3.51
    # 行权价: 3.5
    # 期权现价: 0.0725
    # 无风险利率: 3%
    # 剩余天数: 15天
    # 分红率: 0
    # 类型: 认购 (Call)
    
    calculated_iv = ContextInfo.bsm_iv('C', 3.51, 3.5, 0.0725, 0.03, 15, 0)
    print(f"[{option_code}] BS模型计算隐含波动率: {calculated_iv}")

    # 仅在最后一根K线运行,避免回测日志过多
    if not ContextInfo.is_last_bar():
        return

Q&A

Q: get_option_iv 接口在回测模式下能获取历史的隐含波动率吗?
A: 根据官方文档描述,get_option_iv 主要用于获取实时隐含波动率。在回测模式下,建议使用 bsm_iv 配合历史行情数据(标的价格、期权价格、剩余天数等)进行动态计算,或者检查是否有专门的历史因子数据支持。

Q: bsm_iv 计算时,剩余天数 days 如何获取?
A: 可以通过 ContextInfo.get_instrumentdetail(optioncode) 获取期权的到期日 (ExpireDate),然后结合当前策略运行的日期 (ContextInfo.barpos 对应的时间) 计算出剩余天数。

Q: 如果 get_option_iv 返回 0 或异常值怎么办?
A: 这通常意味着该时刻没有有效的行情数据或计算失败。在实盘策略中,应当对返回值进行有效性判断(例如判断是否大于 0),如果数据无效,可以考虑使用 bsm_iv 进行估算或跳过该时间点的交易。