491411ac77
Ondata onesta su angoli non coperti: funding-TS (chiude il filone funding su 3 lati), breadth alt (non-ridondante ma DSR 0.43, rivisitabile con storia), XS-residmom (REDUNDANT), pesi+guardia-DD (EW-STR refutato dallo scettico come selezione-sull'hold-out di 2° ordine, firma best-of-15), VRP-refine (filone esaurito), stagionalità-XS (morta allo step statistico). Lezione codificata: weights_tilt_null + combine_outer in src/portfolio (ogni cambio-pesi vs null di tilt casuali cap-respecting + delta in-sample>=0); 5 test nuovi, suite 165/165. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
70 lines
4.1 KiB
Markdown
70 lines
4.1 KiB
Markdown
# 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).
|