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>
7.1 KiB
2026-07-01 — Funding rate come segnale TIME-SERIES direzionale su BTC/ETH (R0701): SCARTATO
Contesto
Filone: il funding orario Hyperliquid come proxy di POSIZIONAMENTO/sentiment con valenza
direzionale a orizzonte giornaliero su BTC/ETH — NON carry. Angolo diverso dal prior art già
chiuso: FC01 (carry cross-sectional delta-neutral 19 alt → LEAD fragile SCARTATO,
2026-06-22-funding-carry-hl.md) e funding price-clock intraday (drift attorno agli stamp →
FAIL, onda intraday). Qui l'ipotesi è: funding estremo = affollamento long → fade; funding in
espansione = domanda persistente → follow; funding affollato = de-risk del trend (gate).
Attrattiva a priori: 2 gambe BTC/ETH perp = eseguibile al capitale reale ~$600 (non STAT-MODE
come XS01/opzioni) — se avesse retto sarebbe stato deployabile.
Script: scripts/research/r0701_funding_ts.py.
Dati e causalità (data-first)
data/raw/hlfund_{btc,eth}_1h.parquet: 2023-05-12 → 2026-06-22, 1138/1138 giorni validi, 0 gap dopo il 2023-06 (primi ~27 giorni a cadenza 8h — la somma giornaliera degli stamp li gestisce indifferentemente). Funding medio +14.4%/anno BTC, +14.6% ETH; std del funding giornaliero ~5.5 bps.- Join causale (il punto delicato): le barre 1d di
altlib.getsono open-labeled (datetime = 00:00 UTC del giorno D; il close della barra D è noto alle 00:00 di D+1). Il feature-day D aggrega i SOLI stamp in [D 00:00, D+24h) — l'ultimo alle 23:00 — quindi tutto è noto PRIMA della decisione al close della barra D;eval_weightsshifta la posizione al giorno D+1. Prefix-consistency check esplicito: max diff 0.0 (nessun leak). - Valutazione su finestra TRONCATA alla copertura funding, non sul frame prezzi 2018+: fuori
copertura il target sarebbe zero per costruzione e i giorni-zero (a) gonfiano il T del
deflated-Sharpe (anti-conservativo) e (b) diluiscono
cand_insample_sharpe(il gatehas_insample_edgescatterebbe a vuoto). La logica distudy_family_honestè replicata ESATTAMENTE sui frame troncati coi primitivi altlib (selezione IN-SAMPLE-ONLY → gates study_marginal → DSR sull'intera griglia). Cross-checkstudy_marginalnon-troncato in coda: stessi verdetti (abs WEAK / marginal NEUTRAL / earns_slot False). - ⚠️ STORIA CORTA: ~3.1 anni totali → in-sample pre-HOLDOUT ~1.6a (meno warmup z), hold-out 2025+ ~1.5a. Dichiarato: nessun numero qui ha il peso statistico di TP01 (7 anni).
Metodo
Famiglia a griglia modesta, 1d, 50/50 BTC+ETH, vol-target 20% cap 2x (convenzione TP01), fee 0.10% RT + sweep 0.00-0.30%:
- FADE: z-score(funding daily, lb) ≥ thr → short; ≤ −thr → long (fade dell'affollamento).
- FOLLOW: z ≥ thr → long; ≤ −thr → short (sentiment momentum).
- GATE: trend long-flat TP01-like (sgn mom 30d+90d) ma FLAT quando z ≥ thr (de-risk crowding).
- DIVERGE: momentum prezzo 20d seguito se funding NON affollato (z ≤ −thr), fatto se z ≥ thr.
Griglia: 4 forme × lb {7,14,30,60}g × thr {0.5,1.0,1.5} = 48 celle. Selezione cella
in-sample-only (mai sul hold-out), deflated-Sharpe su tutte le 48, gates marginali
(marginal_vs_tp01), boundary-shift della finestra di aggregazione funding (−0/3/6/9/12h),
eval_weights_smallcap a $600.
Risultati
Best in-sample per forma: fade 0.34, follow 0.81, gate 1.76, diverge −0.34 — il segnale puro-funding è debole ovunque; solo la forma che CONTIENE il trend ha Sharpe.
Cella scelta (in-sample): GATE lb=60 thr=1.5 — IS 1.76, FULL 1.16, HOLD 0.29.
| Gate | Esito |
|---|---|
| Deflated-Sharpe (48 celle) | 0.215 (null-max atteso 1.59) → FAIL (soglia 0.95) |
| Assoluto (frame troncati) | WEAK (minFull +0.97, ma minHold +0.04 BTC); fee-survive fino a 0.30% RT |
| Marginale vs TP01 | NEUTRAL: corr 0.879 (hold 0.92), beta 0.77; uplift w25 hold +0.001; robust_oos=False (jackknife −0.074); multicut 2026 −0.423 |
| earns_slot / earns_slot_honest | False / False |
| Realism | prefix-diff 0.0 (causale); boundary-shift sign-stable (uplift spread 0.047); smallcap $600 haircut ~0.00 (eseguibile, irrilevante senza edge) |
Controllo decisivo (lezione TP01-DVOL-overlay) — lo stesso trend long-flat SENZA gate funding:
trend NUDO : IS 1.65 FULL 1.14 HOLD 0.37
trend+GATE : IS 1.76 FULL 1.16 HOLD 0.29 corr(gated,nudo)=0.928
delta del gate funding: FULL +0.013, HOLD −0.080
→ tutto lo Sharpe della "vincitrice" è il trend; il contributo del funding è ~zero in-sample e negativo sul hold-out. Il gate è TP01 travestito.
Miglior cella puro-funding (la vera tesi del filone): FOLLOW lb=60 thr=0.5 — IS 0.81 ma FULL −0.28, HOLD −1.69, marginale DILUTES (uplift w25 hold −0.778). L'in-sample 0.81 era "long-il-toro-2023/24" travestito: z-alto di funding = rally già in corso; nel 2025-26 la stessa regola è sistematicamente dalla parte sbagliata. FADE (shortare il crowding) perde sul toro e non recupera abbastanza nel chop; DIVERGE negativa ovunque. NB: esistono celle gate con HOLD migliore (es. gate 7/1.5 HOLD 0.96) — sceglierle sarebbe selection-on-holdout, il gate del 2026-06-29 esiste esattamente per questo.
Perché fallisce (meccanismo)
- Su asset MAJOR il funding è quasi sempre positivo e segue il prezzo con lag: lo z-score alto coincide col momentum già espresso → FOLLOW è trend-beta ritardato (muore quando il regime gira), FADE è shortare il toro. Non c'è l'anti-persistenza ("crowding → reversal") che la tesi richiede — a 1d, su BTC/ETH, le liquidazioni-da-crowding sono già nel prezzo prima che lo z-score giornaliero diventi estremo.
- L'unico uso "funzionante" (gate di de-risk sul trend) è ridondante: TP01-like è già flat quando serve. Stesso verdetto di macro-regime-gate (corr 0.989) e DVOL-overlay: la famiglia "overlay prudenziale su TSMOM" è esaurita — eredita lo Sharpe del trend e non aggiunge nulla.
Verdetto
SCARTATO. earns_slot=False, earns_slot_honest=False (DSR 0.215). Il funding time-series
non ha informazione direzionale propria su BTC/ETH a 1d; l'unica cella con Sharpe è trend
travestito con contributo funding OOS negativo. Niente forward-monitor: non c'è una componente
funding da monitorare. Con FC01 (carry cross-sectional) e il price-clock intraday, il filone
"funding come segnale" su dati certi è ora chiuso su tre lati.
Lascito
scripts/research/r0701_funding_ts.pyriusabile: (a) loader funding→daily causale per barre open-labeled (finestra [D, D+24h), gestione cadenza mista 8h/1h, flag validità copertura); (b) pattern "truncation-honest" per dataset a copertura parziale — replica distudy_family_honestsu finestra troncata per non gonfiare il T del DSR né diluirehas_insample_edgecon anni di zeri (riusabile per ogni serie corta tipo DVOL/HL).- I parquet
hlfund_*restano certificati. Se mai si tornasse sul funding: gli estremi VERI (squeeze) vivono sugli alt, ma è di nuovo cross-sectional → STAT-MODE a $600, soglia di prova alta (e FC01 ha già mostrato la fragilità d'universo).