🚀 AI 一键生成 qmt 策略代码

QMT 平台 get_main_contract 获取主力合约错误怎么办?

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

问题描述

get_main_contract返回错误的结果

symbol1 = ContextInfo.get_main_contract('IF00.IF')# 获取当前主力合约
print(symbol1)

应该要返回IF2409.IF才对,但实际返回了IF2006,为什么?

解决方案

在 QMT 平台中,调用 ContextInfo.get_main_contract() 返回了过期或错误的主力合约(例如返回了 IF2006 而不是当前的 IF2409.IF),通常是由以下两个原因导致的:

原因一:参数格式不正确

根据 QMT API 官方文档,get_main_contract(codemarket) 的参数格式应为品种名.市场代码。对于沪深300股指期货,品种名是 IF,市场代码是 IF(中金所)。

  • 错误写法'IF00.IF'(带有00连续合约标识,可能导致解析异常)
  • 正确写法'IF.IF'

原因二:本地数据未更新(最常见原因)

QMT 平台与其他云端量化平台不同,它的很多计算(包括主力合约的判定,通常基于持仓量或成交量最大)严重依赖于本地数据。如果你的客户端本地数据没有更新,或者只下载到了 2020 年的数据,系统就会根据旧数据计算,从而返回历史的主力合约(如 IF2006)。

解决方案

第一步:修改代码中的参数
将代码中的 'IF00.IF' 修改为官方文档推荐的 'IF.IF'

def handlebar(ContextInfo):
    # 正确的参数格式:品种名.市场代码
    symbol1 = ContextInfo.get_main_contract('IF.IF')
    print('当前主力合约为:', symbol1)

第二步:补充本地行情数据

  1. 打开 QMT 客户端,点击顶部菜单栏的**【数据管理】**。
  2. 选择**【补充数据】**。
  3. 在弹出的窗口中,选择期货市场(如中金所 IF),勾选日线数据基础信息/合约列表
  4. 将时间范围设置到当前最新日期,点击**【开始补充】**。
  5. 等待数据下载完成后,重新运行你的策略模型。

补充完最新的数据并修正参数后,get_main_contract 就能正确根据最新的持仓量/成交量动态返回当前的真实主力合约(如 IF2409.IF)了。