
前言天勤量化策略上线后异常不一定导致进程立刻退出有时是wait_update卡住有时是下单抛错但循环还在跑。我按异常类型把排查分成首屏判断、最小复现、回归策略三步方便值班时快速收窄范围。一、首屏看类型名与发生位置类型倾向常见触发点先查什么超时类wait_update、网络抖动网络、订阅数量、服务状态认证/权限类构造TqApi、订阅受限合约TqAuth、套餐、合约代码交易拒单类insert_order价格、时段、资金、开平标志资源类多次创建 api 未 close进程内 api 实例数、Notebook 重复运行记录完整栈与第一次出错前的最后一条业务日志合约、方向、价格。二、超时与断线现象wait_update长时间无返回或抛出超时相关异常。排查本机网络、代理、防火墙。是否订阅过多合约导致推送压力过大。是否在循环内阻塞time.sleep、同步 HTTP。外层是否有看门狗超时后安全停机、撤单或禁止新开仓。importtimefromtqsdkimportTqApi,TqAuth,TqSim apiTqApi(TqSim(),authTqAuth(账户,密码))qapi.get_quote(SHFE.rb2510)t0time.time()try:whileTrue:api.wait_update()iftime.time()-t060andnotapi.is_changing(q):print(warn: 60s 无行情更新)t0time.time()exceptExceptionase:print(type(e).__name__,e)finally:api.close()生产环境应由进程管理器负责重启策略内则尽量进入“只平仓不开仓”的安全模式。三、权限与认证现象能启动但无法订阅某交易所、无法交易。排查顺序TqAuth 凭证 → 账户套餐 → 合约是否有效 → 是否误用回测账户对象下单。用最小脚本只订阅单合约、只 wait 数帧可快速区分是认证问题还是策略逻辑问题参见 TqAuth 专题排查习惯。四、交易类报错现象insert_order或TargetPosTask报错。重点核对交易时段limit_price涨跌停范围offset与持仓今昨仓匹配可用资金拒单后本地状态机必须进入“拒单”终态避免假设已成交继续加仓。五、开发与 Notebook 环境Jupyter 中多次运行单元格会创建多个TqApi而未close()表现为端口占用、莫名断连。习惯每会话一个 api重启内核前api.close()生产部署用独立进程脚本不用 Notebook 长跑六、回归策略时的检查异常分支是否写日志含 symbol、order_id是否在异常后仍继续开仓模拟盘是否覆盖过该异常路径总结异常排查先分类再缩范围超时看网络与循环阻塞权限看认证与合约交易看时段与报单字段。最小脚本复现通过后再恢复原策略逐段加回订阅与逻辑。FAQ1异常后要不要自动重启可以但重启前应定义默认安全仓如空仓或对冲避免重复错误开仓。2如何区分行情断线与策略死循环看quote.datetime是否推进死循环常伴随 CPU 100% 且无 wait。3多策略共用一个 api 异常会互相影响吗会。一个策略阻塞循环其他逻辑也得不到更新。4回测里很少异常实盘很多正常吗正常。实盘有流控、拒单、网络应用模拟盘补测执行层。5要不要捕获所有 Exception建议捕获后记录并进入安全态但不要吞掉异常不做任何处理。风险提示本文用于期货量化技术实践讨论不构成投资建议。