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

QMT量化策略报错:不识别证券代码及行情复权异常怎么解决?

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

问题描述

策略里不识别证券代码是什么原因?

解决方法:需要注意市场简称/尾缀是否正确,另外期货还需要额外关注代码的字母部分大小写是否正确。

备注:

大小写的判断方法:在行情界面输入代码,看客户端界面如何显示的

各市场简称如下:

行情数据复权处理异常?

解决方法:需先补充除权数据,补充数据界面的数据选项选“除权数据”,补充完之后需再次确认补充成功,确认方法可有两种:1.行情界面确认:行情界面输入证券代码,周期选日线,底部滚动条拖动至除权除息日,在除权除息日当天的K线底部时间轴上会有红色“S”标识2.策略里用 ContextInfo.get_divid factors()函数可获取到指定证券代码的除权除息日和复权因子信息

解决方案

在使用 QMT (迅投/国信) 量化平台编写和运行策略时,开发者经常会遇到两个基础但致命的问题:策略无法识别证券代码以及行情数据复权处理异常。本文将为您详细解答这两个问题的原因及解决方法。

一、 策略里不识别证券代码是什么原因?

如果在运行策略时,日志报错提示找不到或不识别证券代码,通常是由代码格式或大小写不规范引起的。

解决方法与排查步骤:

  1. 检查市场简称/尾缀是否正确
    QMT 平台要求证券代码必须带有正确的市场后缀(格式为 代码.市场)。例如,平安银行应写为 000001.SZ,浦发银行应写为 600000.SH。常见的市场简称包括:
    • SH:上交所
    • SZ:深交所
    • IF:中金所
    • SF:上期所
    • DF:大商所
    • ZF:郑商所
  2. 检查期货代码的大小写
    对于期货品种,除了尾缀外,还需要额外关注代码的字母部分大小写是否正确。例如,沪深300主力合约通常为 IF.IFIF00.IF
    • 大小写的判断方法:在 QMT 客户端的行情界面直接输入代码,观察客户端界面是如何显示的,策略中的代码必须与客户端显示保持完全一致。

二、 行情数据复权处理异常怎么解决?

在进行历史回测或计算技术指标时,如果发现 K 线出现巨大的跳空缺口,或者计算出的收益率严重失真,通常是因为除权除息数据缺失导致的复权处理异常。

解决方法与排查步骤:

必须先在客户端补充除权数据。具体操作为:进入【数据管理】 -> 【补充数据】,在数据选项中勾选**“除权数据”**进行下载。

补充完成后,可以通过以下两种方式确认数据是否补充成功:

方法 1:通过行情界面视觉确认

在行情界面输入对应的证券代码,将周期切换为日线。拖动底部滚动条至该股票历史的除权除息日,观察当天的 K 线底部时间轴上是否出现了一个红色的“S”标识。如果有,说明除权数据已就位。

方法 2:通过 QMT Python API 代码确认

在策略中,可以使用 ContextInfo.get_divid_factors() 函数来获取指定证券代码的除权除息日和复权因子信息。如果能成功打印出字典数据,说明数据正常。

代码示例:

#encoding:gbk
def init(ContextInfo):
    # 初始化时可设置股票池
    ContextInfo.set_universe(['600000.SH'])

def handlebar(ContextInfo):
    # 获取浦发银行的除权除息日和复权因子映射字典
    divid_factors = ContextInfo.get_divid_factors('600000.SH')
    
    # 打印输出复权因子信息,检查是否为空
    print("600000.SH 复权因子信息:", divid_factors)

总结:在 QMT 平台开发策略前,养成良好的数据准备习惯(下载历史 K 线、除权数据、财务数据等)并严格遵守 代码.市场 的命名规范,可以帮您避开 90% 的基础报错。