# 2026-06-29 — Filone B: INTRADAY REGIME BTC/ETH — ERM (efficiency-ratio) è un LEAD reale, forward-monitor **Tesi.** Cercare un meccanismo **sub-daily** sui dati certificati 1h→12h BTC/ETH che sia ortogonale **sia** a TP01 (TSMOM trend daily, long-flat) **sia** a SKH01 (regime BuzVola/BuzVolume + Donchian a 230m). SKH01 prova che il sub-daily PUÒ funzionare ed essere quasi-ortogonale: qui un MECCANISMO DIVERSO, basato sulla **qualità del moto intraday** (efficiency-ratio / vol-expansion / thrust) come **regime** che condiziona una posizione direzionale tenuta ~1 giorno. Script `scripts/research/intraday_regime.py`, test `tests/test_intraday_regime.py`. Branch `research/equity-meanrev-ib` (separato, nessun impatto live). Killer ricorrente del progetto sotto le 12h = **muro-fee 0.10% RT + overfitting**. Ricetta SKH01: decisione sub-daily ma **hold ~1 giorno** → pochi trade → la fee non uccide. Ogni meccanismo qui è costruito a basso turnover e giudicato col **fee-sweep alla sua frequenza reale**. ## Meccanismi provati (tutti come posizione CONTINUA decisa ≤ `close[i]`, causali) | | meccanismo | |---|---| | **ERM** | **Efficiency-Ratio regime momentum** (Kaufman): ER = \|moto netto su L barre\| / \|percorso\|. Prendi la direzione del moto netto **solo quando ER ≥ soglia** (regime intraday "pulito"/trendy), altrimenti flat | | VEM | Vol-Expansion Momentum: direzione = segno del moto, attiva solo quando vol-corta > vol-lunga | | VBR | Volatility/thrust breakout (Larry-Williams ROLLING, no calendario): segui i moti > k·ATR | | TOD | Time-of-day seasonality — **CONTROLLO calendario**, incluso APPOSTA per `day_boundary_robust` | ## Selezione + fee-sweep a frequenza reale (vincitori per famiglia, min-asset) ``` ERM: 8h L=2.0 thr=0.35 L/S minFull +0.88 minHold +0.99 f@.20 +0.55 feeOK=True turn/y 125 VEM: 12h Lmom=3 Ls=2 Ll=10 minFull +0.72 minHold -0.29 f@.20 +0.51 feeOK=True (hold<0 → out) VBR: 12h k=1.0 atr=14 L/S minFull +0.33 minHold +1.20 f@.20 +0.25 feeOK=True TOD: 1h minFull -3.99 minHold -4.49 feeOK=False (controllo → FAIL atteso) ``` Solo **ERM** e **VBR** sopravvivono al gate fee+OOS. VEM ha hold-out negativo. TOD esplode (vedi sotto). ## Il candidato: ERM 8h L=2.0 thr=0.35 (L/S) — `earns_slot=True` ``` abs=PASS marginal=ADDS EARNS_SLOT=True standalone: cand FULL 0.919 / HOLD 1.105 (TP01 ref FULL 1.297 / HOLD 0.303) corr->TP01 full 0.146 hold 0.057 beta 0.197 resid Sharpe 0.738 alpha/yr 0.121 robust_oos=True (clean-year +0.103, drop-best-month +0.283) multi-cut persistence: 2020 .166 / 2021 .167 / 2022 .298 / 2023 .337 / 2024 .418 / 2025 .497 / 2026 2.861 persistent=True has_insample_edge=True (standalone PRE-holdout Sharpe 0.874, > null-pctl 0.317) is_hedge=False (yearly corr(TP01-Sh, uplift) -0.762; paga sia TP01-up 0.139 sia TP01-down 0.384) blend w25: FULL 1.481 (+0.184) HOLD 0.80 (+0.497) DD 11.0% corr con SKH01: full 0.278 hold 0.291 day_boundary=INVARIANT (spread 0.0) haircut $600 ≈ 0.00 su BTC/ETH ``` È il **primo sub-daily da SKH01** a passare TUTTI i gate del marginal scorer indurito: edge in-sample reale (non diversification-math), persistenza multi-cut, robust_oos, NON hedge, scorrelato a TP01 (0.15). ### ERM aggiunge OLTRE SKH01? (gate #5 — il book esistente ne ha già uno sub-daily) | blend | FULL Sh | FULL DD | HOLD Sh | HOLD DD | |---|---|---|---|---| | TP01 | +1.30 | 14.3% | +0.30 | 7.5% | | TP01+SKH 75/25 | +1.78 | 9.4% | +1.17 | 6.2% | | **TP01+SKH+ERM 60/25/15** | **+1.88** | 8.9% | **+1.46** | 5.3% | | TP01+SKH+ERM 55/20/25 | +1.84 | 8.8% | +1.48 | 5.1% | Sì: corr con SKH01 solo 0.28 → ERM **aggiunge oltre SKH** (FULL +0.10, HOLD +0.29 a peso 15%, DD ancora giù). Non è SKH01 travestito. ## Il controllo TOD (calendario) — fa esattamente ciò che doveva `TOD` (direzione per ora-del-giorno, media espandente causale) è incluso come **trappola**: è il tipo di effetto che uccise `open_drive` (artefatto di etichettatura UTC). Esito: **FAIL** (FULL −3.99, 31.811 trade, fee-killed), marginal=DILUTES. `day_boundary_robust=INVARIANT` → l'effetto è **robustamente negativo** a ogni offset (non un artefatto di confine giorno: è proprio che la time-of-day-direzionale non ha edge e sanguina fee). Il controllo conferma che l'harness non si fa ingannare e che il segno dei segnali di prezzo (ERM/VBR) è reale, non rumore di calendario. ## Causalità / eseguibilità - **Leak-free**: `causality_ok=True`, max_tail_diff **0.0** su tutti i candidati (ER, rank espandente, medie su prefisso = identiche → nessun future-peeking). Test dedicato in `test_intraday_regime.py`. - **day_boundary_robust=INVARIANT** (spread 0.0) per ERM/VBR/TOD: segnali di prezzo, non di calendario. - **Eseguibile a $600**: `eval_weights_smallcap` haircut **≈ 0.00** su BTC ed ETH. **MA** ERM a 8h fa ~3.158 trade BTC / ~2.823 ETH su tutta la storia (turnover 125/anno): haircut nullo nel modello, ma l'esecuzione reale sub-daily sul book è operativamente più pesante di un segnale 1d (slippage/spread intraday non interamente catturati dalla fee proporzionale). ## Caveat (perché LEAD, non sleeve) 1. **Plateau hold-out a UNA SOLA RIGA.** Il FULL è robusto su tutta la griglia L∈[2.0,3.0] (+0.6..+1.0), ma l'**hold-out è positivo SOLO a L=2.0** (a L=2.5/3.0 crolla a −0.5..−0.8). Il plateau sul full è ampio, quello che conta — l'hold-out — è single-row. Da rinforzare prima di credere alla stazionarietà. 2. **Standalone FULL 0.92 < soffitto ~1.3.** Coerente col soffitto direzionale BTC/ETH: il valore di ERM è **marginale/diversificante** (corr 0.15 a TP01, 0.28 a SKH01), non assoluto. Non rompe il soffitto. 3. **Multiple-testing non deflazionato.** 102 celle testate (60 ERM + 16 VEM + 24 VBR + 2 TOD) senza deflated-Sharpe (a differenza del filone C). Il multi-cut 2026 = +2.861 è una manciata di giorni che gonfia. Storia sub-daily certificata utile ~quanto SKH01 → finestra non lunghissima. 4. **Esecuzione 8h** = complessità operativa reale (vedi sopra), oltre il modello a haircut nullo. ## Verdetto onesto: **LEAD forte / forward-monitor (research win).** Nessuno sleeve registrato. ERM è il risultato sub-daily **più solido dai tempi di SKH01**: passa il marginal scorer indurito (edge in-sample, multi-cut, non-hedge, ADDS), è leak-free, fee-survivente, eseguibile a haircut ~0, e migliora il portafoglio **oltre** SKH01 (TP01+SKH+ERM 60/25/15 → FULL 1.88 / HOLD 1.46 / DD 8.9%). Ma il plateau hold-out a singola riga + il multiple-testing non deflazionato lo tengono a **tier-SKH-al-momento-della- scoperta**: si arma in **forward-monitor**, non si registra come sleeve finché (a) il plateau hold-out non si allarga su L con dati nuovi, (b) il deflated-Sharpe sulle 102 celle non lo conferma, (c) l'esecuzione 8h non è validata a deploy. Gli altri tre meccanismi: VBR=NOISE (diversification-math, no in-sample edge), VEM hold-out<0, TOD=controllo FAIL come atteso. Nessun impatto sul book live (branch separato, config canonica invariata).