14522262e6
Reset del progetto su fondamenta verificate dopo la scoperta che l'intera libreria "validata OOS" era artefatto di feed contaminato (print fantasma del feed Cerbero TESTNET + storico Binance/USDT). - Storico ricostruito da Deribit MAINNET (ccxt pubblico, tokenless) e CERTIFICATO (certify_feed.py): BTC/ETH puliti su TUTTA la storia (mediana 2-6 bps vs Coinbase USD), integrita' OHLC + coerenza resample (maxΔ 0.00) + cross-venue OK. Alt esclusi (illiquidi/divergenti: LTC/DOGE 50-82% barre flat; XRP/BNB non certificabili). - Verdetto sul feed pulito: FADE / PAIRS / XS01 / TSM01 morti (ogni portafoglio Sharpe -2.3..-3.0, DD ~40%); solo SH01 e frammenti HONEST con segnale residuo, da ri-validare in isolamento. - Cleanup "restart pulito": strategie, stack live (src/live, src/portfolio, runner/executor, yml, docker), ~100 script ricerca/gate, waste/games/ portfolios, dati non certificati + cache e 60+ diari -> archiviati in Old/ (preservati, non cancellati). Diario consolidato in un unico documento. - Skeleton ricerca tenuto: Strategy ABC + indicatori + src/fractal + src/backtest/engine + load_data; tool dati certificati (rebuild_history, certify_feed, audit_feed, multi_source_check). - Universo dati ATTIVO: solo BTC/ETH (5m/15m/1h); guardrail fisico (load_data su alt -> FileNotFoundError). Esecuzione DISABILITATA, conto flat. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
100 lines
5.6 KiB
Markdown
100 lines
5.6 KiB
Markdown
# 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).
|