Files
PythagorasGoal/docs/diary/2026-06-21-ortho-tp01-relative-value.md
T
Adriano Dal Pastro 62d3b23cc6 harness(marginal): indurisci marginal_vs_tp01 con la lezione dell'onda ortho (17/18 -> 1)
Lo scorer fisso-HOLDOUT + jackknife-mese era ingannabile: 17/18 book relative-value "ADDS"
su una sola finestra 2025 (ETH-bleed dove TP01 è debole). Tre gate nuovi in
altlib.marginal_vs_tp01:
  1. persistenza multi-cut (uplift a più date di taglio, non solo 2025) -> robust_oos
  2. has_insample_edge: Sharpe standalone PRE-holdout >= 0.5 (la basket faceva 0.29).
     null_pctl_* (vs asset-rumore corr-zero) restano come CONTESTO (diversification math).
  3. is_hedge: low-corr che paga solo quando TP01 è debole = hedge, non alpha.
Verdetti nuovi HEDGE/NOISE; earns_slot = ADDS + robust_oos + has_insample_edge + not hedge.

Effetto: sull'onda ortho 17/18 "ADDS" -> 1 (dvol_spread, unico con edge in-sample reale 0.57);
gli altri 16 -> NOISE/HEDGE. Un sleeve sintetico Sharpe~1.3 scorrelato resta ADDS (non rigetta
i diversificatori veri). +5 test (noise/hedge/single-regime/high-Sharpe-uncorr/in-sample-edge);
suite 37 passed. CLAUDE.md aggiornato.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-21 12:50:26 +00:00

6.9 KiB
Raw Blame History

2026-06-21 — Caccia all'ORTOGONALE a TP01: relative-value BTC/ETH (eseguibile a $600)

Perché (richiesta utente: "cerca ortogonale a TP01")

La flotta cieca (stesso giorno) ha confermato: niente di NUOVO in direzionale BTC/ETH — tutto è trend-beta di TP01 (soffitto ~1.3). L'unica via a un nuovo slot LIVE è un meccanismo ortogonale (bassa correlazione, alpha residua). Il più promettente eseguibile al capitale reale ~$600 è un book RELATIVE-VALUE a 2 gambe BTC/ETH (long una / short l'altra), grosso modo market-neutral → correlazione naturale bassa col trend, e a 2 gambe è eseguibile (a differenza del book a 19 gambe di XS01 che serve ~$20k).

Setup — ortho-lab + giudice MARGINALE (non Sharpe assoluto)

scripts/research/ortho/ortholib.py: BTC/ETH 1d allineati su date comuni; eval_book(book_fn) con book(btc,eth)->(w_btc,w_eth), shift di entrambe le gambe (no leak), fee su entrambe, serie netta giornaliera; guardia di causalità online; check eseguibilità a $600 (max gamba ≤ 0.5 = cap $300/asset). Il giudice è altlib.marginal_vs_tp01: corr a TP01, uplift OOS del blend, alpha residua, robust_oos (clean-year + jackknife drop-month). Verdetto = ADDS, non Sharpe assoluto. ortho_score.py (giudice), meta_ortho.py (corr mutua + persistenza multi-cut), sleeve_rv.py.

Sanity: ratio-momentum → ADDS (corr 0.05); ratio-mean-reversion → DILUTES. L'harness discrimina.

Flotta — 18 agenti relative-value (~40 min)

18 ipotesi distinte: ratio-momentum multi-orizzonte, XS a 2 asset, beta-neutral residuo, Donchian sul ratio, EMA-cross, accel, carry lento, Kalman-spread, gate-correlazione, gate-vol, inverse-vol, rebalance-harvest, lead-lag, DVOL-spread, VRP relativo, dispersione, ensemble.

Esito grezzo: 18 riportati, 17 "ADDS / earns_slot".bandiera rossa: non esistono 17 alpha. Gli agenti stessi l'hanno annotato ("hold-out corto ~537g", "uplift dipende dal regime ETH-bleed 2025", "forward-monitor non full-weight").

Diagnosi dell'orchestratore — il "17 slot" è gonfiato

  1. Una scommessa o tante? corr mutua media 0.43 → collassano a 8 rappresentanti de-correlati. Non 17, non 1.
  2. Persistente o solo finestra 2025? marginal_vs_tp01 fissa l'hold-out al 2025-01-01 = proprio la finestra dove ETH ha perso vs BTC e TP01 è debole. Ri-misurando l'uplift a più cut (2022/23/24/25): il basket selection-free era +0.06/+0.06/+0.11/+0.38 (positivo ovunque ma crescente verso il 2025). Smaschera anche i falsi che il robust_oos fisso-2025 non vede: kalman_spread (0.14/0.16/0.10 poi +0.37) e xs2_zscore sono 2025-only.
  3. Selezione walk-forward (senza hindsight): scegliere i top-4 per uplift sul solo passato e testare in avanti → uplift 0.07 (sel <2023) / +0.05 (<2024) / +0.43 (<2025). Scegliere la variante vincente in anticipo è inaffidabile; il mio "curated 4" è in parte hindsight.

