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

QMT 平台如何使用 is_suspended_stock 自动剔除停牌股?(附 Python 源码)

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

问题描述

qmt 策略风控:利用 is_suspended_stock 自动过滤停牌股避坑指南
在 qmt 策略盘中运行或回测时,如何使用 is_suspended_stock 自动剔除停牌股以避免委托失败?

解决方案

QMT 策略风控:利用 is_suspended_stock 自动过滤停牌股避坑指南

在进行量化交易时,停牌股是策略下单时最常见的“地雷”之一。如果策略未对停牌股进行过滤,直接调用 passorderorder_shares 等交易函数发送委托,会导致柜台直接拒单报错,不仅浪费系统资源,还可能影响策略的正常运行逻辑。

QMT 平台提供了便捷的内置 API ContextInfo.is_suspended_stock(),帮助开发者在盘中实时或回测中自动剔除停牌股票。


1. 核心 API 介绍

ContextInfo.is_suspended_stock()

  • 用法ContextInfo.is_suspended_stock(stockcode)
  • 释义:判定指定股票在当前 Bar 对应的时间点是否处于停牌状态。
  • 参数stockcode (string),必须是带市场后缀的完整代码,例如 '600004.SH''000002.SZ'
  • 返回值bool 类型。
    • True:该股票当前处于停牌状态。
    • False:该股票当前未停牌,可正常交易。

2. 实战代码示例:自动过滤停牌股的选股策略

以下是一个完整的 QMT Python 策略示例。该策略在初始化时设定了一个股票池,并在每个 handlebar 周期内,自动过滤掉停牌的股票,只对正常交易的股票进行下单操作。

#encoding:gbk

def init(ContextInfo):
    # 1. 设定初始股票池
    ContextInfo.stock_list = ['600000.SH', '600004.SH', '000002.SZ', '000001.SZ']
    ContextInfo.set_universe(ContextInfo.stock_list)
    
    # 2. 设定交易账号
    ContextInfo.account_id = '6000000248'
    ContextInfo.set_account(ContextInfo.account_id)
    
    print("策略初始化完成,初始股票池:", ContextInfo.stock_list)

def handlebar(ContextInfo):
    # 只在最后一根 K 线(最新行情)执行交易逻辑
    if not ContextInfo.is_last_bar():
        return
        
    active_stocks = []
    
    # 遍历股票池,利用 is_suspended_stock 过滤停牌股
    for stock in ContextInfo.stock_list:
        if ContextInfo.is_suspended_stock(stock):
            print(f"【风控提示】股票 {stock} 当前处于停牌状态,已自动过滤。")
        else:
            active_stocks.append(stock)
            
    print("当前可交易的活跃股票池:", active_stocks)
    
    # 针对未停牌的股票执行下单逻辑
    for stock in active_stocks:
        # 示例:使用指定股数交易函数买入 100 股
        # 实际策略中可在此处加入您的买入/卖出信号判断
        print(f"发送委托:买入未停牌股 {stock} 100股")
        order_shares(stock, 100, 'LATEST', ContextInfo, ContextInfo.account_id)

3. 避坑指南与最佳实践

  1. 动态股票池过滤:不要只在 init 中过滤一次股票池。因为股票可能在交易日中途临时停牌,或者在回测的某一天突然停牌。务必在 handlebar 中,在每次准备发送交易指令(如 passorder)前,实时调用 is_suspended_stock 进行安全检查。
  2. 配合 get_market_dataskip_paused 参数:在获取历史行情数据时,get_market_data 接口的 skip_paused 参数若设为 True,会自动用停牌前一天的价格填充停牌日数据。这虽然方便了指标计算,但容易让人误以为该股当天可交易。因此,计算指标和判断下单状态要分清,下单前必须用 is_suspended_stock 再次确认。
  3. 回测与实盘的一致性:QMT 的 is_suspended_stock 同时支持回测和实盘模式。在回测历史数据时,请确保您已通过 QMT 客户端的“数据管理”功能完整下载了对应品种的历史日线和停牌数据,否则可能导致回测中的停牌判断不准确。