🚀 AI 一键生成 qmt 策略代码

QMT 平台 ContextInfo.is_suspended_stock 总是返回 True 怎么办?

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

问题描述

ContextInfo.is_suspended_stock除了两个股票其他返回都是True

ContextInfo.is_suspended_stock 除了两个股票其他返回都是 True,请问这是什么情况,应该怎么解决呢

解决方案

在 QMT 平台中使用 ContextInfo.is_suspended_stock() 函数判断股票是否停牌时,如果发现除了极少数股票外,其他绝大多数股票都返回 True(即判定为停牌),通常是由以下几个原因导致的。以下是详细的原因分析及相应的解决方法:

1. 本地历史数据缺失或未更新(最常见原因)

原因分析:
QMT 平台在回测或运行策略时,很多状态判断(包括停牌状态)依赖于本地的历史行情数据。如果本地没有下载对应股票的日线数据,或者数据没有更新到最新日期,系统在查询不到有效行情数据时,会默认将该股票判定为“停牌”状态(返回 True)。那两个返回 False 的股票,很可能是你之前单独查看过或下载过数据的股票。

解决方法:
在 QMT 客户端中手动补充数据。

  1. 打开 QMT 客户端,点击顶部菜单栏的**【数据管理】**。
  2. 选择**【补充数据】**。
  3. 选择你需要运行策略的市场(如沪深 A 股)、品种以及日线周期。
  4. 设定好时间范围(确保包含你当前回测或运行的时间段),点击下载/补充数据。
  5. 数据补充完成后,重新运行策略。

2. 股票代码格式不正确

原因分析:
ContextInfo.is_suspended_stock(stockcode) 函数要求传入的股票代码必须包含市场后缀,格式为 '代码.市场'(例如 '600000.SH''000001.SZ')。如果只传入了纯数字代码(如 '600000'),系统无法识别该股票,也会默认返回 True

解决方法:
检查代码中传入的股票代码格式,确保带有正确的市场后缀。

# 错误写法
is_suspended = ContextInfo.is_suspended_stock('600000') 

# 正确写法
is_suspended = ContextInfo.is_suspended_stock('600000.SH')

3. 客户端未连接行情服务器

原因分析:
如果你是在实盘或模拟盘模式下运行策略,且客户端处于断网或未成功连接行情服务器的状态,系统无法获取最新的实时状态,可能会导致判断异常。

解决方法:
检查 QMT 客户端右下角的网络连接状态,确保行情服务器连接正常(显示绿色或有延迟数值)。如果断开,请尝试重新登录或切换行情节点。

4. 调用的时间点非交易时间

原因分析:
在某些特定情况下,如果在非交易时间段(如周末、节假日或盘后很晚的时间)请求实时状态,且本地数据未同步,可能会出现状态判定不准确的情况。

解决方法:
确保在正常的交易时间段内测试实时策略,或者在回测模式下确保历史数据完整。

总结排查步骤:

  1. 第一步:检查代码格式是否为 '000001.SZ'
  2. 第二步:去【数据管理】下载全市场的日线数据。
  3. 第三步:检查网络和行情连接状态。

按照以上步骤排查,通常可以解决绝大多数股票被误判为停牌的问题。