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

QMT 平台如何快速获取 50ETF/300ETF 完整期权链?(附 Python 源码)

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

问题描述



Title: qmt 期权套利教程:快速获取标的资产完整期权链的方法

Question: 在 qmt 策略中,如何获取某个 50ETF 或 300ETF 标的对应的所有期权合约代码?

解决方案

QMT 期权套利教程:快速获取标的资产完整期权链的方法

在进行期权波动率套利、期权对冲或无风险套利策略开发时,快速且准确地获取标的资产(如 50ETF 或 300ETF)的完整期权链是第一步。QMT(Quantitative Trading System)平台提供了强大的期权数据接口,支持通过标的代码一键获取其对应的所有期权合约。

本文将详细介绍 QMT 中获取期权链的两种核心方法,并提供完整的 Python 策略源码。


一、 QMT 获取期权链的核心接口

QMT 提供了两个主要接口来获取期权合约:

1. 获取指定标的对应的所有期权列表:ContextInfo.get_option_undl_data()

  • 作用:输入期权标的代码(如 510050.SH510300.SH),直接返回该标的对应的所有期权合约代码列表。
  • 用法ContextInfo.get_option_undl_data(undl_code_ref)
  • 示例ContextInfo.get_option_undl_data('510300.SH')

2. 获取精细化筛选的期权列表:ContextInfo.get_option_list()

  • 作用:根据到期月份、认购/认沽类型、是否可交易等条件,筛选特定的期权合约。
  • 用法ContextInfo.get_option_list(undl_code, dedate, opttype, isavailable)
  • 参数说明
    • undl_code:标的代码,如 '510300.SH'
    • dedate:到期月份(格式如 '202101')或交易日期(格式如 '20210104')。
    • opttype:期权类型,可选 'CALL'(认购)或 'PUT'(认沽),为空时全部获取。
    • isavailable:是否可交易。当 dedate 为具体日期时生效,True 返回当前可用,False 返回当前和历史可用。

二、 完整 Python 策略源码示例

以下代码展示了如何在 QMT 策略的 init 初始化函数中,分别获取 300ETF(510300.SH 的完整期权链,以及筛选特定月份的认购期权。

#encoding:gbk

def init(ContextInfo):
    # 设定标的资产为 300ETF
    underlying_code = '510300.SH'
    
    print("====== 方法一:获取标的对应的完整期权链 ======")
    # 获取 300ETF 对应的所有期权合约
    all_options = ContextInfo.get_option_undl_data(underlying_code)
    print(f"标的 {underlying_code} 的期权合约总数: {len(all_options)}")
    if len(all_options) > 0:
        print("前5个期权合约示例:", all_options[:5])
        
    print("\n====== 方法二:获取特定到期月份的认购期权 ======")
    # 假设获取 2023年12月 到期的所有认购(CALL)期权
    # 注意:实际运行中请根据当前年份修改到期月份,如 '202312'
    target_month = '202312' 
    call_options = ContextInfo.get_option_list(underlying_code, target_month, 'CALL')
    print(f"{target_month} 到期的认购期权数量: {len(call_options)}")
    print("合约列表:", call_options)

def handlebar(ContextInfo):
    # 盘中驱动逻辑
    pass

三、 常见问题与注意事项

  1. 历史期权数据下载:如果您需要获取已经退市的历史期权合约,请务必提前在 QMT 客户端的 【数据管理】 中补充下载对应的过期合约列表及历史行情数据。
  2. 市场代码后缀:QMT 中上海证券交易所期权市场后缀为 .SHO(如 10003280.SHO),深圳证券交易所期权市场后缀为 .SZO。通过上述接口获取的代码已自动带上正确的市场后缀。
  3. 期权详细信息查询:获取到期权代码后,可以使用 ContextInfo.get_option_detail_data(optioncode) 接口进一步获取该期权合约的行权价、到期日、合约乘数等详细参数,以便进行套利边界计算。