shy3130
939149e8a0
feat(backtest): 强制重跑 — force 绕过同参数任务结果缓存; 修 cancel key 对齐
策略回测按全参数 md5 作 job_key, 已完成任务结果保留 5 分钟 — 同参数再次
运行直接命中缓存返回旧结果 (重连/切页恢复设计的副产物), 用户改完数据后
重跑拿到的仍是旧行为产物, 此前没有绕过手段。
- startBacktest/strategy_stream 新增 force: 掺入 job_key 使其不命中缓存
必然重算; 不动任务复用/并发语义, 重连与取消按同一 qs 重算 key 天然对齐
- 运行回测旁新增「强制重跑」按钮 (RefreshCw, 次要样式, 悬停说明语义),
disabled 条件与主按钮一致
- 补算环境并继续改为 handleRun(true): 已失败任务的 error 同样被任务缓存
保留, 补算成功后自动重跑不带 force 会命中同参数旧 job 直接重放补算前的
报错 — 用户实测补算完成后仍提示"缺少前一交易日环境 2019-10-22 等 112 天"
即此因 (实测数据已补齐: 2019-10-22~2026-10-29 共 1703 行无缺口)
- 修预存 bug: /strategy/cancel 重算 job_key 漏了 minute_fill 与
regime_filter — 开了分钟K精确回测或市场环境过滤的任务停止按钮失效
验证: test_backtest_stream_force 3 passed (force 改 key 且幂等; cancel 带
force/minute_fill/regime_filter 的 qs 能取消到、缺参取消不到 — 走真实
qs→key 解析路径不启动回测线程); ruff 与 HEAD 对照零新增; pnpm build 通过。
Signed-off-by: shy3130 <shy3130@qq.com>
2026-10-29 13:09:50 +08:00
..
2026-10-27 18:44:47 +08:00
2026-10-10 21:10:44 +08:00
2026-10-10 22:15:17 +08:00
2026-08-30 19:05:32 +08:00
2026-10-04 00:29:59 +08:00
2026-10-07 21:45:40 +08:00
2026-10-07 21:45:40 +08:00
2026-09-04 12:03:06 +08:00
2026-09-21 13:46:32 +08:00
2026-10-10 21:10:44 +08:00
2026-10-29 11:10:06 +08:00
2026-10-29 11:10:06 +08:00
2026-10-13 13:40:17 +08:00
2026-10-25 17:31:11 +08:00
2026-09-09 07:37:17 +09:00
2026-10-22 17:47:59 +08:00
2026-10-10 21:10:44 +08:00
2026-10-27 18:44:47 +08:00
2026-10-27 18:44:51 +08:00
2026-10-16 13:32:26 +08:00
2026-10-10 21:10:44 +08:00
2026-09-19 07:12:25 +09:00
2026-10-25 17:31:11 +08:00
2026-09-23 19:53:46 +09:00
2026-09-20 07:35:13 +09:00
2026-09-26 17:24:58 +08:00
2026-09-19 07:12:40 +09:00
2026-10-25 17:31:11 +08:00
2026-09-19 07:12:37 +09:00
2026-09-20 07:30:54 +09:00
2026-10-25 17:31:11 +08:00
2026-09-19 07:12:33 +09:00
2026-09-26 17:44:47 +08:00
2026-09-19 07:12:29 +09:00
2026-09-14 20:02:10 +09:00
2026-08-30 19:05:27 +08:00
2026-08-30 19:05:31 +08:00
2026-08-05 17:56:27 +08:00
2026-09-05 15:41:15 +08:00
2026-07-12 13:52:49 +08:00
2026-09-10 19:38:33 +09:00
2026-10-25 20:14:10 +08:00
2026-10-29 13:09:50 +08:00
2026-09-03 13:26:42 +08:00
2026-09-05 22:49:52 +08:00
2026-09-11 23:49:29 +08:00
2026-08-02 10:56:03 +08:00
2026-08-02 10:56:03 +08:00
2026-10-10 21:10:44 +08:00
2026-09-09 07:10:35 +09:00
2026-10-26 12:13:19 +08:00
2026-08-05 17:56:27 +08:00
2026-09-13 21:54:22 +09:00
2026-10-13 13:40:17 +08:00
2026-09-26 19:04:54 +08:00
2026-09-03 13:20:59 +08:00
2026-10-15 15:45:39 +08:00
2026-10-17 22:05:56 +08:00
2026-09-16 19:41:14 +09:00
2026-08-23 19:36:00 +08:00
2026-10-09 16:21:29 +08:00
2026-08-30 19:05:20 +08:00
2026-09-05 15:41:15 +08:00
2026-09-05 15:41:15 +08:00
2026-09-05 15:41:15 +08:00
2026-10-25 17:31:01 +08:00
2026-10-20 15:37:46 +08:00
2026-09-26 20:52:04 +08:00
2026-08-23 19:13:03 +08:00
2026-10-27 18:45:17 +08:00
2026-10-29 10:25:29 +08:00
2026-08-16 23:39:07 +08:00
2026-09-02 20:20:38 +08:00
2026-10-26 14:02:54 +08:00
2026-10-26 15:54:03 +08:00
2026-07-08 13:42:53 +08:00
2026-10-28 09:39:50 +08:00
2026-10-16 09:06:04 +08:00
2026-08-30 19:05:29 +08:00
2026-10-28 12:46:41 +08:00
2026-10-13 13:40:17 +08:00
2026-09-09 07:12:54 +09:00
2026-10-18 14:42:10 +08:00
2026-10-21 09:01:47 +08:00
2026-10-20 16:14:17 +08:00
2026-10-10 21:10:44 +08:00
2026-09-19 16:35:26 +08:00
2026-09-09 11:09:48 +08:00
2026-09-08 23:49:55 +08:00
2026-09-24 17:27:40 +08:00
2026-09-09 11:09:48 +08:00
2026-09-09 11:09:48 +08:00
2026-09-05 15:41:15 +08:00
2026-10-16 09:06:04 +08:00
2026-10-21 20:57:05 +08:00
2026-10-10 21:10:44 +08:00
2026-09-28 19:14:01 +09:00
2026-10-24 22:52:40 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-09-07 08:10:38 +09:00
2026-09-07 08:07:02 +09:00
2026-07-18 00:49:28 +08:00
2026-09-10 08:19:30 +09:00
2026-09-11 00:50:33 +09:00
2026-10-25 17:31:16 +08:00
2026-10-15 16:25:26 +08:00
2026-10-28 12:46:51 +08:00
2026-09-25 21:29:23 +08:00
2026-10-22 17:47:59 +08:00
2026-10-15 12:27:59 +08:00
2026-10-13 13:40:17 +08:00
2026-10-26 13:51:29 +08:00
2026-10-24 22:52:40 +08:00
2026-10-19 14:37:21 +08:00
2026-09-03 13:45:12 +08:00
2026-10-20 13:59:12 +08:00
2026-10-26 22:10:39 +08:00
2026-10-26 22:10:39 +08:00
2026-10-19 14:37:21 +08:00
2026-09-25 21:29:23 +08:00
2026-10-24 22:52:40 +08:00
2026-10-28 12:46:51 +08:00
2026-10-19 00:12:09 +08:00
2026-10-10 21:10:44 +08:00
2026-10-28 12:46:51 +08:00
2026-08-30 18:51:24 +09:00
2026-09-14 19:31:15 +09:00
2026-08-26 00:54:39 +08:00
2026-10-25 17:31:16 +08:00
2026-09-05 15:41:15 +08:00
2026-10-25 17:31:16 +08:00
2026-10-26 14:36:58 +08:00
2026-09-05 15:41:15 +08:00
2026-08-16 23:39:07 +08:00
2026-10-26 15:35:55 +08:00
2026-10-26 14:46:42 +08:00
2026-09-06 18:27:33 +08:00
2026-10-27 18:45:09 +08:00
2026-09-06 18:27:33 +08:00
2026-10-26 15:26:27 +08:00
2026-09-05 15:41:15 +08:00
2026-07-19 16:42:03 +08:00
2026-08-30 19:05:25 +08:00
2026-09-10 07:50:04 +09:00
2026-10-19 15:40:56 +08:00
2026-10-10 21:10:44 +08:00
2026-10-11 15:42:55 +08:00
2026-08-16 23:39:07 +08:00
2026-10-25 23:43:34 +08:00
2026-10-25 23:43:34 +08:00
2026-10-25 23:43:34 +08:00
2026-10-25 23:43:34 +08:00
2026-10-25 23:43:34 +08:00
2026-09-09 11:09:48 +08:00
2026-10-10 21:10:44 +08:00
2026-09-20 20:01:27 +09:00
2026-09-13 22:05:04 +08:00
2026-10-20 01:55:08 +08:00
2026-10-21 18:05:45 +08:00
2026-10-10 21:10:44 +08:00
2026-07-31 19:38:36 +08:00
2026-10-20 13:59:07 +08:00
2026-10-27 18:45:17 +08:00
2026-08-30 22:29:33 +08:00
2026-08-30 22:29:33 +08:00
2026-09-06 18:26:29 +08:00
2026-08-30 19:05:27 +08:00
2026-10-04 16:50:58 +08:00
2026-09-09 07:10:55 +09:00
2026-09-10 07:42:28 +09:00
2026-10-25 17:31:01 +08:00
2026-10-25 17:31:01 +08:00
2026-10-25 17:31:01 +08:00
2026-10-25 17:31:01 +08:00
2026-09-20 19:59:20 +09:00
2026-10-25 17:31:01 +08:00
2026-08-16 23:39:07 +08:00
2026-10-25 17:31:01 +08:00
2026-10-25 17:31:01 +08:00
2026-09-20 14:23:33 +08:00
2026-10-25 17:31:01 +08:00
2026-09-14 13:55:38 +08:00
2026-10-04 16:50:58 +08:00
2026-09-16 19:51:28 +09:00
2026-08-16 23:39:07 +08:00
2026-10-12 22:50:50 +08:00
2026-10-10 21:10:44 +08:00
2026-07-18 00:49:28 +08:00
2026-09-10 07:53:07 +09:00
2026-10-10 21:10:44 +08:00
2026-09-17 20:16:26 +09:00
2026-09-17 20:10:45 +09:00
2026-10-10 21:10:44 +08:00
2026-07-28 09:46:51 +08:00
2026-09-17 20:01:59 +09:00
2026-09-18 19:02:15 +09:00
2026-10-28 08:15:47 +08:00
2026-09-02 20:20:38 +08:00
2026-10-29 11:10:09 +08:00
2026-10-26 00:01:20 +08:00
2026-09-04 11:59:00 +08:00
2026-08-16 23:39:07 +08:00
2026-10-21 18:05:36 +08:00
2026-10-18 14:39:38 +08:00
2026-10-10 21:10:44 +08:00
2026-10-10 21:10:44 +08:00
2026-08-16 23:39:07 +08:00
2026-10-27 18:45:17 +08:00
2026-10-10 21:10:44 +08:00
2026-10-25 23:43:34 +08:00
2026-08-16 23:39:07 +08:00
2026-10-26 00:01:20 +08:00
2026-09-24 13:59:14 +08:00
2026-08-16 23:39:07 +08:00
2026-08-16 23:39:07 +08:00
2026-09-28 19:12:08 +09:00
2026-10-20 15:35:07 +08:00
2026-10-24 22:52:36 +08:00
2026-10-11 15:42:55 +08:00
2026-10-25 17:31:05 +08:00
2026-09-12 17:13:01 +08:00
2026-09-14 07:00:29 +09:00
2026-08-16 23:39:07 +08:00
2026-10-25 17:31:05 +08:00
2026-10-25 17:31:01 +08:00
2026-10-10 21:10:44 +08:00
2026-10-20 01:55:08 +08:00
2026-10-19 08:56:07 +08:00
2026-09-23 20:01:22 +09:00
2026-08-22 20:26:34 +08:00
2026-10-10 21:10:44 +08:00
2026-07-28 21:13:10 +08:00
2026-09-15 17:43:56 +08:00
2026-09-05 21:14:53 +09:00
2026-09-04 16:37:06 +08:00
2026-10-27 18:44:51 +08:00
2026-10-10 21:10:44 +08:00
2026-08-16 23:39:07 +08:00
2026-09-10 19:32:13 +09:00
2026-10-13 13:40:17 +08:00
2026-10-22 17:47:59 +08:00
2026-10-14 15:11:54 +08:00
2026-09-25 16:21:24 +08:00
2026-10-04 22:11:55 +08:00
2026-10-14 15:11:54 +08:00
2026-10-12 15:56:05 +08:00
2026-10-16 09:45:42 +08:00
2026-09-25 20:08:13 +09:00
2026-09-25 19:59:52 +09:00
2026-10-18 14:38:56 +08:00
2026-10-27 18:45:02 +08:00
2026-07-09 17:38:44 +08:00
2026-09-04 16:37:06 +08:00
2026-10-27 18:45:17 +08:00
2026-10-28 12:46:41 +08:00
2026-08-30 18:38:24 +09:00
2026-09-07 15:25:41 +08:00
2026-09-04 16:37:06 +08:00
2026-09-10 08:13:24 +09:00
2026-10-18 14:38:11 +08:00
2026-07-19 09:36:55 +08:00
2026-07-19 10:06:26 +08:00
2026-09-21 12:09:24 +08:00
2026-09-20 17:01:37 +09:00
2026-08-30 19:05:21 +08:00
2026-09-07 22:01:12 +08:00
2026-08-16 23:39:07 +08:00
2026-10-08 13:08:47 +08:00
2026-07-19 10:06:26 +08:00
2026-10-10 21:10:44 +08:00
2026-08-30 19:05:27 +08:00
2026-09-21 12:09:46 +08:00
2026-10-29 10:25:40 +08:00
2026-08-16 23:39:07 +08:00
2026-09-04 12:19:35 +08:00
2026-10-08 13:08:41 +08:00
2026-08-16 23:39:07 +08:00
2026-10-13 13:40:17 +08:00
2026-09-06 16:20:42 +08:00
2026-09-10 08:04:48 +09:00
2026-09-10 07:45:55 +09:00
2026-09-24 11:06:22 +08:00
2026-09-04 11:59:00 +08:00
2026-10-10 21:10:44 +08:00
2026-10-20 16:06:43 +08:00
2026-10-10 21:10:44 +08:00
2026-10-10 21:10:44 +08:00
2026-10-10 21:10:44 +08:00
2026-09-03 13:26:42 +08:00
2026-09-03 13:45:12 +08:00
2026-09-09 07:36:21 +09:00
2026-10-19 16:45:13 +08:00
2026-10-13 13:40:17 +08:00
2026-08-31 16:50:21 +08:00
2026-10-16 09:06:04 +08:00
2026-08-16 23:39:07 +08:00
2026-10-19 16:45:13 +08:00
2026-10-25 20:14:17 +08:00
2026-10-20 16:15:06 +08:00
2026-10-19 16:45:13 +08:00
2026-10-10 21:10:44 +08:00
2026-09-05 15:41:15 +08:00
2026-09-23 07:44:29 +09:00
2026-09-24 20:01:14 +08:00
2026-09-16 19:21:00 +09:00
2026-10-27 18:44:51 +08:00
2026-10-19 16:45:13 +08:00
2026-07-20 13:01:03 +08:00
2026-08-23 19:29:44 +08:00
2026-07-22 11:21:13 +08:00
2026-10-10 21:10:44 +08:00
2026-10-19 00:12:09 +08:00
2026-09-04 16:37:06 +08:00
2026-08-13 20:16:02 +08:00
2026-09-06 13:41:51 +08:00
2026-10-10 21:10:44 +08:00
2026-10-10 21:10:44 +08:00
2026-08-23 19:36:00 +08:00
2026-09-07 15:25:48 +08:00
2026-10-19 16:45:13 +08:00
2026-10-14 16:26:33 +08:00
2026-10-10 21:10:44 +08:00
2026-08-13 20:16:02 +08:00
2026-10-15 16:10:20 +08:00
2026-10-13 13:40:17 +08:00
2026-10-27 18:45:09 +08:00
2026-10-13 18:37:29 +08:00
2026-10-26 09:58:55 +08:00
2026-09-10 19:36:30 +09:00
2026-09-10 19:39:36 +09:00
2026-10-27 21:07:29 +08:00
2026-10-16 16:45:03 +08:00
2026-10-06 12:40:16 +08:00
2026-10-19 16:45:13 +08:00
2026-08-25 14:07:16 +08:00
2026-09-26 11:02:46 +08:00
2026-09-05 21:11:44 +09:00
2026-10-10 21:10:44 +08:00
2026-08-20 16:15:13 +08:00
2026-09-05 21:11:44 +09:00
2026-09-05 21:11:44 +09:00
2026-09-04 16:37:06 +08:00
2026-09-07 15:25:41 +08:00