diff --git a/docs/diary/2026-06-18-price-ladder-search.md b/docs/diary/2026-06-18-price-ladder-search.md new file mode 100644 index 0000000..444480e --- /dev/null +++ b/docs/diary/2026-06-18-price-ladder-search.md @@ -0,0 +1,189 @@ +# 2026-06-18 — Price Ladder (griglia) vs gate PORT06 + +**Branch:** `price_ladder_research` · **Harness:** `scripts/analysis/ladder_search.py` +(engine `grid_mtm`: mark-to-market onesto, SL gap-aware, flat-skip, fee 0.10% RT taker). +**Baseline PORT06:** FULL Sharpe 8.13 / DD 2.47% — OOS Sharpe 10.86 / DD 2.09%. +**Metodo:** caccia multi-agente su asset × TF (15m/30m/1h) × regime-gate (none / range +trend_max 1.5/2.0/2.5), poi `verify` avversariale sui finalisti (plateau, fee 2x, corr, +FULL DD di portafoglio). **Goal di progetto:** trovare un Price Ladder che *diversifichi* +(PASSI il gate) senza accendere la coda di trend. + +--- + +## 1. Cosa era già noto + +Il gioco-griglia precedente aveva trovato una **griglia ETH fortissima standalone** +(Sharpe ~5.61) ma **BOCCIATA al gate PORT06**: corr ~0.40 con le fade ETH già deployate +→ **ridondante**, non un diversificatore. La lezione: lo standalone Sharpe non basta, conta +quanto il ladder *aggiunge ortogonalmente* al portafoglio. Questa ricerca cerca proprio un +ladder che PASSI il gate = che abbia corr bassa con gli sleeve esistenti. + +--- + +## 2. Risultato NUOVO — i ladder PASSANO il gate + +Sì. Su **tutti gli asset liquidi** (BTC e ETH) e su quasi tutte le combinazioni TF×regime, +i ladder migliorano l'OOS Sharpe di portafoglio (10.86 → ~11.0–11.35) **con corr bassa**: + +- **BTC** (15m/30m/1h, range o none): corr **0.15–0.27**, molto più ortogonale della + griglia ETH bocciata (0.40). OOS di portafoglio 11.1–11.35 (il guadagno OOS più grosso). +- **ETH** (15m/30m/1h): corr **0.21–0.57** (15m la peggiore, fino a 0.57; a 1h scende a + 0.22–0.39). OOS di portafoglio ~10.9–11.1. +- **SOL/LTC**: SOL passa solo 2 celle, half-only, edge standalone quasi nullo + (full_sh ~0.2); **LTC è negativo ovunque** (full_sh −0.4…−0.8, bocciato) → solo BTC/ETH + liquidi danno un ladder vivo, come atteso. + +Il gate **misura corr + OOS**, e su questi due assi i ladder BTC vincono nettamente. + +### Migliori candidati (dai `verify` avversariali) + +| Asset/TF/regime/struttura | OOS base→new | FULL DD standalone | FULL DD portafoglio (full / half) | corr | fee2x OOS | robust? | +|---|---|---|---|---|---|---| +| **ETH 1h range2 rd0.16 ru0.04 L4** | 10.86→**11.00** | 11.79% | **2.70** / 2.52 | 0.305 | 4.89 | ✅ sì | +| **ETH 1h range2 rd0.16 ru0.06 L6** | 10.86→11.01 | 12.09% | 2.74 / 2.54 | 0.328 (al filo) | 5.05 | ✅ sì | +| **ETH 1h range2 rd0.16 ru0.06 L4** | 10.86→10.98 | 12.64% | **2.68** / 2.51 | 0.249 | 4.44 | ✅ sì | +| **ETH 30m range2 rd0.16 ru0.04 L3** | 10.86→10.93 | 12.56% | **2.48** / 2.41 | 0.223 | 4.21 | ✅ sì | +| **ETH 1h none rd0.20 ru0.06 L6** | 10.86→11.03 | 17.89% | 2.59 / 2.46 | 0.271 | 5.43 | ✅ sì | +| **ETH 30m none rd0.16 ru0.06 L4** | 10.86→10.92 | 18.68% | **2.37** / 2.35 | 0.319 | 5.42 | ✅ sì | +| **ETH 1h none rd0.16 ru0.06 L4** | 10.86→10.96 | 23.13% | **2.40** / 2.37 | 0.224 | 4.59 | ✅ sì | +| **BTC 1h none rd0.08 ru0.06 L3** | 10.86→**11.34** | **53.69%** | 3.11 / **2.48** | 0.216 | 5.78 | ⚠ half-only | +| **BTC 30m range2.5 rd0.08 ru0.06 L3** | 10.86→11.22 | 55.33% | 3.27 / **2.50** | 0.265 | 5.19 | ⚠ half-only | +| **BTC 30m none rd0.08 ru0.06 L3** | 10.86→11.32 | 55.33% | 3.27 / **2.44** | 0.220 | 5.37 | ⚠ half-only (tail) | +| **BTC 1h range1.5 rd0.20 ru0.06 L6** | 10.86→11.13 | 54.43% | 3.19 / **2.33** | **0.161** | 5.46 | ⚠ half-only (tail) | + +`rd` = spacing down, `ru` = spacing up, `L` = livelli. Tutti i finalisti hanno plateau +robusto (4–7 vicini di struttura restano PROMOSSO) e fee2x ~= OOS standalone. + +--- + +## 3. IL NODO — la FULL DD (che il gate IGNORA) + +**Il gate verdict NON guarda la FULL DD.** Misura solo corr + OOS Sharpe/DD. Una griglia +long-only ha una coda di trend 2021/22 (viene comprata fino in fondo mentre il prezzo crolla +in un trend persistente) → la **FULL DD standalone** è il vero rischio nascosto. Il filtro +onesto è la **FULL DD di PORTAFOGLIO** (`full_full_dd` / `half_full_dd`), con soglia di +tail-risk **~+0.8pp sopra il baseline 2.47%** (cioè restare sotto ~3.3%). + +Due famiglie nette emergono: + +- **BTC** — FULL DD standalone **~54–67%** (la coda long-only è devastante, come temuto). + Il regime-gate range *taglia gli ingressi nei trend* ma **non immunizza** dalle posizioni + già aperte → a FULL size la FULL DD di portafoglio sale a **3.1–6.6%** (+0.6/+4.0pp, + **oltre la soglia tail** in quasi tutte le celle). **A HALF size invece rientra a 2.33–2.54%** + (~baseline) preservando l'OOS ~11.0–11.3. → **BTC deployabile SOLO a half-size**, e il + guadagno OOS più grosso (11.3+) viene proprio da queste celle a coda alta. + +- **ETH** — FULL DD standalone **molto più bassa** del previsto: **12–33%** (1h range scende + a **~12%**), NON il ~60% temuto. Lo SL-buffer + flat-skip + il regime-gate range tengono la + griglia fuori dai trend estesi. Conseguenza: la FULL DD di portafoglio resta **2.37–2.74%** + (+0.0/+0.27pp, **sotto soglia anche a FULL size**) — in diversi casi *scende* sotto il + baseline (es. ETH 30m none L4 → 2.37%). → **ETH è la famiglia tail-safe.** Il prezzo è una + corr più alta (0.22–0.33 sui finalisti 1h/30m, fino a 0.57 sul 15m da scartare). + +**Lettura chiave:** il regime-gate *abbassa* la FULL DD ma su BTC **non a sufficienza** a +full size (la coda 54% è troppo grande); è l'**half-size** a fare il lavoro. Su ETH la coda +è già piccola e il portafoglio l'assorbe. Quindi il discriminante reale è **asset (ETH vs +BTC) + size**, non solo il regime-gate. + +--- + +## 4. Vantaggio Deribit — fill MAKER + +Un Price Ladder è una griglia di **ordini LIMIT ai livelli** → su Deribit i fill sono +**MAKER (~0% fee)**, non taker. L'harness assume **0.10% RT taker** ovunque → è +**CONSERVATIVA**: la stessa griglia live pagherebbe meno fee e potrebbe rendere PIÙ del +backtest. Lo confermano i `verify`: il **fee2x** (raddoppio fee) lascia l'OOS Sharpe quasi +intatto (~98% trattenuto su quasi tutti i finalisti) → nessun fee-cliff, e con i fill maker +reali c'è upside, non downside, sul lato costi. (Il rischio resta la coda di trend e lo +slippage/fill in esecuzione reale, non le fee.) + +--- + +## 5. Verdetto operativo + +**C'è un Price Ladder deployabile.** Il candidato più pulito su tutti gli assi +(PROMOSSO + FULL DD di portafoglio controllata a full size + plateau robusto + corr genuina): + +> **ETH 1h, regime=range trend_max 2.0, rd=0.16 / ru=0.04 / 4 livelli, sl_buf 0.12 / tp_buf 0.05, max_bars 720.** +> OOS 10.86→11.00, FULL DD portafoglio **2.70% a full / 2.52% a half** (standalone 11.79%), +> corr 0.305, fee2x OOS 4.89, plateau 4 vicini PROMOSSO. **Deploy raccomandato a HALF size** +> (FULL DD +0.05pp, marginale; il caveat slippage live giustifica la prudenza). + +**Alternative ETH equivalenti** (stessa banda di sicurezza, scegliere per corr/coda): +`ETH 1h range2 rd0.16 ru0.06 L4` (corr 0.249, la più bassa) e `ETH 30m range2 rd0.16 ru0.04 L3` +(FULL DD portafoglio 2.48, ~baseline). Tutte ETH 1h/30m **range-gated rd≥0.16** → NON scendere +sotto rd 0.16 (rd 0.12 fa risalire la corr verso 0.38 = ricomincia a somigliare alle fade ETH; +il 15m ha corr 0.43–0.57 = troppo ridondante, scartare). + +**I BTC NON a full size.** Danno il guadagno OOS più grande (fino a 11.34) e la corr più bassa +(0.16–0.22 = la diversificazione migliore), MA la FULL DD standalone ~54% li rende +**tail-risky a full size** (FULL DD portafoglio 3.1–6.6%, oltre soglia). **Deployabili SOLO a +half-size** (FULL DD portafoglio 2.33–2.50), dove restano un diversificatore eccellente. Il +migliore BTC half-size è `BTC 1h range1.5 rd0.20 ru0.06 L6` (corr **0.161**, FULL DD portafoglio +half **2.33**). + +**BLOCCO prima di qualsiasi deploy:** il gate PORT06 (corr + OOS) è **necessario ma non +sufficiente** — non controlla la FULL DD, e l'OOS held-out è un **regime calmo** (2024–25). La +coda di trend 2021/22 è reale e standalone è enorme su BTC. **Nessun deploy senza un gate +stressato sul 2022** (verificare la FULL DD di portafoglio attraverso il trend duro, non solo +l'OOS calmo) e una conferma su **ledger reale shadow** per slippage/fill maker. Il verdetto del +gate va sempre incrociato con la FULL DD di portafoglio (filtro vero) + fattibilità feed live + +regime recente — la stessa lezione del timing-sweep pairs/honest (2026-06-14). + +**Sintesi:** ETH 1h/30m range-gated rd≥0.16 a half-size è il **deploy-candidate sano e +tail-safe**; BTC è il diversificatore migliore ma **solo a half-size** per la coda di trend. +Prossimo passo obbligatorio: stress-test 2022 + shadow ledger reale (i fill maker possono solo +migliorare il risultato sul lato fee). + +--- + +## 6. ⚠️ RETTIFICA CRITICA — il verdetto §5 è ROVESCIATO (critico + verifica dati) + +Il critico di completezza + una verifica diretta dei dati **ribaltano la raccomandazione di +deploy della §5**. Messo a verbale: la §5 è SUPERATA da quanto segue. + +**(1) I risultati BTC poggiano su DATI CORROTTI (spike-print), verificato.** La "coda di trend +BTC ~54%" su cui ruota la §3 NON è un crollo di mercato: è **feed sporco**. Misurato su `btc_1h`: +**37 barre con range intrabar >20%**, concentrate a **feb-2024** (es. 2024-02-13: low=38.580 con +close~49.968 = wick fasullo −23% che rimbalza nella stessa barra), con min 22.706 / max 104.688 in +un trimestre dove BTC stava ~47–57k. È lo **stesso spike-print testnet documentato ovunque in +CLAUDE.md** (TP_PHANTOM / feed congelato). L'engine SL-gap-aware filla su questi wick fantasma e la +griglia "compra" i dip fasulli → la coda BTC ~54% e parte dell'edge OOS sono **artefatto, non +mercato**. Conseguenza: i candidati BTC NON sono affidabili, e lo "stress 2022" proposto NON +toccherebbe la coda vera (che è a feb-2024, da dati sporchi). Serve `close_only` + pulizia feed. + +**(2) Il guadagno OOS è RUMORE al peso deployabile.** +0.14 OOS Sharpe su base 10.86, con il ladder +che pesa **~5.3% full / ~2.7% half** in un portafoglio già a Sharpe ~11, su **592 giorni di un +solo regime calmo** (2024-10→2026-05, niente 2022). Nessun test di significatività +(block-bootstrap). A half-size il contributo è quasi inerte (a volte l'OOS DD *migliora*): è dentro +l'errore di campionamento, non un edge dimostrato. + +**(3) La diversificazione ETH è più sottile di quanto venduto.** Il finalista ETH "raccomandato" è +**corr 0.305** (non 0.15–0.20: quella è BTC half-only non deployabile), già vicino allo **0.40 che +fece bocciare la griglia ETH originale**. Peggio: il `regime_mask` usa **lo stesso filtro +trend-distance** (|close−EMA200|/ATR) delle fade ETH già live → la "diversificazione" è in parte +illusoria (gate e sleeve condividono il filtro). La corr misurata è **daily in regime calmo**, NON +co-tail: una griglia long-only e una fade reversion possono co-crollare in un trend (entrambe +"comprano il calo") — la metrica che conterebbe (co-movimento nella coda) non è calcolata. + +**(4) La FULL DD standalone è mascherata dal compounding.** Il finalista ETH compone a **~31x +(+3.1M%) in 5.4 anni**: una "FULL DD 11.79%" accanto a un ritorno di milioni-% è artefatto di +notional reinvestito, e il daily-resample **nasconde l'inventory-risk intrabar** che il docstring +di `grid_game_gate.py` (righe 5–7) avverte esplicitamente di non vedere. + +**(5) Stress disponibile NON usato.** `ladder_search`/`grid_mtm` hanno `close_only=True` (filla solo +sul close, neutralizza gli spike-print): NON è stato girato sui finalisti — proprio il test che +smonterebbe la coda BTC fasulla. + +### Verdetto rettificato + +**NON c'è un Price Ladder deployabile dimostrato.** La ricerca ha prodotto (a) una **harness onesta +e validata** (`ladder_search.py` + regime-gate, riproduce esatto il gate noto), (b) un **risultato +negativo/guardingo** robusto: ogni candidato o è ridondante (ETH, corr→0.40), o poggia su dati +sporchi (BTC spike-print), o è rumore al peso deployabile. **Il multi-agente + critico ha evitato +un deploy ingiustificato** — esattamente la lezione anti-squeeze del progetto. + +**Prima di riconsiderare QUALSIASI ladder servono, in ordine:** (1) **pulire il feed BTC** dagli +spike-print + girare `close_only` sui finalisti; (2) **test di significatività** del delta OOS +(block-bootstrap) al peso reale; (3) **co-tail / corr nei crash** (2022), non corr daily calma; +(4) isolare e spiegare l'**evento feb-2024**. Config live **invariata**.