3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化交易平台中,为了避免交易异常或踩坑,通常需要在每日开盘前(即 before_trading_start 事件阶段)对股票池进行清洗,剔除处于 ST、停牌(HALT) 或 退市(DELISTING) 状态的标的。
ptrade 官方提供了原生高效的过滤接口 filter_stock_by_status,可以一键剔除异常股票。
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)。以下示例展示了如何在盘前通过 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
filter_stock_by_status 专为盘前设计,必须运行在 before_trading_start 中。在 handle_data 等盘中阶段调用时,请配合 get_stock_status 或实时行情快照 get_snapshot 中的 trade_status 字段进行状态判断。set_universe() 更新策略股票池,确保后续行情获取和下单逻辑只作用于过滤后的股票。