"""PR01 — Pairs / Spread Mean-Reversion fra cripto (market-neutral). FAMIGLIA NUOVA.

Distinta da tutto l'esistente (single-asset direzionale): scommette sul RIENTRO del
log-ratio di due cripto verso la sua media. Market-neutral (long A / short B) ->
correlazione ~0.02 col mercato -> diversificatore prezioso.

Logica (engine onesto verificato in scripts/analysis/pairs_research.py):
    r[i] = log(closeA[i]/closeB[i]); z[i] = (r[i]-SMA_n(r)[i]) / STD_n(r)[i]   (causale)
    z <= -z_in  -> LONG ratio (long A / short B)
    z >= +z_in  -> SHORT ratio (short A / long B)
    EXIT: |z| <= z_exit (rientro) o time-limit max_bars. Ingresso/uscita a close.
    Fee su 2 GAMBE = 2*fee_rt*lev (0.20% RT/coppia). Filtro candele sporche (salto>8%).

Validazione anti-overfit (netto, fee 0.20% RT/coppia a 2 gambe, leva 3x, OOS = ultimo
30%, CONFIG UNIVERSALE n=50 z_in=2.0 z_exit=0.75 max_bars=72, 1h):
    ETH/BTC : CAGR 158% / Sharpe 4.36 / 8/9 anni+   (regge fee 6x)
    LTC/ETH : CAGR  92% / Sharpe 3.08 / 8/8 anni+
    ADA/ETH : CAGR  91% / Sharpe 2.69 / 7/8 anni+
    BTC/LTC : CAGR  60% / Sharpe 2.36 / 7/8 anni+   (robusta anche a 4h)
    ETH/SOL : CAGR  74% / Sharpe 1.96 / 5/7 anni+   (la piu' debole, DD ~63%)
  - No look-ahead verificato (z[i] invariato perturbando il futuro).
  - PLATEAU non picco: heatmap n x z_in -> 20/20 celle Sharpe>1 (ETH/BTC, BTC/LTC).
  - WALK-FORWARD (rolling train 2y / test 6m): ETH/BTC 11/12 finestre positive,
    BTC/LTC 9/10 -> edge distribuito su tutta la storia, non un regime singolo.
  - Stress costi: 5/6 reggono fee+slippage realistici; solo ETH/BTC regge fee 6x.
  - Correlazione con BTC daily ~0.02-0.08 -> market-neutral.
  - SCARTATA BNB/ETH: robusta solo coi suoi parametri (overfit), crolla con la universale.

WORKER LIVE: implementato `src/live/pairs_worker.py` (2 gambe, fee doppie, stato
persistente) e wired in `multi_runner` (sezione `pairs:` in strategies.yml). Validato:
  - LOGICA: `validate_worker_pairs.py` -> replay storico == backtest pairs_sim ESATTO
    (ETH/BTC: capitale, n.trade, win% identici).
  - LIVE: `live_smoke_pairs.py` (smoke reale Cerbero) -> tutte e 5 le coppie con feed
    live fresco. Naming Deribit corretto: BTC/ETH = "<COIN>-PERPETUAL" (inverse),
    alt = "<COIN>_USDC-PERPETUAL" (lineari USDC, storia dal 2022). Trappola: usare
    "LTC-PERPETUAL"/"SOL-PERPETUAL" da' vuoto/dati sbagliati -> SEMPRE _USDC-PERPETUAL.
    Resta da verificare in trading reale solo la liquidita'/fill in esecuzione.
"""
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.pairs_research import pairs_sim, OOS_FRAC  # noqa: E402

# CONFIG UNIVERSALE (anti-overfit): un'unica terna per TUTTE le coppie, niente
# cherry-picking per-coppia. Validata come ALTOPIANO (heatmap n x z_in: 20/20 celle
# Sharpe>1 su ETH/BTC e BTC/LTC) e walk-forward (ETH/BTC 11/12 finestre+, BTC/LTC 9/10).
UNIV = dict(n=50, z_in=2.0, z_exit=0.75, max_bars=72)

# Coppie robuste con la config universale. Sempre alt-liquido vs major (mai alt/alt).
# BNB/ETH SCARTATA: era robusta solo coi suoi parametri (n=30, z_exit=1.0) -> overfit;
# con la config universale crolla (Sharpe 1.5, DD 71%) ed e' la prima a morire allo stress costi.
PAIRS = [
    ("ETH", "BTC", UNIV),    # la migliore (Sharpe 4.4 univ), regge fee 6x
    ("LTC", "ETH", UNIV),
    ("ADA", "ETH", UNIV),
    ("BTC", "LTC", UNIV),    # robusta anche a 4h
    ("ETH", "SOL", UNIV),    # piu' debole (DD ~63%, storia SOL corta) -> peso ridotto
]


def run():
    print("=" * 92)
    print("  PR01 — PAIRS spread reversion (market-neutral) | netto fee 0.20% RT/coppia, leva 3x")
    print("=" * 92)
    print(f"  {'coppia':<10s}{'trd':>5s}{'win%':>6s}{'CAGR%':>7s}{'OOS DD%':>8s}{'DD%':>6s}{'Shrp':>6s}{'anni+':>7s}")
    for a, b, p in PAIRS:
        f = pairs_sim(a, b, **p)
        o = pairs_sim(a, b, **p, split_frac=1 - OOS_FRAC)
        yrs = f["yearly"]; pos_y = sum(1 for v in yrs.values() if v > 0)
        print(f"  {a+'/'+b:<10s}{f['trades']:>5d}{f['win']:>6.1f}{f['cagr']:>7.0f}{o['dd']:>8.0f}"
              f"{f['dd']:>6.0f}{f['sharpe']:>6.2f}{f'{pos_y}/{len(yrs)}':>7s}")
    print("\n  Market-neutral (corr ~0.02-0.08 col mercato) -> ottimo diversificatore di portafoglio.")
    print("  Pattern: solo alt-liquido vs major (BTC/ETH); alt-vs-alt e' rumore.")
    print("  NB: 2 gambe (long A / short B), fee doppie. Worker live da estendere prima del live.")


if __name__ == "__main__":
    run()
