🚀 AI 一键生成 qmt 策略代码

如何使用 QMT Python API 获取期权链数据并进行交易?

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

问题描述

如何获取某个ETF对应的所有看涨期权合约列表?

解决方案

在 QMT 中,要获取某个 ETF 对应的所有看涨期权合约列表,可以使用 ContextInfo.get_option_list 函数。

函数说明

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

  • undl_code: 标的 ETF 代码,例如 '510050.SH' (上证50ETF) 或 '510300.SH' (沪深300ETF)。
  • dedate: 日期字符串。
    • 如果填 "YYYYMMDD" (如 "20231027"),则返回在该日期可交易的所有期权合约(包含不同到期月份)。
    • 如果填 "YYYYMM" (如 "202310"),则仅返回该月份到期的期权合约。
  • opttype: 期权类型。获取看涨期权需填 "CALL",看跌期权填 "PUT",为空则全部获取。
  • isavailable: 布尔值。当 dedate 为具体日期时,True 表示仅返回当日可交易的合约,False 可能包含已退市或未上市的合约(通常填 True)。

代码示例

以下代码展示了如何在策略运行过程中(回测或实盘),获取当前日期对应的某 ETF 所有看涨期权合约列表:

# -*- coding: gbk -*-

def init(ContextInfo):
    # 设置标的ETF,例如华夏上证50ETF
    ContextInfo.etf_code = '510050.SH'

def handlebar(ContextInfo):
    # 获取当前K线的时间戳
    timetag = ContextInfo.get_bar_timetag(ContextInfo.barpos)
    # 将时间戳转换为 YYYYMMDD 格式的字符串
    current_date = timetag_to_datetime(timetag, '%Y%m%d')
    
    # 获取该ETF在当前日期可交易的所有看涨期权(CALL)
    # 参数说明:标的代码, 当前日期, 期权类型"CALL", 是否可用True
    call_options = ContextInfo.get_option_list(ContextInfo.etf_code, current_date, "CALL", True)
    
    # 打印结果
    print(f"日期: {current_date}, 标的: {ContextInfo.etf_code}")
    print(f"看涨期权数量: {len(call_options)}")
    print(f"合约列表样例: {call_options[:5]}") # 仅打印前5个作为示例
    
    # 如果需要获取特定月份到期的看涨期权(例如2023年12月到期)
    # specific_month_calls = ContextInfo.get_option_list(ContextInfo.etf_code, "202312", "CALL", True)

注意事项

  1. 数据补充:在回测模式下使用此功能,请确保已在“数据管理”中下载了对应标的和期权的历史合约列表及行情数据。
  2. 实盘与回测:上述代码中的 current_date 是动态获取的,因此既适用于历史回测(获取历史某天的期权链),也适用于实盘(获取当天的期权链)。