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

Ptrade量化策略遇到退市标的(如蓝盾退债)持续报错怎么办?

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

问题描述

一个因为蓝盾退债引起的报错

最近发现Ptrade上运行的策略停止了。

上去一看。
每一个tick都在报错:

解决方案

遇到因“蓝盾退债”等退市标的导致的Tick级别持续报错,通常是因为策略在尝试获取已退市标的的行情数据(如快照、Tick流)时,系统返回了空值(None)或缺失关键字段,而代码中没有进行有效性校验和异常捕获,导致触发 KeyError 或 TypeError,进而使策略中断。\n\n### 解决排查方案:\n\n#### 1. 剔除退市标的\n在每日盘前(before_trading_start)使用 Ptrade 提供的 filter_stock_by_status 接口,将退市(DELISTING)和停牌(HALT)的标的从当日交易列表中过滤掉。\n\n#### 2. 增加数据有效性校验\n在 tick_datahandle_data 中,获取数据后务必判断是否为 None 或空数据。\n\n#### 3. 增加全局异常捕获\n使用 try...except 包裹核心逻辑,防止单一标的的报错导致整个策略停止运行。\n\n### 修复代码示例:\n\npython\ndef initialize(context):\n g.security = ['123012.SZ', '110033.SS'] # 假设包含已退市转债\n set_universe(g.security)\n g.trade_list = []\n\ndef before_trading_start(context, data):\n # 过滤退市和停牌的标的\n g.trade_list = filter_stock_by_status(g.security, filter_type=['ST', 'HALT', 'DELISTING'])\n log.info('今日可交易标的: %s' % g.trade_list)\n\ndef tick_data(context, data):\n for stock in g.trade_list:\n try:\n # 确保标的在data中且包含tick数据\n if stock not in data or 'tick' not in data[stock]:\n continue\n \n tick_info = data[stock]['tick']\n if tick_info is None or len(tick_info) == 0:\n continue\n \n # 获取最新价等操作\n current_price = tick_info['last_px'][0] if 'last_px' in tick_info else None\n if current_price is not None:\n pass # 执行交易逻辑\n \n except Exception as e:\n log.error('处理标的 %s tick数据时发生异常: %s' % (stock, e))\n\n\n通过以上三步,可以有效避免因个别标的退市或停牌导致整个量化策略崩溃的问题。