GitHub
36ea8497ae
perf(engine): 信号管线提速 ×12.6 — 向量化快速路径 + 日期查找表 + 去 strftime
基准先行(scripts/bench_engine.py):ma_cross 800 根全流程基线 93.6ms。
profile 打破预期:85% 墙钟在 OrderSimulator._find_bar_index(每信号全列
strftime),而非计划认为的逐 bar 信号循环。三处优化(行为逐位一致):
- Strategy 新增 entry_exit_masks() 显式钩子,19 个内置策略全实现;引擎按
掩码 + 候选事件 bar 状态机一次产出信号,持仓估算逐行复刻
_update_strategy_position(含买不足 1 手退化路径);约束检测
_vectorize_eligibility 显式可测,signal_path=auto/vector/loop 可指定;
不满足约束(无钩子/缠论注入/掩码形状错)自动回退逐 bar
- OrderSimulator._build_dt_lookup:O(信号×bar) 全列扫描 → 每 simulate 一次
O(bar) 查找表(重复日期取首个、未命中 None、object 恒不匹配语义对齐)
- _datetime_to_int 去 strftime:year*10000+month*100+day 整数算术
(NaT→NaN 行为一致),_bind_data 与查找表共用
实测:ma_cross 全流程 93.6→7.4ms(×12.6),信号层 ×1.39~1.72(四策略);
32 点网格寻优 ~3.0s→231ms。对拍 39 例:19 策略×参数变体×warmup/低资金/
费率/缓存,performance/trades/equity/positions 逐位一致。
顺带记录:wr_reversal 默认阈值与 MyTT WR 刻度不匹配(策略恒不交易,既有问题未改)
2026-09-01 23:47:06 +08:00
..
2026-04-11 19:55:19 +08:00
2026-08-26 15:00:53 +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-09-01 23:47:06 +08:00
2026-07-04 00:08:38 +08:00
2026-06-12 20:59:59 +08:00
2026-09-01 22:16:44 +08:00
2026-09-01 22:17:08 +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-09-01 22:17:57 +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-09-01 22:17:08 +08:00
2026-05-22 04:19:07 +08:00
2026-06-11 22:56:23 +08:00
2026-08-26 15:21:35 +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-09-01 17:45:07 +08:00
2026-07-07 20:36:44 +08:00
2026-07-07 20:13:39 +08:00
2026-09-01 22:56:38 +08:00
2026-07-13 15:59:28 +08:00
2026-09-01 17:58:12 +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-08-05 15:58:00 +08:00
2026-06-10 15:03:41 +08:00
2026-09-01 22:17:57 +08:00
2026-09-01 22:17:57 +08:00
2026-09-01 22:17:08 +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-09-01 22:17:08 +08:00
2026-08-19 18:55:48 +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-08-26 15:00:53 +08:00
2026-08-26 15:21:35 +08:00
2026-09-01 22:16:44 +08:00
2026-09-01 17:45:07 +08:00
2026-09-01 23:21:42 +08:00
2026-09-01 23:21:42 +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-08-21 16:57:12 +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-09-01 22:16:44 +08:00
2026-09-01 22:17:28 +08:00
2026-09-01 17:52:36 +08:00
2026-09-01 18:33:49 +08:00
2026-08-19 19:00:42 +08:00
2026-06-07 21:13:49 +08:00
2026-08-31 20:43:35 +08:00
2026-06-07 21:13:49 +08:00