🚀 AI 一键生成 qmt 策略代码

QMT Python 策略中如何判断和处理停牌股票?

qmt | 发布时间: 2025/11/26
以下内容由 EasyQuant 生成。

问题描述

在执行交易前,如何判断一只股票是否处于停牌状态?

解决方案

在 QMT 量化交易平台中,判断一只股票是否处于停牌状态,最直接且推荐的方法是使用 ContextInfo.is_suspended_stock() 函数。

以下是具体的实现方法和代码示例:

核心函数说明

  • 函数名ContextInfo.is_suspended_stock(stockcode)
  • 参数stockcode (string),格式为 代码.市场,例如 '600000.SH'
  • 返回值bool 类型。
    • True:表示该股票处于停牌状态。
    • False:表示该股票未停牌(正常交易)。

代码实现示例

以下代码展示了如何在 handlebar 函数(K线驱动或定时驱动)中,在下单前检查股票是否停牌。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 设置股票池,例如浦发银行
    ContextInfo.set_universe(['600000.SH'])

def handlebar(ContextInfo):
    # 获取当前周期对应的股票代码(如果是单股运行)
    # 如果是多股运行,通常会遍历 ContextInfo.get_universe()
    stock_code = ContextInfo.stockcode 
    
    # 或者指定一个具体的代码进行测试
    # stock_code = '600000.SH'

    # 判断是否停牌
    is_suspended = ContextInfo.is_suspended_stock(stock_code)

    if is_suspended:
        print(f"股票 {stock_code} 当前处于停牌状态,不执行交易。")
        # 在此处直接返回,跳过后续交易逻辑
        return
    else:
        print(f"股票 {stock_code} 交易正常,继续执行策略逻辑。")
        
        # --- 下面可以编写具体的交易逻辑 ---
        # 例如:passorder(...)

注意事项

  1. 代码格式:传入的股票代码必须包含市场后缀(如 .SH.SZ),否则函数可能无法正确判断。
  2. 回测与实盘:该函数在回测模式和实盘/模拟交易模式下均有效。在回测中,它会根据历史数据的停牌标记返回结果;在实盘中,它会获取当天的实时停牌状态。
  3. 数据补充:在进行回测前,请确保已下载了对应品种的“日线”或“基础信息”数据,以保证停牌信息的准确性。

Q&A

Q: ContextInfo.is_suspended_stock 函数支持传入股票代码列表吗?
A: 不支持。该函数一次只能接收一个股票代码字符串。如果需要判断股票池中的多只股票,需要使用 for 循环遍历股票列表逐一判断。

Q: 除了 is_suspended_stock,还有其他方式判断停牌吗?
A: 可以使用 ContextInfo.get_full_tick(stock_code) 获取分笔数据,查看返回字典中的 stockStatus 字段,但解析状态码相对复杂。通常情况下,直接使用 is_suspended_stock 是最简单且官方推荐的做法。

Q: 如果股票在盘中临时停牌,这个函数能检测到吗?
A: 在实盘模式下,该函数基于接收到的最新行情数据状态进行判断。如果交易所推送了停牌状态更新,该函数返回的值会相应变化。