当前位置: 首页 > news >正文

期货量化 wait_update 超时怎么办:天勤 TqTimeoutError 分级处理

前言

主循环里api.wait_update()偶尔抛出TqTimeoutError,有人一律重试、有人立刻平仓,都可能过度反应。我习惯把超时当成「分级事件」:偶发可退避重试,连续失败则暂停发单并核对持仓,与断线重连流程衔接但不混为一谈。

天勤TqSdkreference/tqsdk.exceptions.rst中定义了异常类型。下面说明超时常见原因、重试与退避、和trading_enabled开关配合的写法。断线后持仓核对在另一篇有展开,此处只写超时本身。

一、超时不等于策略错了

可能原因包括:

  • 网络抖动,下一帧就恢复
  • 休市或品种无推送,wait_update等待过久
  • 订阅合约错误,长期无有效行情
  • 服务器侧短暂繁忙

先记录日志(时间、合约、连续次数),再决定重试还是停机,不要无日志地pass

二、分级处理表

级别条件动作
L1首次超时sleep 1~2 秒,continue
L2连续 3~5 次暂停新信号,继续wait_update
L3连续 >5 次或伴其他异常停发单,核对 position,通知人工

阈值按品种频率调整;Tick 策略比日线 K 线更严。

三、代码骨架

importloggingimporttimefromtqsdkimportTqApi,TqAuth,TqSimfromtqsdk.exceptionsimportTqTimeoutError log=logging.getLogger("tq")api=TqApi(TqSim(),auth=TqAuth("账户","密码"))trading_enabled=Truestreak=0whileTrue:try:api.wait_update()streak=0exceptTqTimeoutError:streak+=1log.warning("TqTimeoutError streak=%s",streak)ifstreak>=5:trading_enabled=Falselog.error("暂停发单,请核对行情与持仓")time.sleep(min(2*streak,30))continueexceptExceptionase:log.exception("wait_update: %s",e)trading_enabled=Falsetime.sleep(5)continueifnottrading_enabled:continue# 信号与下单

恢复trading_enabled = True前,应人工或reconcile函数确认行情与持仓正常。

四、与行情订阅、交易时段

若超时集中在休市,应加交易时段过滤,而不是无限重试。检查quote.datetime是否推进;不推进时先查合约代码与权限。

交易类超时(若文档区分)与行情超时可分开计数,交易超时更保守,直接暂停下单。

五、不要和 close 泄漏混淆

超时后反复new TqApi而不close旧实例,会导致连接泄漏。正常应在一个 api 上重试;仅当文档建议或长期无法恢复时,才close后重建。

总结

TqTimeoutError应分级处理,不宜一律重试或一律平仓:偶发超时可在 1~2 秒退避后continue;连续 3~5 次宜置trading_enabled = False、暂停新信号但继续wait_update;更高 streak 或伴随其他异常时,停发单并核对position、挂单与行情是否在推进。每次超时都要打日志(时间、连续次数),便于与断线重连流程区分——超时可能是抖动,断线则可能需持仓核对。

休市、合约写错、长期无推送时,加交易时段与quote.datetime检查,比无限重试更有效。不要每次超时都new TqApi而不close旧实例,除非长期无法恢复。交易类超时(若与行情超时区分)应更保守。恢复自动发单前,宜人工或 reconcile 确认行情与持仓正常。

建议在模拟盘观察超时 streak 触发是否符合预期;把阈值、退避上限、是否暂停发单写进策略配置;与结构化日志、紧急停止流程一并纳入上线检查表。

FAQ

1)捕获后要不要 api.close()?

单次超时不必;进程要退出时在 finally 里 close。

2)超时能设置更长吗?

构造或文档参数以官方为准,过长会掩盖行情停滞。

3)和 KeyboardInterrupt?

单独 except,保证 close。

4)多合约都超时?

先查网络与 auth,再查是否休市。

风险提示

本文用于异常处理技术说明,不构成投资建议。

http://www.jsqmd.com/news/952030/

相关文章:

  • 避坑指南:STM32低功耗停止模式唤醒后时钟配置的那些事儿
  • 列车轮对几何参数在线检测关键技术解析【附数据】
  • C++ 编码规范
  • 2026年大客户营销咨询选购指南,品牌排名 - mypinpai
  • 别再死记硬背!一张图+一个故事帮你理清正交、酉、正规矩阵的关系与区别
  • Zotero PDF预览插件:让文献浏览告别窗口切换的困扰
  • Transformer QKV 计算瓶颈?一次关于长上下文显存爆炸的硬核排查与优化
  • AI简历不是“加个ChatGPT”,而是重构求职链路——12个企业级落地案例拆解
  • 2026年深圳全屋定制一站式服务避坑 别被假工厂全流程忽悠了 - 产品测评官
  • 智能担保系统架构设计全图解(含LLM+规则引擎双模决策链路)
  • 别再死记硬背了!用Multisim/PSpice仿真带你直观理解PFC的三种工作模式(CCM/DCM/CrM)
  • PPTist:5分钟打造专业演示文稿的终极免费在线PPT制作工具
  • Mac窗口置顶神器Topit:如何让重要窗口永远在最前方
  • 紧急预警:标注数据漂移正 silently 毁掉你的模型效果!——用AI工具构建动态标注质量监控仪表盘(Python+Prometheus实战)
  • CentOS 7生产环境PHP 8.1安装避坑实录:Remi源、扩展冲突与SELinux策略
  • ov5647摄像头模块、MIPI的MCLK主时钟
  • 2026年酒泉驾考驾校价格比较:新亿阳驾校性价比高吗? - mypinpai
  • 从开关电源到第三代半导体:聊聊PFC技术这几十年的‘进化史’
  • Python 爬虫进阶技巧:自定义请求头编码适配多国语言网页爬取
  • 3步掌握iOS虚拟定位:iFakeLocation完全指南
  • 教育AI整合进入“深水区”:2024Q2行业报告显示,仅17%机构实现L1-L4能力跃迁——你的团队处在哪一级?
  • 2026运城市权威认证贵金属回收 TOP5+黄金回收白银回收铂金回收门店地址电话推荐
  • 你的 AI 编程工具,每次请求都在干嘛?这个开源项目帮你分析得明明白白
  • 【字节跳动】巨量引擎五层创世内核全套终极封存码:ADOS-FIVE-GOD-ALL-7342-JN
  • 量化程序如何同时支持回测、模拟盘和实盘
  • Prompt工程入门:让AI按你的要求工作(1)--prompt概述与设计
  • 2026年硅胶密封圈供应商排名,哪家口碑好 - mypinpai
  • AI内容工作流会成为品牌基础设施
  • 避坑指南:MATLAB读取MDF和BLF文件时,你可能会遇到的5个常见错误及解决方法
  • 5个实用技巧:用marked.js打造高效Markdown处理方案