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

qmt 期权量化:基于认购认沽比 (P/C Ratio) 与波动率偏斜的择时策略实现指南

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

问题描述

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

Title: qmt 期权量化:基于认购认沽比 (P/C Ratio) 与波动率偏斜的择时策略

Question: 如何通过 qmt API 提取期权链数据并计算市场认购认沽比(P/C Ratio)来进行大盘择时?

解决方案

qmt 期权量化:基于认购认沽比 (P/C Ratio) 与波动率偏斜的择时策略

在期权市场中,认购认沽比(Put/Call Ratio, P/C Ratio)与波动率偏斜(Volatility Skew)是评估市场情绪与资金博弈状态的核心情绪指标。通过 QMT (迅投量化交易系统) 提供的原生 Python API,开发者可以方便地提取期权链完整数据,实时计算全市场或特定标的的 P/C Ratio,从而构建高效的大盘择时策略。


一、核心原理与策略逻辑

  1. 认购认沽比 (P/C Ratio)

    • 成交量 P/C Ratio = 认沽期权总成交量 / 认购期权总成交量
    • 持仓量 P/C Ratio = 认沽期权总持仓量 / 认购期权总持仓量
    • 择时逻辑:当 P/C Ratio 处于历史极高位时,表明市场情绪过度悲观,往往预示着底部临近(反向指标);当 P/C Ratio 处于极低位时,表明市场情绪盲目乐观,风险积聚。
  2. 波动率偏斜 (Volatility Skew)

    • 通过获取虚值认沽期权与认购期权的隐含波动率(IV)差异,识别市场尾部风险偏好。

二、qmt 相关 API 接口说明

在 QMT 中,构建期权策略核心依赖以下 API 函数:

  • ContextInfo.get_option_list(undl_code, dedate, opttype, isavailable): 获取指定标的与到期月的期权合约列表。
  • ContextInfo.get_full_tick(stock_code): 获取最新分笔行情,包含最新价、成交量、持仓量(openInt)等。
  • ContextInfo.get_option_iv(optioncode): 获取期权实时隐含波动率。
  • passorder(...): 执行交易下单。

三、qmt 策略完整源码示例

以下策略展示了如何在 QMT 中按月合约提取 50ETF 期权链,实时计算持仓量 P/C Ratio 并进行买卖信号判定:

#encoding:gbk
import numpy as np

def init(ContextInfo):
    # 1. 设定标的与交易参数
    ContextInfo.target_code = '510300.SH' # 沪深300ETF
    ContextInfo.set_universe([ContextInfo.target_code])
    ContextInfo.account = '6000000058'
    ContextInfo.set_account(ContextInfo.account)
    
    # 2. 策略全局变量
    ContextInfo.pc_ratio_threshold_high = 1.2 # 高于1.2判定为超卖
    ContextInfo.pc_ratio_threshold_low = 0.6  # 低于0.6判定为超买
    
    print("期权 P/C Ratio 择时策略初始化完成!")

def handlebar(ContextInfo):
    if not ContextInfo.is_last_bar():
        return
        
    # 1. 获取当前近月期权合约列表
    # 假设当前月份为 202312,实际应用中可动态生成 YYYYMM 格式字符串
    near_month = '202312' 
    call_options = ContextInfo.get_option_list(ContextInfo.target_code, near_month, 'CALL', True)
    put_options = ContextInfo.get_option_list(ContextInfo.target_code, near_month, 'PUT', True)
    
    if not call_options or not put_options:
        print("未能获取到期权链列表数据")
        return
    
    # 2. 获取期权链行情数据
    all_options = call_options + put_options
    tick_data = ContextInfo.get_full_tick(all_options)
    
    # 3. 计算认购与认沽期权的总持仓量 (openInt)
    total_call_open_int = sum([tick_data[code]['openInt'] for code in call_options if code in tick_data])
    total_put_open_int = sum([tick_data[code]['openInt'] for code in put_options if code in tick_data])
    
    if total_call_open_int == 0:
        return
        
    # 4. 计算持仓量 P/C Ratio
    pc_ratio = total_put_open_int / float(total_call_open_int)
    print(f"当前期权链持仓量 P/C Ratio: {pc_ratio:.4f}")
    
    # 5. 产生择时信号并执行策略交易(此处以标的买卖为例)
    if pc_ratio > ContextInfo.pc_ratio_threshold_high:
        print("P/C Ratio 处于极高位,市场过度悲观,触发买入信号!")
        # 股票买入: 23, 单股单账号股数下单: 1101, 最新价: 5
        passorder(23, 1101, ContextInfo.account, ContextInfo.target_code, 5, -1, 1000, ContextInfo)
        
    elif pc_ratio < ContextInfo.pc_ratio_threshold_low:
        print("P/C Ratio 处于极低位,市场过度乐观,触发平仓/卖出信号!")
        # 股票卖出: 24, 单股单账号股数下单: 1101, 最新价: 5
        passorder(24, 1101, ContextInfo.account, ContextInfo.target_code, 5, -1, 1000, ContextInfo)

四、总结与拓展

  1. 多维度结合:在实际交易中,建议将成交量 P/C Ratio、持仓量 P/C Ratio 与 ContextInfo.get_option_iv() 计算得到的波动率偏斜结合使用,能显著提高择时信号的胜率。
  2. 历史回测:可结合 QMT 的 get_market_data_ex 订阅 Level-2 快照数据,回测历史 P/C Ratio 的分位数变化,优化买卖阈值设置。