# 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.get` sono **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_weights` shifta 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 gate `has_insample_edge` scatterebbe a vuoto). La logica di `study_family_honest` è replicata ESATTAMENTE sui frame troncati coi primitivi altlib (selezione IN-SAMPLE-ONLY → gates study_marginal → DSR sull'intera griglia). Cross-check `study_marginal` non-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) 1. 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. 2. 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.py` riusabile: (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 di `study_family_honest` su finestra troncata per non gonfiare il T del DSR né diluire `has_insample_edge` con 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).