# Diario — 2026-06-05 — SL su SH01: ricerca multi-agente (verdetto: NO-SL, cap del peso)

## Innesco

Crash ETH del 2026-06-05 (1742→1546, −11%, con feed testnet FLAT ~2h e gap 1655→1600):
SH01 ETH si è preso la coda intera, **−15.6% in un trade** (long 1727.8 → time_limit 1594.35,
leva 2x) — il singolo trade peggiore del portafoglio live. SH01 non ha TP/SL per design
(exit solo a orizzonte H=12). Domanda: esiste uno SL che taglia le code senza distruggere
l'edge (win ~50%, edge tutto nell'asimmetria dei winner)?

## Numeri storici per anno (config live W24 H12 th0.58, netto fee 0.10% RT, leva 3x)

Somma per-trade in pp (leva 3x); equity-level ≈ ×0.15.

| Anno | BTC | ETH |
|---|---:|---:|
| 2018 | −65.8 | +73.7 |
| 2019 | +87.7 | −19.3 |
| 2020 | +194.0 | **−293.1** |
| 2021 | +301.3 | +67.4 |
| 2022 | +64.3 | +79.1 |
| 2023 | +17.4 | +20.6 |
| 2024 | +110.0 | +108.1 |
| 2025 | +76.8 | +539.7 |
| 2026 | +59.0 | −29.5 |

BTC = motore robusto (8/9 anni+). ETH = fragile (DD 61%, win 48.8%): la coda non
protetta è un problema STRUTTURALE di ETH, non solo dell'episodio live.

## Infrastruttura (riusabile)

`scripts/analysis/sh01_exit_lab.py` — harness onesto stile exit-lab:
- cache segnali walk-forward (`data/cache/sh01_exit_lab.pkl`, 7248 BTC + 7386 ETH entries);
- engine intrabar con **fill GAP-AWARE**: stop fillato a `worse(livello, open[j])`, non
  "al livello" — chiude il bias PRO-stop-stretti documentato il 2026-06-04 (54% di fill
  ottimisti) e modella il caso reale del crash (gap 1655→1600 senza scambi intermedi);
- modalità stop `intrabar` e `close` (close-confirm stile EXIT-16), `after_bar` per
  policy discrezionali, stress `lag_close_exit` (poll in ritardo);
- parity ESATTA con `explore_lab.simulate` (BTC +218.50%/1531 trade, ETH +80.13%/1257);
- protocollo: TRAIN fino 2023-11-01 (selezione SOLO lì, plateau ≥3 celle), OOS una volta.

Baseline (orizzonte puro): BTC TRAIN +127%/dd23/shrp2.09/worst−5.5 | OOS +41%/8/2.18/−3.1.
ETH TRAIN **−26%/dd61/shrp−0.16/worst−14.9** | OOS +143%/7/**3.60**/−4.6.

## Esito: 11 famiglie testate, 0 sopravvissute

Policy in `scripts/analysis/sh01_exit_policies/` (01-10 dagli agenti + 11 dal
completeness-probe della sintesi):

| # | Famiglia | Verdetto |
|---|---|---|
| 01 | ATR fisso intrabar (k 1–5) | NO: 0/7 celle migliorative sul train |
| 02 | ATR fisso close-confirm (k 1–5) | NO: k=4 migliora ETH train (shrp −0.16→+0.62, DD 61→41, worst −8.4) MA ETH-OOS peggiora (shrp 3.60→2.32, worst −6.6) |
| 03 | % fisso (1–5%, 2 modi) | NO: BTC↓, ETH-OOS ret 52% del baseline |
| 04 | Chandelier trailing | NO: cella isolata; ETH-OOS tutto peggio (4ª bocciatura della famiglia trailing) |
| 05 | Breakeven ratchet | NO: 0 celle migliorative |
| 06 | Giveback (profit-protection) | NO: dormiente sulle code (worst invariato), taglia winner BTC |
| 07 | Loser time-stop (m,x) | NO: ETH-OOS shrp↓ DD↑, BTC↓ |
| 08 | Disaster-cap LARGO close-confirm (k 3–6) | NO: k=4 plateau sul train ma ETH-OOS DD 7→11-15%, ret 59-74%; FABBRICA short da stop a −44/−54% |
| 09 | Swing strutturale | NO: 0/18 celle |
| 10 | Stop condizionale vol-regime | NO: il migliore dei falliti (ETH-OOS shrp 3.28 vs 3.60) ma BTC train <95% |
| 11 | Disaster-cap LARGO **intrabar** (k 5–12) | NO: k=10 cella isolata; BTC-OOS shrp 2.18→**0.92**, worst −3.1→−11.4 (il fill gap-aware rende lo stop più tossico del no-stop) |

**Pattern (5ª conferma della lezione exit-lab):** ogni stop abbastanza stretto da toccare
la coda ETH intacca il motore BTC; ogni stop abbastanza largo da risparmiare BTC non
arriva mai alla coda ETH. Per un segnale win~50% con edge nell'asimmetria dei winner,
OGNI SL taglia i winner-in-drawdown insieme ai loser. In più il fill gap-aware mostra
che proprio nei crash (quando lo stop servirebbe) il fill è al gap, non al livello:
lo stop intrabar largo PEGGIORA la coda OOS di BTC invece di proteggerla.

## Decisione

- **NO SL su SH01** (né `sl` né `sl_confirm_atr` per SH_BTC/SH_ETH: corretto E sicuro —
  il fallback −2% del worker si applica solo se `sl` è presente).
- **La leva giusta è il PESO**: cap della famiglia SHAPE nel weighting di PORT06
  (`weighting.py` supporta già `caps` per famiglia, come PAIRS 0.33). Dimezzare la quota
  SHAPE ≈ dimezza l'impatto della prossima coda −15% sul conto, a costo ~nullo di Sharpe
  (SH01 è un diversificatore, corr +0.08 col MASTER).
- **APPLICATO E DEPLOYATO (stesso giorno):** `caps={"PAIRS": 0.33, "SHAPE": 0.0588}` in
  `_defs.py` (SHAPE 11.8%→5.9%, ≈ mezzo sleeve equal; SH_BTC=SH_ETH=0.0294, somma pesi 1.0,
  verificato). Quantificato sul backtest PORT06:

  | Config | FULL Sharpe | FULL DD | CAGR | OOS Sharpe | OOS DD |
  |---|---:|---:|---:|---:|---:|
  | precedente (SHAPE 11.8%) | 6.47 | 4.10% | 61.2% | 8.82 | 1.30% |
  | **cap SHAPE 5.9% (scelto)** | 6.43 | 3.96% | 62.1% | 8.58 | 1.36% |
  | SHAPE rimosso | 6.30 | 3.88% | 63.0% | 8.26 | 1.41% |

  Il costo (−0.24 OOS Sharpe) è il premio dell'assicurazione su una coda che il backtest
  daily NON modella (gap di feed, flat testnet). Rimuovere SHAPE costa troppo (8.26).

## Direzioni future (fuori scope SL, annotate dalla sintesi)

1. **Liquidity/staleness-gate sull'ENTRY** (skip ingressi dopo finestre di feed flat —
   il flat 2h ha preceduto il gap del 2026-06-05): la direzione più promettente per il
   gap-through specifico, merita uno studio dedicato.
2. Vol-target sizing per-trade su SH01 (sulle fade fallì, su SH01 mai testato).
3. SL solo-ETH: scartato anche concettualmente (il beneficio coda ETH è marginale/nullo
   OOS in TUTTE le famiglie — non è un problema di uniformità del meccanismo).
