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

QMT实盘如何自动过滤停牌股票?利用is_suspended_stock规避下单报错

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

问题描述

QMT 交易风控:利用 is_suspended_stock 自动剔除停牌股
QMT实盘中如何自动过滤掉停牌的股票以防止passorder下单报错或资金占用?

解决方案

QMT交易风控:利用 is_suspended_stock 自动剔除停牌股

在QMT实盘量化交易中,如果策略信号触发了停牌股票的买入或卖出指令,调用 passorder 等交易函数时会导致柜台拒绝申报,甚至引发策略运行报错。此外,频繁对停牌股发起无效申报也会占用系统资源和不必要的风控额度。

为了提高策略的健壮性,QMT 提供了内置的 ContextInfo.is_suspended_stock() 接口,帮助开发者在下单前进行前置风控,自动过滤停牌股票。


1. 核心接口介绍

ContextInfo.is_suspended_stock()

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

2. 实盘过滤停牌股代码示例

以下是一个完整的 QMT 策略框架,展示了如何在 handlebar 中动态获取股票池,并在生成交易信号前,通过 is_suspended_stock 自动剔除停牌股票:

#encoding:gbk

def init(ContextInfo):
    # 1. 设定初始股票池
    ContextInfo.stock_list = ['600000.SH', '600004.SH', '000001.SZ', '000002.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线(最新Tick驱动)时执行交易逻辑
    if not ContextInfo.is_last_bar():
        return
        
    active_trade_list = []
    
    # 遍历股票池,进行停牌过滤风控
    for stock in ContextInfo.stock_list:
        if ContextInfo.is_suspended_stock(stock):
            print(f"【风控提示】股票 {stock} 当前处于停牌状态,已自动过滤。")
            continue
        else:
            active_trade_list.append(stock)
            
    # 3. 对未停牌的股票执行策略逻辑与下单
    for stock in active_trade_list:
        # 假设此处为策略买入信号触发条件(示例为直接买入)
        # 使用 passorder 发送买入委托,1101表示单股单账号股数下单,23表示股票买入
        print(f"发送下单指令:买入 {stock} 100股")
        passorder(23, 1101, ContextInfo.account_id, stock, 5, -1, 100, '停牌过滤策略', 1, ContextInfo)

3. 交易风控最佳实践建议

  1. 前置过滤:始终将 is_suspended_stock 放在策略买卖信号判断的最前端。一旦检测到停牌,立即跳过该股票的后续指标计算与下单逻辑。
  2. 动态股票池:在每日开盘时,可以结合 ContextInfo.get_universe() 动态更新股票池,剔除长期停牌或退市的标的。
  3. 配合 quickTrade 参数:在实盘中,passorderquickTrade 参数若设置为 1(立即下单),更需要配合停牌检测,防止盘中突发停牌导致即时拆单算法报错。