🚀 AI 一键生成 qmt 策略代码

QMT 策略风控:使用 is_suspended_stock 函数处理停牌股票

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

问题描述

在下单之前,如何判断一只股票今天是不是停牌了?

解决方案

在 QMT 平台中,判断一只股票是否停牌主要使用 ContextInfo.is_suspended_stock() 函数。

核心函数说明

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

代码实现示例

以下是一个完整的策略示例,展示了如何在 handlebar 函数中遍历股票池,并在下单前过滤掉停牌的股票。

# -*- coding: gbk -*-

def init(ContextInfo):
    # 设置股票池,这里以浦发银行(正常)和某个可能停牌的股票为例
    # 注意:实际运行时请根据当天情况设置股票池
    stock_list = ['600000.SH', '000001.SZ']
    ContextInfo.set_universe(stock_list)
    
    # 设置账号(这里仅为示例,实盘需替换为真实账号)
    ContextInfo.set_account('YOUR_ACCOUNT_ID')

def handlebar(ContextInfo):
    # 获取当前周期对应的股票池
    universe = ContextInfo.get_universe()
    
    for stock_code in universe:
        # 1. 判断是否停牌
        is_suspended = ContextInfo.is_suspended_stock(stock_code)
        
        if is_suspended:
            print(f"股票 {stock_code} 今日停牌,跳过交易。")
            continue  # 跳过本次循环,不执行后续下单逻辑
            
        # 2. 如果未停牌,继续执行策略逻辑
        print(f"股票 {stock_code} 交易正常,正在计算信号...")
        
        # 示例:简单的下单逻辑(仅作演示)
        # 获取最新价
        last_price = ContextInfo.get_market_data(['close'], stock_code=[stock_code], count=1, period='1d')
        if not last_price.empty:
            # 假设满足条件买入 100 股
            # passorder(23, 1101, ContextInfo.accountID, stock_code, 5, -1, 100, ContextInfo)
            pass

注意事项

  1. 回测与实盘的区别
    • 回测模式:该函数会根据历史数据中的停牌标记返回状态。如果历史数据不完整,可能会影响判断准确性,建议在数据管理中补充完整数据。
    • 实盘/模拟模式:该函数会根据当天的实时行情数据返回状态。
  2. 数据格式:传入的股票代码必须包含市场后缀(如 .SH.SZ),否则函数可能无法正确识别。

Q&A

Q: ContextInfo.is_suspended_stock 在回测中能准确判断历史上的停牌吗?
A: 可以。在回测模式下,QMT 会读取历史行情数据中的停牌标记。只要本地下载了完整的历史日线数据和基础信息数据,该函数就能正确返回历史上某一天该股票是否停牌。

Q: 除了 is_suspended_stock,还有其他方式判断停牌吗?
A: 还可以通过 ContextInfo.get_full_tick(stock_code) 获取分笔数据,查看返回字典中的 stockStatus 字段,或者检查成交量(Volume)是否为 0(但在某些极端情况下,非停牌股票也可能无成交,因此不如 is_suspended_stock 准确)。官方推荐直接使用 is_suspended_stock

Q: 如果股票临时停牌(盘中停牌),这个函数有效吗?
A: 有效。在实盘运行模式下,该函数基于实时行情推送的状态进行判断。如果股票在盘中突然停牌,行情状态更新后,该函数会返回 True