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

QMT 历史数据提取:如何使用 ContextInfo.get_his_contract_list 获取已退市期权与期货合约?

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

问题描述

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

Title: QMT 历史数据提取:get_his_contract_list 获取已退市期权与期货合约

Question: 如何在 QMT 中获取中金所或上交所期权已过期的历史合约代码列表?

解决方案

QMT 历史数据提取:使用 get_his_contract_list 获取已退市期权与期货合约代码

在进行期权或期货历史策略回测(避免生存者偏差)及数据分析时,获取已过期/已退市的合约列表是至关重要的一步。QMT(迅投 Context Python API)提供了内置函数 ContextInfo.get_his_contract_list 来帮助开发者提取特定市场的历史过期合约。


1. 接口函数说明

ContextInfo.get_his_contract_list(market)

  • 功能释义:获取指定市场过期的历史合约代码列表。
  • 参数说明
    • market (string):市场简称代码。常见市场包含:
      • IF:中金所(股指期货、国债期货等)
      • SHO:上交所期权
      • SZO:深交所期权
      • SF:上期所
      • DF:大商所
      • ZF:郑商所
  • 返回值
    • list:包含过期合约代码(str)的列表。
  • 前置条件:需确保在客户端【数据管理】中下载补充了过期合约列表历史数据。

2. 示例代码:获取中金所与上交所期权过期合约

以下是在 QMT 策略脚本(如 handlebarinit)中调用该接口的完整示例:

#coding:gbk

def init(ContextInfo):
    pass

def handlebar(ContextInfo):
    # 仅在最后一根 Bar 上运行一次,避免重复打印
    if not ContextInfo.is_last_bar():
        return

    # 1. 获取中金所(IF)过期期货/期权合约列表
    cfinancial_his_contracts = ContextInfo.get_his_contract_list('IF')
    print(f"中金所历史过期合约数量: {len(cfinancial_his_contracts)}")
    if cfinancial_his_contracts:
        print("中金所部分历史合约示例:", cfinancial_his_contracts[:5])

    # 2. 获取上交所期权(SHO)过期合约列表
    sho_his_contracts = ContextInfo.get_his_contract_list('SHO')
    print(f"上交所期权历史过期合约数量: {len(sho_his_contracts)}")
    if sho_his_contracts:
        print("上交所期权部分历史合约示例:", sho_his_contracts[:5])

3. 常见问题与注意事项

  1. 数据补充:如果在运行代码时返回空列表 [],请检查 QMT 客户端顶部菜单的 操作 -> 数据管理 -> 补充数据,勾选并补充对应的过期合约列表与历史数据。
  2. 配合其他期权 API 使用:如果需要进一步查询具体期权的行权价、到期日等属性,可结合 ContextInfo.get_option_detail_data(optioncode) 获取详细的合约信息。
  3. 市场代码说明:请务必传入正确的市场缩写(如 SHO 表示上交所期权,而非 SH)。