🚀 AI 一键生成 qmt 策略代码

QMT平台如何正确获取过期(退市)合约信息?

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

问题描述

关于“过期(退市)合约信息”接口链路的问题,请教确认

参考的接口文档是:

XtQuant.XtData 行情模块.md
数据字典_行业数据.md
文档中关于相关接口的原文大意如下:

download_history_contracts():下载过期(退市)合约信息
过期(退市)标的列表可以通过 get_stock_list_in_sector 获取
过期板块名称可以通过:
print([i for i in xtdata.get_sector_list() if "过期" in i])
查看
我们按文档原示例做了测试,步骤如下:

from xtquant import xtdata
xtdata.connect()

print("开始 download_history_contracts...")
xtdata.download_history_contracts()
print("完成")

expired = [i for i in xtdata.get_sector_list() if "过期" in i]
print(f"含'过期'字样板块数:{len(expired)}")
print(expired[:10])

实际结果是:

xtdata.connect() 正常
xtdata.download_history_contracts() 能正常返回
但执行完后:
expired = [i for i in xtdata.get_sector_list() if "过期" in i]
返回结果仍然是 []
也就是说:

download_history_contracts() 已完成
但 get_sector_list() 中并没有出现文档示例所说的包含“过期”字样的板块名称
如果当前版本不再通过“过期”板块暴露,是否有新的标准方式获取退市/过期标的列表?
补充说明:

get_sector_list() 本身是可正常返回的,当前返回数量为 851
只是其中没有任何包含“过期”字样的分组名称

解决方案

针对您在获取过期(退市)合约时遇到的问题,在 QMT 平台的标准 Python API 中,获取指定市场过期合约列表的推荐方式是使用 ContextInfo.get_his_contract_list(market) 接口,而不是依赖于板块名称匹配。

标准获取过期合约接口

用法: ContextInfo.get_his_contract_list(market)

释义: 获取指定市场过期合约列表。

参数:

  • market: 市场代码,如 'SH'(上交所), 'SZ'(深交所), 'SHO'(上交所期权), 'SZO'(深交所期权), 'IF'(中金所)等。

返回:

  • list: 期权/期货/股票等合约代码列表。

⚠️ 重要前提(注意事项)

获取过期合约前,需要手动在 QMT 客户端补充过期合约列表数据。 请在 QMT 客户端的【数据管理】中,勾选并下载对应的过期合约数据,否则接口可能返回空列表。

策略代码示例

#coding:gbk

def init(ContextInfo):
    pass

def handlebar(ContextInfo):
    # 仅在最后一根K线执行,避免重复打印
    if not ContextInfo.is_last_bar():
        return
        
    # 获取中金所过期合约列表
    if_expired = ContextInfo.get_his_contract_list('IF')
    print('中金所过期合约数量:', len(if_expired))
    print('中金所过期合约示例:', if_expired[:10])
    
    # 获取上交所期权过期合约列表
    sho_expired = ContextInfo.get_his_contract_list('SHO')
    print('上交所期权过期合约数量:', len(sho_expired))

总结

如果您在独立版 xtquant 中通过 get_sector_list 找不到“过期”板块,建议切换到 QMT 内置策略环境中使用 ContextInfo.get_his_contract_list,或者确认您的 QMT 终端【数据管理】中是否已经成功下载了“过期合约”相关的数据包。