config(PORT06): cap SHAPE 0.0588 — SH01 resta senza SL (ricerca multi-agente: 11 famiglie di stop, 0 sopravvissute)

Crash ETH 2026-06-05: SH01 ETH −15.6% su un trade (exit solo a orizzonte, nessuna
protezione). Ricerca con harness dedicato sh01_exit_lab (cache walk-forward, engine
fill gap-aware worse(livello,open), parity esatta con explore_lab, train<=2023-11-01):
ATR intrabar/close-confirm, %, chandelier, breakeven, giveback, loser-timestop,
disaster-cap close+intrabar, swing, vol-regime — NESSUNA passa il gate (ogni stop
stretto rompe BTC, ogni stop largo non tocca la coda ETH; nei crash il fill e' al gap).
Mitigazione: peso famiglia SHAPE 11.8%->5.9% in PORT06 (FULL 6.47->6.43 DD 4.10->3.96,
OOS 8.82->8.58 DD 1.30->1.36) — la prossima coda impatta il conto per meta'.
Regression-lock test aggiornato. Diario: docs/diary/2026-06-05-sh01-sl-research.md

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Adriano Dal Pastro
2026-06-05 17:56:16 +00:00
parent 6f86c644bf
commit bd6232dc00
16 changed files with 2413 additions and 3 deletions
+99
View File
@@ -0,0 +1,99 @@
# 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/worst5.5 | OOS +41%/8/2.18/3.1.
ETH TRAIN **26%/dd61/shrp0.16/worst14.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 15) | NO: 0/7 celle migliorative sul train |
| 02 | ATR fisso close-confirm (k 15) | 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 (15%, 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 36) | 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 512) | 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``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).