"""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<SMA{REGIME_N} | netto fee 0.10% RT")
    print("=" * 90)
    full = rot_improved(lookback=LOOKBACK, top_k=TOP_K, regime_n=REGIME_N)
    oos = rot_improved(lookback=LOOKBACK, top_k=TOP_K, regime_n=REGIME_N, oos_frac=0.30)
    print(f"  FULL: {full['ret']:+.0f}%   DD {full['dd']:.0f}%   ({full['pos_years']}/{full['n_years']} anni positivi)")
    print(f"  OOS : {oos['ret']:+.0f}%   DD {oos['dd']:.0f}%")
    print("  Per-anno: " + "  ".join(f"{y}:{v:+.0f}%" for y, v in sorted(full["yearly"].items())))


if __name__ == "__main__":
    run()
