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

qmt 期权 API 教程:如何获取 50ETF 或 300ETF 对应的全部期权合约列表?

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

问题描述

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

Title: qmt 期权 API 教程:获取标的对应的完整期权链列表

Question: qmt 如何获取 50ETF 或 300ETF 对应的全部期权合约列表?

解决方案

qmt 期权 API 教程:获取标的对应的完整期权链列表

在 QMT(迅投量化交易系统)中,编写期权套利或方向性交易策略时,第一步通常是获取特定标的(如华夏上证50ETF 510050.SH 或 华泰柏瑞沪深300ETF 510300.SH)对应的完整期权链数据。

本文将详细介绍通过 QMT Python API 获取期权合约列表的两种核心 API 方法:ContextInfo.get_option_listContextInfo.get_option_undl_data


一、核心 API 介绍

1. ContextInfo.get_option_list

适用于精准筛选特定到期月份、类型(认购/认沽)或可交易状态的期权合约列表。

API 语法

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

参数说明

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

返回值

返回包含符合条件的期权代码列表(list)。


2. ContextInfo.get_option_undl_data

适用于快速查询指定标的绑定的所有期权合约品种。

API 语法

ContextInfo.get_option_undl_data(undl_code_ref)

参数说明

  • undl_code_ref (str): 期权标的代码,如 '510300.SH'。如果传入空字符串 '',则返回全市场所有期权标的对应的品种列表。

返回值

  • 指定标时返回 list(期权合约代码列表)。
  • 传空字符串时返回 dict(以标的代码为键的字典)。

二、完整 Python 策略代码示例

以下示例展示了如何在 QMT 模型中获取 50ETF 和 300ETF 的全部期权链,并筛选出认购与认沽合约:

#encoding:gbk

def init(ContextInfo):
    # 设定标的代码
    target_etf = '510300.SH'  # 沪深300ETF
    
    print(f"=== 开始获取 {target_etf} 的期权链列表 ===")
    
    # 方法一:使用 get_option_undl_data 获取该标的下的所有期权合约
    all_options = ContextInfo.get_option_undl_data(target_etf)
    print(f"{target_etf} 关联的期权合约总数: {len(all_options)}")
    if all_options:
        print(f"前5个合约代码示例: {all_options[:5]}")

def handlebar(ContextInfo):
    # 仅在最后一根 Bar 上执行一次演示
    if not ContextInfo.is_last_bar():
        return
    
    target_etf = '510050.SH'  # 上证50ETF
    current_date = '20231025' # 示例交易日
    
    # 方法二:获取指定交易日可交易的看涨期权(CALL)与看跌期权(PUT)
    call_options = ContextInfo.get_option_list(target_etf, current_date, "CALL", True)
    put_options = ContextInfo.get_option_list(target_etf, current_date, "PUT", True)
    
    print(f"\n在日期 {current_date} 下:")
    print(f"50ETF 可交易认购期权(CALL)数量: {len(call_options)}")
    print(f"50ETF 可交易认沽期权(PUT)数量: {len(put_options)}")

三、注意事项与使用建议

  1. 数据下载:在获取历史期权合约或回测期权策略前,请确保已在 QMT 客户端的 【数据管理】 中下载了【过期合约列表】及对应的历史行情数据。
  2. 代码后缀:QMT 中上交所期权的后缀通常为 .SHO(如 '10001506.SHO'),深交所期权后缀为 .SZO,在进行委托下单(如 passorder)时需保持代码格式一致。
  3. 获取详细信息:拿期权代码列表后,可结合 ContextInfo.get_option_detail_data(optioncode) 进一步查询行权价(OptExercisePrice)、到期日(ExpireDate)及合约乘数(VolumeMultiple)等关键要素。