🚀 AI 一键生成 qmt 策略代码

如何使用 get_option_detail_data 获取行权价与合约单位?

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

问题描述

怎么查询期权合约的行权价、到期日和合约乘数信息?

解决方案

在 QMT 量化交易平台中,查询期权合约的行权价、到期日和合约乘数等详细信息,主要使用 ContextInfo.get_option_detail_data(optioncode) 接口。

该接口返回一个字典(dictionary),包含了指定期权品种的各项静态属性。

核心代码实现

以下是一个完整的 Python 策略示例,展示了如何获取并打印指定期权合约的行权价、到期日和合约乘数。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 在初始化中可以设置需要查询的期权代码
    # 示例代码:上交所期权,格式为 代码.市场 (如 10001506.SHO)
    ContextInfo.option_code = '10001506.SHO' 

def handlebar(ContextInfo):
    # 限制只在最后一根K线运行,避免历史回测时重复打印
    if not ContextInfo.is_last_bar():
        return

    # 调用接口获取期权详细信息
    # 参数为期权代码,如果传空字符串 '',则默认为当前主图的期权品种
    detail_data = ContextInfo.get_option_detail_data(ContextInfo.option_code)

    if detail_data:
        # 1. 获取行权价 (Key: OptExercisePrice)
        strike_price = detail_data.get('OptExercisePrice')
        
        # 2. 获取到期日 (Key: ExpireDate)
        expire_date = detail_data.get('ExpireDate')
        
        # 3. 获取合约乘数 (Key: VolumeMultiple)
        multiplier = detail_data.get('VolumeMultiple')
        
        # 打印结果
        print(f"合约代码: {ContextInfo.option_code}")
        print(f"行权价: {strike_price}")
        print(f"到期日: {expire_date}")
        print(f"合约乘数: {multiplier}")
        
        # 打印完整字典以查看其他可用字段
        # print("完整信息:", detail_data)
    else:
        print(f"未找到合约 {ContextInfo.option_code} 的详细信息")

关键字段说明

调用 ContextInfo.get_option_detail_data(optioncode) 返回的字典中,关键字段对应的含义如下:

字段 Key 含义 说明
OptExercisePrice 行权价 期权的执行价格
ExpireDate 到期日 期权合约的到期日期,格式通常为 YYYYMMDD
VolumeMultiple 合约乘数 每张合约对应的标的证券数量(如ETF期权通常为10000)
OptUndlCode 标的证券代码 该期权对应的标的资产代码(如 510050)
optType 期权类型 返回 'CALL' (认购) 或 'PUT' (认沽)
OpenDate 上市日期 合约开始交易的日期

注意事项

  1. 代码格式:期权代码必须包含市场后缀。例如上交所期权后缀为 .SHO(如 10001506.SHO),深交所期权后缀为 .SZO
  2. 数据补充:如果是回测历史过期的期权合约,请确保在“数据管理”中下载了对应的过期合约列表和历史数据。
  3. 主图获取:如果函数参数传入空字符串 '',系统会尝试获取当前策略编辑器主图所选品种的详细信息。

Q&A

Q: 如何获取期权对应的标的资产代码?
A: 在 get_option_detail_data 返回的字典中,使用 key OptUndlCode 获取标的代码,使用 OptUndlMarket 获取标的市场。

Q: 如何判断一个期权是认购(Call)还是认沽(Put)?
A: 返回的字典中包含 optType 字段,其值为 'CALL' 代表认购期权,'PUT' 代表认沽期权。

Q: 除了静态数据,如何获取期权的实时隐含波动率?
A: 可以使用 ContextInfo.get_option_iv(optioncode) 接口来获取指定期权品种的实时隐含波动率。