# 2026-07-01 — Stagionalità CROSS-SECTIONAL sull'universo Hyperliquid → SCARTATO ## Ipotesi Effetti calendario **relativi tra i 19 alt major HL** (weekday tilt, turn-of-month, pattern weekend→lunedì nel cross-section), long/short market-neutral. L'angolo è diverso dal prior art già morto (trackF seasonality BTC/ETH = buy&hold travestito; crypto_weekend_signal/overnight = look-ahead; open_drive = artefatto calendario ucciso da `day_boundary_robust`): essendo il segnale **demeaned cross-section**, il buy&hold travestito è strutturalmente escluso… *in prima battuta* (vedi diagnostica beta sotto). ## Metodo (test statistico PRIMA della strategia) Script `scripts/research/r0701_xs_seasonal.py`. Dati `data/raw/hl_*_1d.parquet`, 19 major XS01 (lista `src/portfolio/sleeves.XS_UNIVERSE`), **912 giorni** (2024-01-02 → 2026-07-01, ~2.5 anni), 0 barre vol=0. Ritorno relativo x[t,a] = r[t,a] − media cross-section del giorno. Per ogni bucket calendario: **tilt bucket-specifico** per asset = media di x nel bucket − tilt incondizionato dell'asset (isola il calendario dal drift relativo generico). **Persistenza split-half**: Spearman rank-corr del vettore tilt (19 asset) H1 vs H2, per bucket. **Null**: 2000 permutazioni delle etichette entro ciascuna metà → distribuzione del **max-statistic** (controlla il multiple-testing sui bucket e il confound "alpha persistente dell'asset"). Soglia severa p<0.05 sul max. Regola del mandato: senza persistenza → **nessun backtest**. ## Numeri | Test | Statistica | Null 95° pctl | p | Esito | |---|---|---|---|---| | [A] Weekday (7 bucket) | max rank-corr **+0.511** (Wed); Mon +0.38, Sun +0.37, Fri +0.04 | +0.604 | **0.159** | FAIL | | [B] Weekend vs feriali | +0.268 | +0.428 | **0.178** | FAIL | | [C] Turn-of-month (±2gg) | +0.221 | +0.451 | **0.226** | FAIL | | [D] IC weekend→lunedì | FULL −0.053 (t=−1.94); H1 −0.006 (t=−0.17) vs H2 −0.100 (t=−2.4) | — | non persiste | FAIL | Con ~65 osservazioni per weekday per metà, lo std di una rank-corr su 19 asset è ~0.24 → il max-su-7 sotto puro rumore arriva a ~0.60: il +0.51 reale è *dentro* il rumore. ## Diagnostica: perché tutte le rank-corr weekday sono positive? Non è tilt idiosincratico, è il **canale-beta**: il mercato EW ha un pattern weekday di *livello* che si ripete nelle due metà (Sun −42/−30 bps, Sat +26/+25, Mon +35/+32) e la dispersione di beta (0.53→1.26) lo proietta nel cross-section — rank-corr(tilt, beta): **Sun −0.642**, Sat +0.325, feriali ~0. Cioè la poca "persistenza" visibile è l'effetto weekday di MERCATO (dominio trackF, già scartato come buy&hold travestito) che rientra dalla finestra via beta. Un eventuale L/S "weekday tilt" sarebbe stato in gran parte un book short-beta-la-domenica — non un edge calendario cross-sectional. ## Note sui gate non raggiunti - **day_boundary_robust** (obbligatorio per ogni effetto calendario): NON eseguibile sui 19 alt — i dati HL locali sono **solo 1d**, il confine giorno non è ri-tagliabile. Anche con persistenza, il verdetto massimo sarebbe stato LEAD-forward *condizionato* a barre orarie HL, mai sleeve. Con lo SCARTATO allo step 1 il punto è moot, ma resta il vincolo per chiunque riapra il filone. - **Fee**: mai arrivati al backtest; nota strutturale: un weekday-tilt L/S ribilancia ogni giorno (weekday di domani ≠ oggi) → turnover ~2×gross/die, morte-per-fee quasi certa a 0.10% RT anche con edge lordo. - **DSR**: non calcolato (nessuna cella backtestata — il branch strategia esiste nello script ma non si attiva senza persistenza). ## Verdetto **SCARTATO** allo step statistico, senza backtest. Tre motivi: (1) nessuna persistenza split-half sopra il null permutato (p 0.16–0.23 su tutti i test, IC weekend→lunedì non persiste tra le metà); (2) la sola struttura visibile è il canale-beta di un pattern weekday di mercato — la stessa famiglia già scartata in trackF, non un effetto cross-sectional; (3) ~2.5 anni × effetto calendario × turnover giornaliero = rumore + morte-per-fee anche nello scenario migliore. File: `scripts/research/r0701_xs_seasonal.py` (deterministico, seed 20260701, ~2 min).