"""ROT02 — Dual-Momentum Rotation (ROT01 + overlay di absolute momentum). Evoluzione di ROT01: alla rotazione cross-sectional (forza relativa) aggiunge un overlay di ABSOLUTE momentum sul mercato: se BTC e' sotto la sua media a `regime_n` giorni (mercato risk-off), va completamente in CASH. Cosi' si evitano i bear di sistema (2022, 2026 YTD) che erano gli unici anni rossi di ROT01. Risultato (netto, fee 0.10% RT, gross 0.45, OOS = ultimo 30%): MIGLIORA TUTTO rispetto a ROT01. ROT01 base : FULL +679% / OOS +44% / DD 53% ROT02 k2 SMA100 : FULL +1095% / OOS +98% / DD 40% (versione iniziale) ROT02 k3 SMA100 : FULL +1303% / OOS +68% / DD 26% <-- DD quasi dimezzato, PnL su MIGLIORIA DD (top_k 2 -> 3): la versione iniziale concentrava il book su 2 soli asset; diversificare su 3 dimezza quasi il drawdown (40% -> 26%) e ALZA pure il ritorno full (+1095 -> +1303), ret/DD da 27 a 50. Il vol-target abbassa il DD ma sacrifica ritorno (solo de-leverage), quindi si tiene top_k=3 senza vol-target. Param-insensitive: top_k 3-4 e regime SMA100-150 danno risultati simili. Dettagli e sweep in scripts/analysis/honest_improve.py (rot_improved). """ from __future__ import annotations import sys from pathlib import Path PROJECT_ROOT = Path(__file__).resolve().parents[2] sys.path.insert(0, str(PROJECT_ROOT)) from scripts.analysis.honest_improve import rot_improved # noqa: E402 LOOKBACK, TOP_K, REGIME_N = 60, 3, 100 # top_k=3 (era 2): dimezza il DD def run(): print("=" * 90) print(f" ROT02 DUAL-MOMENTUM | 1d lb={LOOKBACK} top{TOP_K} + cash se BTC