370 浏览
0
一、环境信息
============================================================
- 产品:TqSdk(python),版本 3.10.2
- 账户:免费版(信易账户登录,1 个实盘账户 宏源期货账户)
- 部署:Linux 云服务器,常驻一个 scheduler 进程,仅此一个进程使用本信易账户
- 订阅内容:约 65 个期货品种主连 KQ.m@XXXX 的 300s × 300 根 K线 + 对应 quote(行情+K线)
- 实盘账户通过 CTP 柜台接入

============================================================
二、问题现象(2026-09-23 交易日)
============================================================
1. 开盘 09:09 前后正常(09:09-09:16 正常开仓成交),但从 09:15 起全市场 K线数据开始停滞:
   - 09:15:23 起,每 5 分钟一条告警:K线持续陈旧(无变化),覆盖全市场 50+ 品种
   - 09:10 后 JDL8(鸡蛋)5分钟K线即不再更新(重启时检查发现最后K线停在 09:10)
2. 11:29 前后 JDL8 quote 彻底停更(14:55 时检测到 quote 已 12307 秒≈3.4 小时未更新)
3. 故障期间进程本身存活:心跳、持仓对账、保证金刷新均正常,无异常退出
4. 三次重启进程(11:34、12:43、15:02,均 SIGTERM 优雅退出后重启)都无法恢复实时行情推送
5. 15:03/15:15 重启后检查,JDL8 日盘K线缺口仍在扩大(93 分钟→105 分钟);
   最终 15:15-15:16 靠"定时数据补全"(走历史数据接口)才把当日K线补齐
6. 即:实时行情推送通道全天未恢复,历史数据接口全程可用 —— 两者状态明显分离
7. 副带影响:14:55 按策略平仓时因行情过期(价格 3 小时未更新),限价/市价追价均未成交,
   残留 1 手持仓(用户已手动处理)

============================================================
三、已排查 / 已排除
============================================================
- 非进程未启动:全天进程存活,多次重启均未能恢复
- 非单品种问题:全市场 50+ 品种同时 stale
- 非本地网络断开:连接状态正常(socket 可见 ESTAB),但存在 CLOSE-WAIT 半开连接,
  疑似对端已不再推送数据而本地未感知
- 非代码问题:故障期间运行的是旧代码;重启加载新代码后(已确认)行情仍未实时恢复

============================================================
四、希望官方确认的问题
============================================================
1. 免费版行情服务器是否存在"订阅合约数/瞬时订阅请求"的动态限制?
   我们订阅约 65 个主连(行情+K线),按论坛官方答复"100 个以内应该没有问题"应不超限,
   但整日断流是否符合该规则?触发条件是哪些?
2. 为什么重启进程(重新 init 天勤连接、重新订阅)无法恢复实时推送,而历史数据接口正常?
   免费版行情服务器对同一账户的"反复重连+重新订阅"是否有冷却/熔断机制?
3. 该类断流是否有官方日志/诊断手段(如服务端账户连接记录)可以提供给用户自查?
4. 免费版行情服务器是否不保证实时切换/持续推送?若属正常波动,实盘量化用户应如何规避
   (升级专业版是否能解决?专业版"更稳定行情服务器链接"与免费版的具体差异是什么?)
5.已经在宏源期货开户并实盘,只能用你们免费的行情网关吗?还是说需要你们的认证授权后我才能使用专业版的行情网关地址/通知/api网关吗?(麻烦详细给个回复)

=========================================================== 五、联系方式与希望 ============================================================ - 今天(2026-09-23)为实盘交易日,行情断流造成实际平仓失败,影响较大 - 期望:能确认断流原因、告知规避方式,并提供账户侧诊断数据佐证 - 如需更多日志片段/复现上下文,我可随时提供完整 scheduler.log / broker.log 片段
chaos 已回答的问题 18小时 前
0

2026-09-23 当天没有收到其他用户集中反馈全市场行情停更的问题,因此建议先检查运行服务器的配置环境、程序调用方式以及本地到实时行情节点的网络链路。

本地常见原因包括:

– `api.wait_update()` 没有持续执行,被 `time.sleep()`、同步 HTTP 请求、数据库写入、耗时计算或 scheduler 中的长任务阻塞;
– 在不同线程、不同进程或多个 scheduler 任务之间共用同一个 `TqApi` 实例;
– 在定时任务或循环中反复调用 `get_quote()`、`get_kline_serial()`,不断创建新的行情对象和订阅;
– 重启时旧进程没有真正退出,存在残留进程、多个守护器或重复连接;
– 云服务器的安全组、防火墙、NAT、代理、DNS、运营商路由或 WebSocket Upgrade 链路异常;
– CPU、内存、文件描述符或磁盘日志写入出现瓶颈。

建议先使用不含 scheduler、数据库和交易逻辑的最小程序,只订阅 1~2 个具体合约,持续调用 `wait_update()` 并记录 `quote.datetime`。最小程序正常后,再逐步增加订阅数量,这样可以区分环境、网络、订阅规模和业务代码问题。

针对你提出的五个问题,逐项回复如下:

1. **是否存在订阅数量或瞬时订阅限制?**

目前没有“触发限制后将整个账户静默停更一整天”的使用规则。免费版和专业版的流控规则相同,均由后台动态设置,没有对外公开;如果触发流控,程序会有明确报错。从你描述的现象看,与流控关系不大。

2. **为什么重启不能恢复,是否存在重连冷却或熔断?**

目前没有针对这种情况设置“重启后仍禁止实时行情一整天”的账户冷却或熔断机制。

3. **有哪些日志和诊断手段?**

请通过 `TqApi` 的 `debug` 参数指定日志文件,保存完整 TqSdk 日志,并提供首次停更前 10 分钟至重启后的日志、Python/TqSdk/websockets 版本、去除交易逻辑后的最小代码。业务层 scheduler 日志只能说明外层任务仍在运行,无法确认 `wait_update()` 和实时行情连接是否正常。

4. **免费版是否不保证持续推送,升级专业版能否解决?**

不是,免费版正常情况下也应持续推送其权限范围内的实时行情。专业版使用相对更稳定的行情服务器,但本次现象如果是本地程序、运行环境或网络链路导致的,升级专业版也不一定能够解决。

5. **已经在宏源期货开户,如何使用专业版行情?**

是否使用专业版行情服务器取决于快期账户是否开通 TqSdk 专业版权限,与是否在宏源期货开户不是一回事。期货公司开户不会自动获得专业版行情权限。如需使用专业版,可以在用户中心申请试用或购买;权限开通后由 TqSdk 根据账户权限连接相应服务,不需要用户手工修改行情网关地址。

chaos 发表新评论 18小时 前

有其他问题欢迎加入官方Q群748265037一起交流

您正在查看1个答案中的1个,单击此处查看所有答案。