Files
PythagorasGoal/Old/docs/diary/2026-06-05-sh01-sl-research.md
Adriano Dal Pastro 14522262e6 chore(reset): v2.0.0 — storico certificato Deribit mainnet, ripartenza pulita
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>
2026-06-19 15:20:59 +00:00

5.6 KiB
Raw Permalink Blame History

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é slsl_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).