问题描述
使用get_stock_status查询退市股票时发现遗漏了一些应该退市的股票,为什么?
解决方案
在 ptrade 平台中,使用 get_stock_status 接口并传入 query_type='DELISTING' 时,系统仅会返回已经正式退市的股票状态,而不包含处于退市整理期的股票。这就是为什么您会发现遗漏了一些即将退市的股票。
为了更全面地过滤掉不适合交易的股票(包括退市整理期的股票),ptrade 提供了专门的过滤接口 filter_stock_by_status。该接口支持 'DELISTING_SORTING' 参数,专门用于过滤退市整理期的股票。
解决方案:使用 filter_stock_by_status
filter_stock_by_status 可以在盘前(before_trading_start)调用,一次性剔除 ST、停牌、退市以及退市整理期的股票。
支持的过滤类型 (filter_type):
'ST'- 查询是否属于ST股票'HALT'- 查询是否停牌'DELISTING'- 查询是否退市'DELISTING_SORTING'- 查询是否退市整理期(只过滤交易当日数据)
代码示例:
def initialize(context):
# 假设这是您的初始股票池
g.security = ['123002.SZ', '688500.SS', '000001.SZ', '603997.SS', '123181.SZ']
set_universe(g.security)
def before_trading_start(context, data):
# 使用 filter_stock_by_status 过滤掉 ST、停牌、退市及退市整理期的股票
filter_types = ["ST", "HALT", "DELISTING", "DELISTING_SORTING"]
g.trade_stocks = filter_stock_by_status(g.security, filter_types)
log.info("过滤后的可交易股票列表: %s" % g.trade_stocks)
def handle_data(context, data):
# 在盘中逻辑中使用过滤后的股票池 g.trade_stocks
pass
注意事项:
filter_stock_by_status仅支持在before_trading_start模块中调用。'DELISTING_SORTING'(退市整理期)参数只过滤交易当日的数据,因此非常适合在每日盘前进行动态剔除。