🚀 AI 一键生成 qmt 策略代码
立即体验

如何使用 QMT API 绘制期权隐含波动率曲面并寻找套利机会?

qmt | 发布时间: 2026/7/31
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: QMT 期权波动率曲面构建与套利策略 Python 实现

Question: 如何使用 QMT API 绘制期权隐含波动率曲面并寻找套利机会?

解决方案

QMT 期权波动率曲面构建与套利策略 Python 实现

在期权量化交易中,隐含波动率(Implied Volatility, IV)曲面是评估期权价格偏差、寻找跨期与跨行权价套利机会的核心工具。结合国信 QMT 平台的 Python API,我们可以高效获取期权链数据、调用内置函数计算 IV 并绘制三维波动率曲面。


一、核心 API 接口解析

在 QMT 中,构建期权波动率曲面主要依赖以下核心 API:

  1. ContextInfo.get_option_list(undl_code, dedate, opttype, isavailable):获取指定标的(如 510300.SH)在特定到期月的期权合约列表。
  2. ContextInfo.get_option_detail_data(optioncode):获取期权合约的行权价(OptExercisePrice)、到期日(ExpireDate)及标的代码等信息。
  3. ContextInfo.get_option_iv(optioncode):直接获取期权实时隐含波动率。
  4. 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)

三、实践建议与套利逻辑

  1. 波动率偏斜(Volatility Skew)套利:买入低估 IV 的虚值期权,同时卖出高估 IV 的虚值期权,构建 Delta 中性组合。
  2. 日历跨期套利(Calendar Spread):利用近月与远月合约在隐含波动率上的结构性差异,买入低 IV 远月期权、卖出高 IV 近月期权。
  3. 执行效率:在实盘运行中,建议开启 ContextInfo.subscribe_quote 获取 Tick 级实时行情,确保套利指令的及时触发与下单。