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>
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
# 2026-06-08 — Ricerca sostituto/miglioria a MR02/ETH (127 strategie + opzioni)
|
||||
|
||||
## Contesto
|
||||
MR02/ETH è lo sleeve a DD più alto della famiglia fade ed è il maggior drag
|
||||
dell'esecuzione reale (testnet: −19€ su 7 trade, 0 win, faded un downtrend −14%
|
||||
in long poi shortato il rimbalzo — whipsaw classico). Obiettivo: trovare un
|
||||
sostituto o una miglioria con ≥100 agenti su strategie differenti, metodologia
|
||||
onesta (ingresso eseguibile, fee 0.10% RT, OOS, gate PORT06).
|
||||
|
||||
## Cosa è stato fatto
|
||||
- **Workflow 1 — 109 strategie ETH distinte** (`mr02eth_search.workflow.js`):
|
||||
gated-fade, mean-reversion alternative, exit, trend-following, volatilità,
|
||||
cross-asset, ML/shape, microstruttura, statistico-robusto. Harness onesto
|
||||
`explore_lab`. Poi **verifica avversariale** dei top-24 (audit look-ahead +
|
||||
re-implementazione indipendente + robustezza). → 26 survivor, **6 confermati**.
|
||||
- **Workflow 2 — 18 overlay di OPZIONI** (`mr02eth_options.workflow.js`) +
|
||||
sintesi con audit crash reali. Harness nuovo `option_overlay_lab.py`: opzioni
|
||||
prezzate Black-Scholes sulla **DVOL** reale di Deribit (storica/gratuita,
|
||||
`data/regime/eth_dvol.parquet`), premio dedotto, ipotesi **conservative**
|
||||
(skew_mult sui comprati, uscita anticipata solo a intrinseco).
|
||||
- **Gate PORT06** (`mr02eth_port06_gate.py`): swap di MR02_ETH col candidato,
|
||||
equity giornaliera su IDX 2021-2026, ri-misura FULL+OOS Sharpe/DD (cap
|
||||
weighting). Sanity check: MR02 ricostruito col mio engine == canonico (Δ 0.00).
|
||||
|
||||
## Risultato (gate PORT06; baseline canonico FULL 6.43/3.96, OOS 8.58/1.36)
|
||||
| variante (swap MR02/ETH) | FULL Sh | FULL DD | OOS Sh | OOS DD |
|
||||
|---|---|---|---|---|
|
||||
| EXIT-16 (config LIVE) | 6.73 | 3.67 | 8.80 | 1.23 |
|
||||
| no-SL nudo | 6.76 | 3.68 | 8.87 | 1.23 |
|
||||
| no-SL + put/call 10% OTM | 6.78 | 3.64 | 8.86 | 1.23 |
|
||||
| varratio_gate (PROMOSSO vs canonico) | 6.41 | 3.73 | 8.53 | 1.36 |
|
||||
| choppiness_donch | 6.37 | 3.35 | 8.47 | 1.32 |
|
||||
| vrp_neg_dvol_low | 6.36 | 3.22 | 8.37 | 1.43 |
|
||||
|
||||
## MIGLIORIA TROVATA (gate vs LIVE EXIT-16, non vs canonico)
|
||||
Riferimento onesto = config LIVE EXIT-16 (FULL 6.73/3.67 — OOS 8.80/1.23), non
|
||||
l'intrabar-SL canonico che nessuno gira.
|
||||
|
||||
| sleeve ETH | ΔFULL Sh | ΔFULL DD | ΔOOS Sh | ΔOOS DD | esito |
|
||||
|---|---|---|---|---|---|
|
||||
| **no-SL + put/call 10% OTM** | **+0.05** | **−0.03** | **+0.06** | 0.00 | ✅ MIGLIORIA deployabile |
|
||||
| no-SL nudo | +0.04 | +0.02 | +0.07 | 0.00 | ✅ migliora ma sl=0 NON deployabile |
|
||||
| EXIT16 + put10 | −0.01 | +0.03 | 0.00 | 0.00 | = pari (assicurazione gratis) |
|
||||
| varratio / vrp / chop / blend | negativi | | | | peggiorano vs EXIT-16 |
|
||||
|
||||
**La miglioria = MR02/ETH no-SL + floor a opzioni 10% OTM** (put sui long, call
|
||||
sugli short). Batte il live EXIT-16 in modo PARETO su 3/4 metriche PORT06 (4ª
|
||||
piatta). Meccanismo: **rimuovere lo stop** (intrabar/close-confirm su una fade
|
||||
mean-reverting sono falsi negativi — overshoot che rientra) e dare la funzione
|
||||
dello stop (cap della catastrofe) a un'**opzione comprata** = protezione a
|
||||
rischio-definito SENZA il costo whipsaw/falso-stop. Standalone il salto è grande
|
||||
(Sharpe 8.45→12.14, OOS DD 13%→7%); a portafoglio è modesto (+0.05/+0.06 Sharpe)
|
||||
perché è 1 sleeve su 17, ma è un miglioramento MISURATO e verificato (soglia
|
||||
gate +0.03, ottenuto +0.05/+0.06), non rumore.
|
||||
|
||||
## Conclusioni (oneste)
|
||||
1. **Sostituti/blend: tutti peggiorano vs il live EXIT-16.** I candidati gated
|
||||
(varratio/vrp/choppiness) e i blend within-sleeve battono solo lo strawman
|
||||
canonico, non il live; le loro basse esposizioni diluiscono il motore di
|
||||
ritorno (Sharpe −0.08/−0.44). Lo Sharpe ~20 nell'harness era artefatto di
|
||||
`sqrt(N_trade)` (onesto ~4.3). → **non sostituire né blendare.**
|
||||
2. **L'unica miglioria è la coppia no-SL + opzione.** Il no-SL recupera il drag
|
||||
dello stop; l'opzione cappa la coda da **gap-through** che EXIT-16 NON protegge
|
||||
(esce al close DOPO il buco → prende la perdita piena). Audit crash: FTX nov-22
|
||||
−48%→−30%, LUNA-era 2022-09 −63%→−31%, 2018/19 −65%→−30%. Premio ~break-even
|
||||
(paga 156% / incassa 149%). È ciò che rende deployabile il no-SL.
|
||||
|
||||
## Azione raccomandata
|
||||
- **Deployare MR02/ETH come no-SL + floor a opzioni 10% OTM** (put long / call
|
||||
short, per-trade o settimanale ammortizzato). Batte il live su 3/4 metriche +
|
||||
cappa esplicitamente la coda. **Prima del capitale**: validare prezzi/liquidità/
|
||||
skew per-strike REALI su Deribit testnet (qui pricing BS sintetico sulla DVOL =
|
||||
ATM-IV; stress skew ×1.5 gonfia il premio FULL ma l'OOS regge). Stesso muro
|
||||
non-backtestabile di ARGO/GEX sul per-strike, aggirato col proxy DVOL.
|
||||
- Step intermedio a costo zero: **aggiungere subito il floor opzione all'EXIT-16
|
||||
live** (= "pari" sui numeri, ma assicurazione gratis sul gap-through) mentre si
|
||||
valida la transizione a no-SL.
|
||||
|
||||
## Addendum 2026-06-09 — validazione su PREZZI REALI + integrazione cerbero-bite
|
||||
- Probe live Deribit mainnet (singolo snapshot): sembrava skew ×1.6 e liquidità
|
||||
pessima sul 10% OTM a 1g → l'overlay per-trade pareva bocciato.
|
||||
- **cerbero-bite** (container accanto) ha però **lo storico per-strike reale** in
|
||||
`option_chain_snapshots` (SQLite, dal 2026-05-01, ~110k righe/asset, bid/ask/IV/
|
||||
greche/OI, cadenza ~12min). Importato in `data/options/` via `options_fetcher.py`;
|
||||
loader `options_chain.py` (skew_curve/premium_levels/quote causale).
|
||||
- **Correzione dai dati reali (5.5 settimane):** skew put 10% OTM = **×1.1** (liquido,
|
||||
spread ~7%) — il ×1.6 del probe era un artefatto del deep-OTM a 1g illiquido. Premio
|
||||
reale 10% OTM ≈ **1.0%/mese**. → la miglioria no-SL+opzione **regge** sui prezzi veri.
|
||||
- **MA vincolo strutturale reale:** gli strike **10% OTM a 24h NON esistono** (n=0 in 5.5
|
||||
settimane; Deribit lista solo near-ATM sui tenor corti). L'overlay **per-trade a 24h è
|
||||
infattibile**; l'unica struttura eseguibile è una **put settimanale/mensile standing**
|
||||
(catastrofe-cap di sleeve), da gateare a parte coi premi reali.
|
||||
- **Infrastruttura sbloccata:** il muro ARGO/GEX ("opzioni non-backtestabili") è caduto
|
||||
per il periodo recente — d'ora in poi le tesi opzioni si validano su prezzi VERI.
|
||||
Importato anche il pannello `market_snapshots` (spot/VRP/funding/**net-GEX dealer**/
|
||||
gamma-flip/liquidation, dal 2026-03-26) → `data/options/`, loader `options_chain.load_market`.
|
||||
|
||||
## Addendum 2 — gate del COLLAR standing (catastrophe-cap auto-finanziato) — NO-GO
|
||||
Premi reali → collar = put −13% (1.0%/m) finanziata da call +10% (1.05%/m) ≈ premio netto 0.
|
||||
Gate PORT06 (`eth_collar_gate.py`, BS calibrato skew_put 1.12 / skew_call 1.0, sweep OTM/hedge_frac):
|
||||
- Il collar **PAGA nei crash** (ETH −40% dic-21 → +6.1%, −30% feb-25 → +6.6%): protezione reale.
|
||||
- MA **net-negativo a portafoglio**: taglia il FULL DD (−0.2/−0.3pp) ma **costa Sharpe** (FULL e OOS)
|
||||
e **ALZA l'OOS DD** (+0.18/+0.28pp) — nell'OOS (no crash profondo, qualche rally) la call corta
|
||||
perde e il premio erode. Peggiora il DD che doveva ridurre.
|
||||
- **Verdetto: il tail-hedge a opzioni NON conviene a PORT06** (né per-trade né collar). Strutturale:
|
||||
lo sleeve ETH pesa 6.5% → la **diversificazione è già la protezione di coda** (trade −65% =
|
||||
−4% aggregato). La cap auto-finanziata era giusta sul *costo* (~break-even) ma la protezione non
|
||||
vale il costo Sharpe/OOS-DD. Le opzioni si chiudono come **NO-GO empirico su prezzi reali**.
|
||||
|
||||
## Deploy della miglioria (2026-06-09): MR02/ETH stop-largo sl_atr 3.0
|
||||
Nessun SOSTITUTO batte il live; la MIGLIORIA deployabile e' allargare lo stop EXIT-16.
|
||||
Gate stop-width (EXIT-16 close-confirm, swap solo MR02_ETH):
|
||||
| sl_atr | FULL Sh | FULL DD | OOS Sh | OOS DD | worst-trade |
|
||||
|---|---|---|---|---|---|
|
||||
| 2.0 (LIVE) | 6.73 | 3.67 | 8.80 | 1.23 | -48% |
|
||||
| **3.0** | **6.77** | **3.30** | **8.82** | 1.23 | **-50%** |
|
||||
| 4.0 | 6.78 | 3.49 | 8.82 | 1.23 | -62% |
|
||||
| no-SL (sl=0) | 6.76 | 3.68 | 8.87 | 1.23 | -65% (vietato) |
|
||||
`sl_atr=3.0` domina il live (FULL DD -0.37pp, Sh +0.04/+0.02) e cattura il beneficio del no-SL
|
||||
(gli stop di meta'-discesa sono falsi negativi) MANTENENDO lo stop di catastrofe (worst -50%, non
|
||||
-65%) -> regola "mai sl=0" rispettata; 4.0 inizia a perdere la coda. Plateau 2.5-4.0 (tutti > live
|
||||
su Sharpe). Override SCOPED a MR02/ETH in `_defs.py` (`_fade_params`); gli altri 5 fade non
|
||||
ri-gateati -> invariati. 93/93 test passano. Deploy: `./scripts/deploy.sh` (cambio live).
|
||||
|
||||
## Artefatti riusabili
|
||||
- `scripts/analysis/option_overlay_lab.py` — overlay opzioni (pricing BS sintetico su DVOL).
|
||||
- `scripts/analysis/options_fetcher.py` — import storico opzioni reale da cerbero-bite → data/options/.
|
||||
- `scripts/analysis/options_chain.py` — loader + skew/premi reali + lookup causale (`OptionChain`).
|
||||
- `scripts/analysis/mr02eth_port06_gate.py` — gate swap-sleeve PORT06.
|
||||
- `scripts/analysis/mr02eth_search.workflow.js`, `mr02eth_options.workflow.js`.
|
||||
Reference in New Issue
Block a user