期货量化程序 wait_update 等太久:超时与 TqTimeoutError 处理

期货量化程序 wait_update 等太久:超时与 TqTimeoutError 处理 前言天勤量化程序的结构可以概括成创建一个TqApi订阅合约在while True里反复调用api.wait_update()。每一次wait_update天勤会尝试收一批数据包更新内存里的行情、委托、持仓并让后台的TargetPosTask有机会发单撤单。若网络卡住、行情服务繁忙、或休市无数据循环会长时间阻塞——既可能错过风控也可能让你误以为程序还在正常跑。天勤提供两种与「等太久」相关的机制一是wait_update(deadline时间戳)超时返回False二是部分接口在等待数据时抛TqTimeoutError异常。两者容易混为一谈。下面按官方api.py、exceptions.py说明区别、为何会出现、以及分级怎么处理。一、天勤主循环在等什么架构入门组件作用TqApi连接行情与交易网关全程序通常一个实例get_quote/get_kline_serial订阅后得到对象引用内容靠 wait_update 刷新wait_update()阻塞直到有业务更新或 deadline 到期TargetPosTask在 wait_update 内部发单不调 wait_update 就不交易is_changing(obj, 字段)判断本帧该字段是否刚更新没有wait_update你 print 的quote.last_price可能是几分钟前的旧值。二、deadline 是什么deadline是可选参数类型为浮点数表示 Unix 时间戳从 1970-01-01 起的秒数可用time.time()加秒数得到。官方文档要点默认无 deadline一直等到有数据更新。若当前时间超过 deadline 且仍无业务数据更新返回False。若有数据更新或内部任务执行返回True。deadline 过小且循环里计算很重可能导致任务堆积文档称为非简单用法。importtime deadlinetime.time()30ifnotapi.wait_update(deadlinedeadline):log(wait_update 30s 无更新)on_wait_timeout()返回False不等于连接已断可能是休市无包、或网络暂时无推送要结合quote.datetime是否推进、是否交易时段判断。三、TqTimeoutError 是什么TqTimeoutError定义在tqsdk.exceptions在获取行情、K 线、tick、设置风控规则等同步等待超时时抛出错误信息常含「请检查客户端及网络是否正常」。与 deadline 返回False的区别抛异常说明该次等待特定资源的同步路径失败多见于启动时首包get_kline_serial迟迟不来、或内部链路超时。fromtqsdkimportTqApi,TqAuth,TqTimeoutErrortry:api.wait_update()exceptTqTimeoutErrorase:log(TqTimeoutError,str(e))recover_from_timeout()四、分级处理建议级别现象建议轻单次 deadline 返回 False计数连续 N 次再告警中交易时段连续 False暂停set_target_volume只监控重TqTimeoutError 或长时间无 datetimeapi.close()守护进程拉起全量对账 position/order休市时quote.datetime不更新用交易日历过滤避免凌晨误报。主循环两次wait_update之间勿长时间sleep或同步 IO否则会造成「伪超时」。五、与 TargetPosTasktask 发单发生在wait_update内你若因怕超时长期不调wait_update调仓会停住但行情断更同样危险。常见做法主循环带 60120 秒 deadline超时后走on_wait_timeout仍决定是否退出或重连。协程里不能调用wait_update文档写明需用register_update_notify否则架构不对。总结wait_update 超时要先分清是 deadline 正常返回 False还是 TqTimeoutError 打断以及当时是否在交易时段、datetime 是否还在走。天勤把整个实盘的「心跳」绑在 wait_update 上理解这一点后才能判断为何网络问题会表现为「不调仓」或「数据不更新」。把轻中重响应和休市过滤写进主循环再配合重连后读get_position全量对账程序就不会在死等和频繁重启之间来回摆。FAQ1deadline 设多少交易时段 30120 秒常见结合品种与网络试。2一次 False 就要 close 吗不必连续多次再处理。3回测会超时吗TqBacktest本地推历史少见逻辑可保留。4怎么区分休市与断线休市 datetime 本就不跳交易时段长时间不跳更可疑。风险提示以上内容用于超时处理参考不构成投资建议。