【QMT】QMT 策略风控:如何处理股票池中的停牌股?

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

在量化交易中,正确处理停牌股是策略稳定运行的关键。本文将介绍如何使用 QMT API 中的 is_suspended_stock 函数在交易前进行判断,避免因停牌导致下单失败。

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

在 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: 在实盘模式下,该函数基于接收到的最新行情数据状态进行判断。如果交易所推送了停牌状态更新,该函数返回的值会相应变化。


不会写量化代码?欢迎来 EasyQuant 体验 AI 编写量化策略: EasyQuant

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值