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

如何在 QMT 中获取指定月份到期的 ETF 认购期权合约列表?(附 Python 源码)

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: QMT 期权交易 API:get_option_list 筛选特定到期月与行权价认购合约

Question: 如何在 QMT 中获取指定月份到期的 ETF 认购期权合约列表?

解决方案

在 QMT 量化平台中,想要获取特定标的(如 510300.SH)在指定月份到期且可交易的认购期权合约列表,可以使用 ContextInfo.get_option_list() API 接口。

1. API 接口详解:get_option_list()

用法说明

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

参数说明

  • undl_code (str): 期权标的代码,如 '510300.SH'
  • dedate (str): 期权到期月或交易日期。
    • 'YYYYMM' 格式:获取对应到期月份的期权合约(例如 '202101')。
    • 'YYYYMMDD' 格式:获取当前指定日期交易的期权合约。
  • opttype (str): 期权类型。取值包括 'CALL'(认购)、'PUT'(认沽);留空则同时获取认购和认沽。
  • isavailable (bool): 是否仅限可交易。
    • dedate'YYYYMMDD' 格式时,True 表示仅返回当前可用可交易合约,False 表示包含已退市/历史合约。

返回值

  • 返回一个包含期权合约代码的列表(list),例如 ['10003280.SHO', ...]

2. 示例代码

以下代码展示了如何在 inithandlebar 函数中筛选上证 50ETF 或 300ETF 的指定月份认购期权列表:

#encoding:gbk

def init(ContextInfo):
    # 设定交易标的为 510300.SH
    ContextInfo.target = '510300.SH'
    print("策略初始化完成")

def handlebar(ContextInfo):
    # 仅在最后一根 Bar 执行,避免重复打印
    if not ContextInfo.is_last_bar():
        return
    
    # 示例1:获取到期月份为 2021年1月 的 510300ETF 认购期权(CALL)合约列表
    option_call_list = ContextInfo.get_option_list('510300.SH', '202101', 'CALL')
    print("202101 到期认购期权列表:", option_call_list)
    
    # 示例2:获取特定交易日(20210104)当天可交易的认购期权合约
    active_call_list = ContextInfo.get_option_list('510300.SH', '20210104', 'CALL', True)
    print("20210104 可交易认购期权列表:", active_call_list)
    
    # 遍历获取某个期权合约的详细信息(行权价、到期日等)
    if option_call_list:
        sample_code = option_call_list[0]
        detail = ContextInfo.get_option_detail_data(sample_code)
        print(f"合约 {sample_code} 行权价:", detail.get('OptExercisePrice'))
        print(f"合约 {sample_code} 到期日:", detail.get('ExpireDate'))

3. 注意事项

  1. 历史期权数据下载:如果需要获取已退市或历史指定日期的期权列表,请确保在客户端的【数据管理】中补充下载了对应的【过期合约列表】。
  2. 配合行情与交易接口:获取到期权合约代码列表后,可结合 ContextInfo.get_full_tick()ContextInfo.get_market_data_ex() 获取期权行情,并使用 passorder 函数(opType 设置为 50 买入开仓、52 卖出开仓等)完成期权交易。