Changes: - Simplify is_crash(): remove con2 (consecutive decline) condition, keep only single-day drop > 5% - Extract _compute_base_momentum() to eliminate factor dispatch duplication - Add min_hold_days config for forced holding constraint (currently disabled, value=1) Backtest comparison (2020-01-10 ~ 2026-06-09): | Metric | Old (con1 OR con2) | New (con1 only) | |-----------------|--------------------|-----------------| | Total Return | 241.73% | 271.98% | | Annual Return | 22.10% | 23.79% | | Max Drawdown | -16.27% | -16.27% | | Sharpe Ratio | 1.09 | 1.14 | | Calmar Ratio | 1.36 | 1.46 | | Win Rate | 53.71% | 53.78% | | Rebalances | 393 | 362 | Conclusion: Relaxing crash filter improves return (+1.69% annual) with same drawdown and fewer rebalances.
1.7 MiB
3983x6024px
1.7 MiB
3983x6024px