🚀 AI 一键生成 qmt 策略代码

QMT 期权策略开发:使用 get_option_list 获取指定期权链数据

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

问题描述

如何获取某个ETF在指定到期月份的所有认购和认沽期权合约代码?

解决方案

在 QMT 中,获取指定 ETF 在特定到期月份的认购(Call)和认沽(Put)期权合约代码,主要使用 ContextInfo.get_option_list 接口。

核心函数说明

ContextInfo.get_option_list(undl_code, dedate, opttype, isavailable)

  • undl_code: 期权标的代码,例如上证50ETF为 '510050.SH'
  • dedate: 期权到期月份,格式为 "YYYYMM"(例如 "202312")。
  • opttype: 期权类型。传 "CALL" 获取认购,传 "PUT" 获取认沽,传 "" (空字符串) 则同时获取两者。
  • isavailable: 当 dedate 为月份格式时,此参数通常可忽略或传默认值。

策略代码示例

以下代码展示了如何获取 华夏上证50ETF (510050.SH)2023年12月 到期的所有期权合约代码。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 1. 设置标的物代码 (例如: 50ETF)
    underlying_code = '510050.SH'
    
    # 2. 设置到期月份 (格式: YYYYMM)
    # 注意:请确保该月份有对应的期权合约数据,如果是回测,需确保在回测时间范围内
    target_month = '202312'
    
    # 3. 获取所有合约 (认购 + 认沽)
    # 第三个参数传 "" 代表获取所有类型
    all_options = ContextInfo.get_option_list(underlying_code, target_month, "")
    
    # 4. 分别获取认购和认沽 (可选)
    call_options = ContextInfo.get_option_list(underlying_code, target_month, "CALL")
    put_options = ContextInfo.get_option_list(underlying_code, target_month, "PUT")
    
    # 打印结果
    print(f"标的: {underlying_code}, 到期月份: {target_month}")
    print("=" * 30)
    
    print(f"全部合约数量: {len(all_options)}")
    print(f"全部合约列表: {all_options}")
    print("-" * 30)
    
    print(f"认购合约(Call)数量: {len(call_options)}")
    print(f"认购合约列表: {call_options}")
    print("-" * 30)
    
    print(f"认沽合约(Put)数量: {len(put_options)}")
    print(f"认沽合约列表: {put_options}")

def handlebar(ContextInfo):
    # 该策略主要在 init 中演示数据获取,handlebar 可留空
    pass

注意事项

  1. 数据下载:如果是回测历史月份的期权,请务必在 QMT 客户端的【数据管理】中下载对应时间段的期权合约列表期权行情数据
  2. 格式要求dedate 参数必须是字符串格式。如果是获取某个月份的所有合约,格式必须是 "YYYYMM";如果是获取某一天正在交易的合约,格式则是 "YYYYMMDD"
  3. 标的代码:标的代码需要包含后缀,如 .SH.SZ

Q&A

Q: 如何获取当前交易日所有可交易的期权合约,而不是指定月份的?
A: 将 dedate 参数设置为当前日期(格式 "YYYYMMDD"),并将 isavailable 参数设置为 True。例如:ContextInfo.get_option_list('510050.SH', '20231201', "", True)

Q: 获取到的期权代码列表包含后缀吗?
A: 是的,返回的列表中包含市场后缀,例如 '10005001.SHO'(上海证券交易所期权)。

Q: 如何进一步获取这些期权合约的行权价和到期日详细信息?
A: 获取到代码列表后,可以使用 ContextInfo.get_instrumentdetail(option_code)ContextInfo.get_option_detail_data(option_code) 来查询单个合约的具体信息(如行权价、合约乘数等)。