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

ptrade 实盘如何使用 check_limit 函数判断股票涨跌停状态,规避无效委托?

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

问题描述

ptrade 实时交易:如何使用 check_limit 避免报单超过价格笼子?
在ptrade实盘中,如何使用check_limit函数判断股票的涨跌停状态,规避无效委托?

解决方案

ptrade 实盘交易:利用 check_limit 规避涨跌停与价格笼子无效委托

在 A 股实盘交易中,由于价格笼子限制以及涨跌停板机制的存在,如果策略盲目按照计算出的理论价或最新价报单,极易产生废单(无效委托)。这不仅会占用系统资源,还可能导致策略逻辑中断。

ptrade 提供了专为交易模块设计的 check_limit 接口,能够实时返回股票的涨跌停状态。本文将详细介绍该接口的使用方法并提供实盘避坑代码。


一、 check_limit 接口详解

1. 接口定义

check_limit(security)

  • 使用场景:仅在交易模块(实盘/模拟盘)可用。
  • 参数security 可以是单只股票代码(如 '600570.SS')或多只股票代码组成的列表(list[str])。
  • 返回值:返回一个字典(dict[str:int]),Key 为股票代码,Value 为涨跌停状态码。

2. 状态码对照表

状态码 含义 说明
2 触板涨停 已经是涨停价格,但盘口还有卖盘
1 涨停 封死涨停
0 正常状态 既不涨停也不跌停
-1 跌停 封死跌停
-2 触板跌停 已经是跌停价格,但盘口还有买盘

二、 实盘避坑策略源码

以下示例展示了如何在盘中 handle_data 事件中,通过 check_limit 过滤掉已经涨停(无法买入)或跌停(无法卖出)的标的,从而规避无效报单。

def initialize(context):
    # 初始化股票池
    g.security = ['600570.SS', '000001.SZ']
    set_universe(g.security)

def handle_data(context, data):
    # 1. 确保仅在实盘/模拟盘交易环境中执行此逻辑(回测环境不支持 check_limit)
    if not is_trade():
        # 回测环境下的模拟下单
        for stock in g.security:
            order(stock, 100)
        return

    # 2. 获取股票池中所有股票的涨跌停状态
    try:
        limit_status = check_limit(g.security)
    except Exception as e:
        log.error(f"获取涨跌停状态失败: {e}")
        return

    for stock in g.security:
        # 获取当前标的状态,若查询异常默认返回 0(正常)
        status = limit_status.get(stock, 0)
        
        # 3. 根据状态进行精细化报单控制
        if status in [1, 2]:
            log.warning(f"{stock} 当前处于涨停或触板涨停状态(状态码:{status}),放弃买入委托以防废单。")
            # 如果持有该股,涨停时可以考虑卖出,但不能买入
            continue
            
        elif status in [-1, -2]:
            log.warning(f"{stock} 当前处于跌停或触板跌停状态(状态码:{status}),放弃卖出委托。")
            continue
            
        else:
            # 4. 正常状态,执行策略买卖逻辑
            log.info(f"{stock} 状态正常,准备发送委托。")
            order(stock, 100)

三、 开发者实盘注意事项

  1. 环境限制check_limit 接口在回测环境下调用会报错。因此在编写通用策略时,务必使用 is_trade() 函数进行场景判断,如上方源码所示。
  2. 废单状态捕获:如果下单价格超过了价格笼子,order() 函数依然会返回 order_id(而非 None)。但在委托回调 on_order_response 中其状态 status 最终会变为 '9'(废单)。配合 check_limit 提前预防是最佳实践。
  3. 多股查询容错:当传入多个股票代码时,若其中部分代码查询异常,check_limit 会将异常代码的状态默认返回为 0(既不涨停也不跌停)。