Verifica avversariale (scettico indipendente) — REFUTED

Sul basket selection-free (equal-weight di tutti i book market-neutral, NESSUN cherry-picking):

  • standalone Sharpe 0.61, maxDD 15%, corr a TP01 0.05 (genuinamente ortogonale).
  • uplift full +0.078 = pre-2025 +0.027 / solo-2025+ +0.401. Il pre-2025 +0.027 sta al 49° percentile di 500 asset-rumore a corr-zero (+0.029 per costruzione) → è matematica di diversificazione, non segnale.
  • corr(Sharpe annuo TP01, uplift annuo basket) = 0.87; condizionato: TP01 su → +0.014, TP01 giù → +0.369. È un hedge dei drawdown di TP01, non un premio autonomo. Paga nel 2022 (orso) e 2025-26 (ETH-bleed) — i due anni peggiori di TP01 — rumore altrove (2023 0.06, 2024 0.12).
  • Block-bootstrap P(uplift>0): full 90%, pre-2025 66% (testa o croce), 2025+ 99%.
  • Fee: a 0.30% RT il pre-2025 va NEGATIVO (0.021); sopravvive solo il numero del regime 2025.
  • Eseguibilità OK ($264/gamba, turnover 12/yr) — non è quello il problema.

Verdetto

Niente di questa flotta merita uno slot LIVE. Il meccanismo relative-value BTC/ETH è REALE e genuinamente ortogonale (corr ~0.05), ma è un hedge della debolezza di TP01 travestito da alpha: il suo contributo pre-2025 è indistinguibile da un asset-rumore a corr-zero (49° percentile del null) e muore a fee realistiche; l'unico payoff vero è una singola finestra di 537 giorni (2025-26). Deployarlo = deployare un backtest mono-regime. Resta live solo TP01 (l'unica cosa che supera tutto questo scrutinio). Coerente con XS01 (stessa famiglia cross-sectional): diversificatore da monitorare, non alpha da eseguire — e la versione a 2 asset è ancora più sottile della 19-gambe.

Valore metodologico (cosa resta, ed è importante)

  • Il marginal scorer fisso-2025 è ingannabile (17/18 "ADDS"). Ciò che ha ucciso i falsi positivi: persistenza multi-cut + selezione walk-forward + bootstrap vs null a corr-zero. Lezione da cablare nello scorer: testare PIÙ cut e confrontare l'uplift col null di un asset-rumore ortogonale (un'asset scorrelato con drift positivo "aggiunge" +0.03 per pura matematica — non è un edge). Un basso-corr che paga solo quando il core è debole è un hedge, va prezzato come tale.
  • Lab riusabile: ortholib/ortho_score/meta_ortho (giudice marginale + persistenza). I 18 book + sleeve_rv.py (curated, selection-biased — non deployare) restano come riferimento.

File: scripts/research/ortho/{ortholib,ortho_score,meta_ortho,sleeve_rv}.py, agents/agent_00..17_*.py, ortho_leaderboard.json, skeptic skeptic_{basket,regime,null}.py.

AGGIORNAMENTO — lezione codificata in altlib.marginal_vs_tp01 (stesso giorno)

I tre gate sono ora codice, non solo prosa (test tests/test_marginal_scorer.py, +5 test):

  1. persistenza multi-cut (multicut_uplift/multicut_persistent): uplift a ogni inizio anno, non solo all'HOLDOUT fisso → uccide i 2025-only (es. kalman_spread, negativo a ogni cut pre-2025).
  2. edge in-sample (has_insample_edge): lo Sharpe standalone PRE-holdout dev'essere ≥0.5. È il discriminante onesto (la basket faceva 0.29). I null_pctl_* (vs asset-rumore a corr-zero) restano come CONTESTO — mostrano che un low-corr "aggiunge" ~+0.03 per matematica, vero per sleeve buoni e cattivi, quindi non possono essere IL gate; l'edge in-sample sì.
  3. hedge vs alpha (is_hedge): corr(Sharpe-TP01, uplift annuo) molto negativa + paga solo quando TP01 è giù → HEDGE, non alpha.

Verdetti nuovi HEDGE e NOISE; earns_slot ora pretende ADDS + robust_oos + has_insample_edge

  • not is_hedge. Sull'onda ortho lo scorer indurito ribalta 17/18 "ADDS" → 1 (dvol_spread, unico con edge in-sample reale 0.57; gli altri 16 → NOISE/HEDGE). Controllo: un sleeve sintetico Sharpe~1.3 scorrelato resta ADDS (non rigetta i diversificatori veri — XS01-like). La verifica avversariale di 3 giorni è ora una chiamata di funzione.