🚀 AI 一键生成 qmt 策略代码

QMT 期权编程:使用 `get_option_detail_data` 获取合约细节

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

问题描述

如何获取期权合约的行权价和到期日?

解决方案

在 QMT 量化交易平台中,获取期权合约的行权价和到期日主要通过 ContextInfo.get_option_detail_data 函数来实现。该函数返回一个包含期权详细信息的字典。

以下是具体的实现方法和代码示例。

核心函数说明

函数名ContextInfo.get_option_detail_data(optioncode)

  • 参数optioncode (string),期权代码,例如 '10001506.SHO'。如果传入空字符串 '',则默认为当前主图显示的期权品种。
  • 返回值:一个字典 (dict),包含该期权的各项详细属性。

关键字段

  • 行权价:字典中的 key 为 'OptExercisePrice'
  • 到期日:字典中的 key 为 'ExpireDate'

代码实现示例

以下代码展示了如何在策略中获取指定期权合约的行权价和到期日,并打印输出。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 在初始化中可以不做具体操作,或者设置需要查询的期权代码
    pass

def handlebar(ContextInfo):
    # 示例期权代码 (上交所期权)
    # 请确保该合约在当前回测或实盘的时间段内是存在的
    option_code = '10001506.SHO'
    
    # 获取期权详细信息
    # 如果想获取当前主图品种的信息,可以使用 ContextInfo.get_option_detail_data('')
    option_detail = ContextInfo.get_option_detail_data(option_code)
    
    # 检查是否成功获取到数据 (返回非空字典)
    if option_detail:
        # 获取行权价
        strike_price = option_detail.get('OptExercisePrice')
        
        # 获取到期日 (格式通常为 YYYYMMDD 的整数或字符串,视具体数据源而定)
        expire_date = option_detail.get('ExpireDate')
        
        # 获取期权名称 (方便核对)
        instrument_id = option_detail.get('InstrumentID')
        
        print(f"合约代码: {instrument_id}")
        print(f"行权价: {strike_price}")
        print(f"到期日: {expire_date}")
        
        # 打印完整字典以查看其他可用字段
        # print(option_detail)
    else:
        print(f"未能获取到合约 {option_code} 的详细信息")

    # 为了避免在回测中每个tick都打印,可以加上限制只在最后一根bar打印,或者使用 return 结束
    # if not ContextInfo.is_last_bar():
    #     return

补充说明

除了行权价和到期日,get_option_detail_data 返回的字典中还包含其他重要信息,例如:

  • OptUndlCode: 标的证券代码
  • optType: 期权类型 ('CALL' 或 'PUT')
  • OpenDate: 上市日期
  • OptUnit: 合约单位

Q&A

Q: 如果我只知道标的股票代码(如 510300.SH),如何获取它对应的所有期权合约列表?
A: 可以使用 ContextInfo.get_option_list(undl_code, dedate, opttype, isavailable) 函数。例如 ContextInfo.get_option_list('510300.SH', '202312', 'CALL') 可以获取 2023年12月到期的所有认购期权合约代码列表。

Q: ExpireDate 返回的数据格式是什么样的?
A: 通常返回的是一个整数(int),格式为 YYYYMMDD(例如 20231227)。在使用时如果需要进行日期计算,建议先将其转换为字符串或 datetime 对象。

Q: 这个函数支持回测模式吗?
A: 支持。在回测模式下,该函数会返回对应历史时刻该合约的静态属性信息。注意获取历史已退市的期权合约信息时,需要确保本地已下载了相应的历史合约列表数据。