
本方案由EasyQuant AI量化助手提供。如有更多问题直接用EasyQuant AI量化助手帮您快速解决量化交易编程难题。问题背景量化选股后不能直接下单。ST 股票、停牌股票或退市整理标的可能导致无法正常交易因此策略需要在交易前完成状态过滤。PTrade 的get_stock_status()支持查询ST、HALT和DELISTING三类状态。完整代码示例def initialize(context): g.index_code 000300.SS g.trade_stocks [] run_daily(prepare_trade_stocks, timebefore_open) def prepare_trade_stocks(context): # 获取指数成分股作为候选池 candidates get_index_stocks(g.index_code) if not candidates: log.info(候选股票池为空) return # 查询三类股票状态 st_status get_stock_status( candidates, query_typeST ) halt_status get_stock_status( candidates, query_typeHALT ) delisting_status get_stock_status( candidates, query_typeDELISTING ) # 保存可交易股票 valid_stocks [] for security in candidates: is_st st_status.get(security, True) is_halt halt_status.get(security, True) is_delisting delisting_status.get(security, True) # 非ST、非停牌、非退市才保留 if not is_st and not is_halt and not is_delisting: valid_stocks.append(security) g.trade_stocks valid_stocks set_universe(g.trade_stocks) log.info( 候选数量%d可交易数量%d % (len(candidates), len(g.trade_stocks)) ) def handle_data(context, data): for security in g.trade_stocks[:10]: if security not in data: continue # 示例只打印可交易标的行情 log.info( %s 最新价%.2f % (security, data[security].price) )注意事项query_type可使用ST、HALT、DELISTING。回测时应使用对应历史日期的状态避免使用当前状态过滤历史股票。状态正常不代表一定能成交仍要额外处理涨跌停、流动性和委托状态。总结通过get_stock_status()过滤异常股票可以让 PTrade 股票池更接近真实可交易范围是实盘策略中必要的基础风控步骤。本方案由EasyQuant AI量化助手提供。