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

qmt 平台如何过滤停牌股?利用 ContextInfo.is_suspended_stock 防止策略错误下单

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

问题描述



Title: qmt 停牌股过滤教程:如何防止策略在停牌期间错误下单?

Question: 如何在 qmt 策略中利用 ContextInfo.is_suspended_stock 剔除停牌股票?

解决方案

qmt 停牌股过滤教程:如何防止策略在停牌期间错误下单?

在量化交易实盘或回测过程中,停牌股票是一个常见的“陷阱”。如果策略未对停牌股进行过滤,可能会导致以下问题:

  1. 实盘交易中产生大量废单:向停牌股票发送委托会被柜台直接拒绝,影响策略运行效率。
  2. 回测数据失真:若未处理停牌,回测系统可能以停牌前一天的价格撮合交易,导致回测收益虚高或不符合实际。

迅投 QMT 平台提供了便捷的 API 函数 ContextInfo.is_suspended_stock(),可以帮助我们在策略运行中实时检测并剔除停牌股票。本文将为您详细介绍其使用方法及完整的过滤代码模板。


1. API 核心接口介绍

ContextInfo.is_suspended_stock()

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

2. 完整策略源码示例:过滤停牌股并下单

以下是一个完整的 QMT 策略示例。该策略在 init 中设定初始股票池,在 handlebar 中循环遍历股票池,利用 ContextInfo.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_stocks = []
    suspended_stocks = []
    
    # 遍历股票池,过滤停牌股
    for stock in ContextInfo.stock_list:
        if ContextInfo.is_suspended_stock(stock):
            suspended_stocks.append(stock)
        else:
            active_stocks.append(stock)
            
    # 打印过滤结果
    if suspended_stocks:
        print(f"【停牌警报】以下股票当前处于停牌状态,已自动过滤:{suspended_stocks}")
    
    # 3. 仅对未停牌的股票执行交易逻辑
    for stock in active_stocks:
        print(f"【交易信号】股票 {stock} 状态正常,准备发送买入委托...")
        # 示例:使用最新价买入 100 股
        passorder(23, 1101, ContextInfo.account_id, stock, 5, -1, 100, '停牌过滤策略', 1, ContextInfo)

3. 进阶技巧与注意事项

  1. 行情数据填充设置
    在使用 ContextInfo.get_market_dataContextInfo.get_market_data_ex 获取历史行情时,参数 skip_paused 默认为 True(自动填充未停牌前的价格)。如果您需要严格识别停牌期间无交易数据的情况,可以将其设为 False,此时停牌日的行情数据将返回 NaN
  2. 动态股票池过滤
    如果您使用的是指数成分股(如沪深300)作为动态股票池,建议在每次获取成分股列表后,立即通过 is_suspended_stock 进行一次清洗,生成一个“今日可交易股票池”,再输入选股模型中计算因子,这样可以大幅提升策略的运行效率。