Files
PythagorasGoal/docs/diary/2026-06-29-macro-regime-gate.md
T
Adriano Dal Pastro aad69f9790 research(crypto): 4 filoni 2026-06-29 — ERM lead sub-daily (forward), 3 scartati/deboli
Ricerca onesta su BTC/ETH + universo HL, branch separato (nessun impatto live).
Harness condiviso altlib (causale, fee 0.10% RT, marginal vs TP01, day-boundary,
haircut $600). Test 19/19 verdi.

- A DVOL direzionale  -> LEAD hedge/DD-dampener, NON sleeve (buy-the-fear; is_hedge).
- B Intraday ERM 8h   -> LEAD forte / forward-monitor: earns_slot=True, ADDS oltre
                         SKH01 (TP01+SKH+ERM 60/25/15 FULL 1.88/HOLD 1.46/DD 8.9%).
                         Caveat: plateau hold-out single-row, multiple-testing non
                         deflazionato, exec 8h. Controllo TOD = FAIL atteso.
- C Cross-sectional non-mom (low-vol HL) -> DEBOLE/forward-monitor (deflated-Sh 0.13,
                         storia 2.5a, non eseguibile $600) STAT-MODE.
- D Macro regime-gate -> RIDONDANTE col trend (corr->TP01 0.989), SCARTATO.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-29 19:48:36 +00:00

4.3 KiB
Raw Blame History

2026-06-29 — Filone D: MACRO regime-gate sul book crypto — RIDONDANTE col trend, SCARTATO

Tesi. Usare segnali macro/cross-market — equity (SPY/QQQ/IWM), credito (HYG/LQD), oro (GLD/SLV), tassi (TLT/IEF) — come gate risk-on/risk-off sul book BTC/ETH, per migliorare il timing del drawdown di TP01: regime risk-off (credito che cede, equity sotto trend, fuga sui bond) → riduci/azzera l'esposizione crypto; risk-on → lascia agire TP01. È eseguibile (gata solo BTC/ETH perp, non aggiunge gambe). Script scripts/research/macro_regime_gate.py, test tests/test_macro_regime_gate.py. Branch research/equity-meanrev-ib (separato, nessun impatto live). Dati: data/raw/eq_*_1d.parquet (ETF daily, allineati causale merge_asof backward sul calendario SPY).

NON è un lead-lag direzionale (già morto: diari 2026-06-22/-23). L'angolo nuovo = un overlay binario/continuo di de-risk sul book esistente.

Il rischio noto in partenza (CLAUDE.md)

La lezione DVOL-spike (2026-06-26): un gate di de-risk rischia di essere ridondante col trend — TP01 è già long-flat e va a 0 nei crash (Δ 0.00). Questo script DOVEVA dimostrare che il gate aggiunge oltre quel che TP01 fa da solo. Non ci riesce.

Gate provati (tutti causali: SMA/ratio/z-score rolling, merge_asof backward)

SPY>MA{50,100,150,200,250}, HYG>MA, ratio di credito HYG/LQD, HYG/IEF, combo a maggioranza (SPY+HYG+HYG/LQD, binario e continuo), flight-to-quality (TLTup&SPYdn, GLDup&SPYdn), regime di vol equity SPYvol_z1 (proxy "VIX-spike" senza VIX). g_off ∈ {0.0, 0.5}.

Esiti

I gate di trend equity alzano lo Sharpe FULL della combo (SPY>MA150/200/250 → FULL ~1.22-1.25 vs TP01-solo 1.30) ma non l'hold-out (HOLD ~0.17-0.19) → è de-levering, non timing: tagliano DD spegnendo il book in mercati equity laterali, non anticipando i crash crypto. Il miglior profilo DD è SPYvol_z1.

Deep-dive SPYvol_z1 — il controllo decisivo (ridondanza col trend)

exposure TP01 risk-off exposure risk-on giorni risk-off giorni in cui il gate LAVORA corr(1-gate, 1-expo)
BTC 0.023 0.093 18% 3% 0.278
ETH 0.013 0.068 16% 2% 0.296

"Il gate lavora" = giorno risk-off E posizione TP01 non già flat. Accade nel 2-3% dei giorni: nel resto, quando il gate vorrebbe de-riskare, TP01 è già flat da solo. Il gate spegne un motore già spento.

Marginal scorer vs TP01 (gate come candidato-sleeve)

abs=FAIL  marginal=REDUNDANT  EARNS_SLOT=False
corr->TP01 full 0.989  hold 0.984  beta 0.978  resid Sharpe 0.739
multi-cut persistent=True  has_insample_edge=True (standalone 1.634)  is_hedge=False
blend w25: full 1.323 (+0.026)  hold 0.257 (-0.046)   blend w50: full 1.348 (+0.051)  hold 0.21 (-0.093)

corr→TP01 0.989, beta 0.98: lo stream gated È TP01. L'uplift hold-out è negativo (de-levering che toglie ritorno fuori dai crash). overlay-delta (gatedsolo) come stream a sé: verdict=NEUTRAL.

Causalità / eseguibilità (gli unici aspetti promossi)

  • Leak-free: causality_ok=True (max_tail_diff 0.0); STRICT align (1 barra equity extra di lag) → FULL invariato; day_boundary_robust=INVARIANT (spread 0.0). Allineamento macro→crypto backward-only.
  • Eseguibile a $600: haircut eval_weights_smallcap0.00 su BTC ed ETH. Fee-survivente (0.00→0.30% RT: 1.42→1.33). Tecnicamente impeccabile — semplicemente non aggiunge alpha.

Verdetto: SCARTATO (ridondante col trend). earns_slot=False.

Conferma esatta della lezione in CLAUDE.md: un overlay di de-risk su un book che è già long-flat e già a 0 nei crash non ha quasi nulla da fare (lavora il 2-3% dei giorni, corr→TP01 0.99). Il taglio di DD che mostra è de-levering, replicabile meglio con un target_vol più basso (stessa lezione del TP01×DVOL overlay del 2026-06-26). Il macro-regime non anticipa i drawdown crypto meglio del prezzo crypto stesso. Nessuno sleeve registrato; nessun impatto sul book live.

Sottoprodotto utile: il gate redundancy_diag (exposure risk-off vs risk-on + "quota giorni in cui il gate lavora") è il test pulito da riusare ogni volta che si propone un overlay di de-risk — se "il gate lavora" è basso e corr→TP01 ~1, è ridondante, a prescindere dallo Sharpe FULL che mostra.