3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在期权市场中,认购认沽比(Put/Call Ratio, P/C Ratio)与波动率偏斜(Volatility Skew)是评估市场情绪与资金博弈状态的核心情绪指标。通过 QMT (迅投量化交易系统) 提供的原生 Python API,开发者可以方便地提取期权链完整数据,实时计算全市场或特定标的的 P/C Ratio,从而构建高效的大盘择时策略。
认购认沽比 (P/C Ratio):
波动率偏斜 (Volatility Skew):
在 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 中按月合约提取 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)
ContextInfo.get_option_iv() 计算得到的波动率偏斜结合使用,能显著提高择时信号的胜率。get_market_data_ex 订阅 Level-2 快照数据,回测历史 P/C Ratio 的分位数变化,优化买卖阈值设置。