Commit Graph

3 Commits

Author SHA1 Message Date
1260d53254 data: 添加ETF基础数据CSV文件
包含1600+ ETF的基础信息:代码、名称、类型、规模、成交额、费率等
来源:Tushare API,通过 scripts/enrich_etf_data.py 生成
2026-06-22 16:20:03 +08:00
8c3ae2269a feat: 新增 slope_r2_idm 和 slope_r2_ensemble 动量因子
- slope_r2_idm: slope_r2 × IDM(信息离散动量),惩罚靠少数大涨日撑起来的假动量
- slope_r2_ensemble: 多窗口(63/126/252天) slope_r2 等权融合,捕捉不同周期趋势信号
- 新增 info_dispersal_momentum() 计算正收益天数占比
- 新增 slope_r2_idm_score() 和 slope_r2_ensemble_score() 因子函数
- ensemble 因子需要更长预加载窗口(504天)和计算窗口(252天)
- crash filter 仍使用原始 n_days 窗口
2026-06-12 12:37:29 +08:00
fe73c0f199 refactor(rotation): simplify crash filter and add min_hold_days support
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.
2026-06-09 22:53:52 +08:00