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

ptrade 平台如何在盘前快速过滤掉股票池中的 ST 股和停牌股?(附 Python 源码)

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

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: ptrade API 教程:filter_stock_by_status 一键过滤 ST 和停牌股

Question: ptrade 如何在盘前快速过滤掉股票池中的 ST 股和停牌股?

解决方案

在 ptrade 量化交易平台中,为了避免交易异常或踩坑,通常需要在每日开盘前(即 before_trading_start 事件阶段)对股票池进行清洗,剔除处于 ST停牌(HALT)退市(DELISTING) 状态的标的。

ptrade 官方提供了原生高效的过滤接口 filter_stock_by_status,可以一键剔除异常股票。


1. filter_stock_by_status 接口说明

  • 调用限制:仅支持在 before_trading_start 模块处理逻辑中使用。
  • 函数签名filter_stock_by_status(stocks, filter_type=["ST", "HALT", "DELISTING"], query_date=None)
  • 主要参数
    • stocks: 股票代码列表,如 ['000001.SZ', '600570.SS'](支持字符串或列表)。
    • filter_type: 需过滤的状态列表,默认包含 ["ST", "HALT", "DELISTING"],可选参数:
      • 'ST': 过滤 ST / *ST 股票
      • 'HALT': 过滤停牌股票
      • 'DELISTING': 过滤退市股票
      • 'DELISTING_SORTING': 过滤退市整理期股票
    • query_date: 查询日期,格式为 'YYYYMMDD'。默认为 None(自动获取当前交易日日期)。
  • 返回值:已剔除指定异常状态后的合法股票代码列表(list)。

2. 完整策略 Python 源码示例

以下示例展示了如何在盘前通过 get_index_stocks 获取沪深300成分股,并使用 filter_stock_by_status 快速剔除 ST 和停牌股,最后更新策略股票池:

def initialize(context):
    # 初始化全局变量
    g.security = []
    log.info("策略初始化完成")

def before_trading_start(context, data):
    # 1. 获取沪深300成分股原始列表
    raw_stocks = get_index_stocks('000300.XBHS')
    
    # 2. 一键过滤 ST、停牌及退市股票
    filtered_stocks = filter_stock_by_status(
        stocks=raw_stocks, 
        filter_type=["ST", "HALT", "DELISTING"]
    )
    
    # 3. 设置策略更新后的股票池
    g.security = filtered_stocks
    set_universe(g.security)
    
    log.info("原始股票数量: %s, 过滤后可交易股票数量: %s" % (len(raw_stocks), len(g.security)))

def handle_data(context, data):
    # 盘中交易逻辑
    pass

3. 注意事项

  1. 运行时间点filter_stock_by_status 专为盘前设计,必须运行在 before_trading_start 中。在 handle_data 等盘中阶段调用时,请配合 get_stock_status 或实时行情快照 get_snapshot 中的 trade_status 字段进行状态判断。
  2. 配合 set_universe:过滤后应及时调用 set_universe() 更新策略股票池,确保后续行情获取和下单逻辑只作用于过滤后的股票。