Justin Gu
1f040afabf
feat(reconnect): 引入服务器健康分引擎 + K线空数据故障转移
彻底解决通达信服务器"跳来跳去"问题:
1. 新增 _health.py 健康分引擎:失败乘性降权(×0.5)、连续失败3次进
120s 冷却、成功加性恢复(+0.2)。rank_by_health 按 latency/score
(有效延迟)重排,冷却中的剔除。全健康时恒等映射,对既有测试零影响。
2. get_index_bars/get_security_bars 空数据时自动逐台换台(此前直接
返回空 DataFrame,是日志"指数K线响应在第1/800条处被截断"后用户拿
不到数据的根因)。复用泛化后的 _find_host_returning_data。
3. select_best_host_*/find_working_host_* 应用 rank_by_health 重排;
空数据验证失败/异常时调 record_failure,命中调 record_success。
4. 8 个 _execute(A股/MAC/EX/MAC-EX × sync/async)统一注入健康分记录:
成功 record_success、连接失败 record_failure。
5. security_bars 截断日志区分"首条即空(服务器无数据)"与"末尾截断"。
测试:26 个新增(15 health + 7 failover + 4 ex-client 健康分追踪),
全量 reconnect/failover/decode 回归通过,ruff/mypy 通过。
2026-07-13 15:59:28 +08:00
..
2026-04-11 19:55:19 +08:00
2026-07-03 01:30:40 +08:00
2026-05-22 22:44:45 +08:00
2026-06-12 21:10:50 +08:00
2026-06-09 18:15:37 +08:00
2026-06-10 15:03:41 +08:00
2026-07-04 00:08:38 +08:00
2026-06-12 20:59:59 +08:00
2026-07-04 00:08:38 +08:00
2026-07-09 20:34:23 +08:00
2026-07-10 15:17:00 +08:00
2026-06-12 20:47:03 +08:00
2026-07-09 20:16:12 +08:00
2026-06-09 16:43:44 +08:00
2026-05-22 04:19:07 +08:00
2026-06-11 22:56:23 +08:00
2026-06-10 15:03:41 +08:00
2026-06-11 02:25:42 +08:00
2026-06-17 18:17:32 +08:00
2026-07-02 03:37:37 +08:00
2026-06-14 23:58:24 +08:00
2026-07-02 03:37:37 +08:00
2026-06-30 15:02:27 +08:00
2026-05-21 23:21:21 +08:00
2026-05-21 23:21:21 +08:00
2026-05-21 23:21:21 +08:00
2026-07-08 18:07:37 +08:00
2026-07-07 20:36:44 +08:00
2026-07-07 20:13:39 +08:00
2026-07-13 15:59:28 +08:00
2026-06-13 21:21:33 +08:00
2026-06-13 21:21:33 +08:00
2026-06-13 21:21:33 +08:00
2026-06-13 21:21:33 +08:00
2026-06-13 21:21:33 +08:00
2026-07-13 15:59:28 +08:00
2026-06-10 15:03:41 +08:00
2026-07-13 15:59:28 +08:00
2026-06-10 15:03:41 +08:00
2026-07-04 02:11:27 +08:00
2026-06-10 15:03:41 +08:00
2026-06-30 15:02:27 +08:00
2026-07-03 22:42:04 +08:00
2026-07-04 00:17:06 +08:00
2026-07-03 15:42:06 +08:00
2026-07-04 21:07:39 +08:00
2026-06-14 18:46:02 +08:00
2026-07-03 03:55:35 +08:00
2026-07-03 03:34:34 +08:00
2026-07-09 20:16:12 +08:00
2026-07-10 15:17:00 +08:00
2026-06-13 21:21:33 +08:00
2026-06-10 15:03:41 +08:00
2026-07-02 03:37:37 +08:00
2026-07-12 16:56:41 +08:00
2026-06-11 02:34:00 +08:00
2026-07-02 03:37:37 +08:00
2026-06-25 03:46:57 +08:00
2026-06-15 00:31:13 +08:00
2026-07-04 20:50:07 +08:00
2026-06-13 21:09:55 +08:00
2026-06-15 00:31:13 +08:00
2026-07-09 18:42:00 +08:00
2026-06-07 21:13:49 +08:00
2026-06-07 21:13:49 +08:00
2026-06-07 21:13:49 +08:00