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,113 @@
|
||||
# 2026-06-10 — Gioco "Blind Traders" sessione 3: GRID TRADERS (regola: STRATEGIA_GRIGLIA.md)
|
||||
|
||||
## Setup
|
||||
|
||||
Terza sessione del gioco dei trader ciechi, con una regola nuova: ogni agente deve
|
||||
implementare la strategia descritta in `STRATEGIA_GRIGLIA.md` (grid trading a griglia
|
||||
geometrica). 100 agenti (haiku, via Workflow) ricevono SOLO un digest anonimo di due
|
||||
serie X/Y (in realtà BTC/ETH, mai rivelato) sul loro timing assegnato
|
||||
(25×15m, 20×30m, 20×1h, 15×2h, 12×4h, 8×1d) + 5 archetipi di stile a rotazione
|
||||
(prudente / aggressivo / asimmetrico-rialzista / asimmetrico-ribassista / data-driven),
|
||||
e propongono la CONFIGURAZIONE della griglia: `range_down/up %`, `grid_levels`,
|
||||
`sl_buf`, `tp_buf`, `max_bars`, serie.
|
||||
|
||||
Infrastruttura nuova in `scripts/games/`:
|
||||
- **`grid_engine.py`** — backtest deterministico, causale, fee-aware della spec:
|
||||
griglia geometrica `ratio=((1+ru)/(1-rd))^(1/L)` costruita sul close di deploy,
|
||||
capitale 1/L per livello (§3.3), buy su attraversamento ↓ di un livello non
|
||||
riempito, sell del livello su attraversamento ↑ del successivo (§5.2), SL sotto
|
||||
il range e TP sopra che liquidano tutto (§6), redeploy a fine episodio
|
||||
(SL/TP/max_bars). **Vincolo break-even §4 implementato alla lettera**: passo
|
||||
≤ 1.5×costo RT → il motore si rifiuta di partire (`refused`, fitness −2e6);
|
||||
`_normalize` dell'arena riduce i livelli al massimo legale. Fill intrabar lungo
|
||||
il percorso O→L→H→C / O→H→L→C; fee 0.10% RT per round-trip + slippage opzionale.
|
||||
- **`grid_arena.py`** — torneo identico alle sessioni 1-2: split 60/20/20
|
||||
TRAIN/VALID/TEST, 90 epoche di hill-climb sul TRAIN, cull del 10% in VALID ogni
|
||||
10 epoche → 10 superstiti; TEST = OOS puro mai ottimizzato.
|
||||
- **`grid_brief.py`** — digest anonimo con statistiche per dimensionare una griglia:
|
||||
escursione max/min rolling (w100/500/2000, mediana e p90) e probabilità di fuga
|
||||
da un range ±5/10/20% entro 500 barre.
|
||||
|
||||
## Esito
|
||||
|
||||
`data/games/grid_result.json` (+ log `grid_tournament.log`). 100/100 spec da agenti
|
||||
reali (nessun sostituto random).
|
||||
|
||||
- **Alla proposta, 80/100 agenti scelgono X (=BTC)**: dai soli numeri anonimi capiscono
|
||||
che la griglia sopravvive meglio sulla serie meno volatile (escape ±20% in 500 barre:
|
||||
BTC 34.5% vs ETH 53.2% a 1h).
|
||||
- **L'evoluzione ribalta la scelta: tutti i 10 superstiti finiscono su Y (=ETH)** —
|
||||
nel periodo VALID/TEST la vol più alta di ETH paga di più i round-trip, e il rischio
|
||||
trend è gestito non dal range stretto ma dalla FORMA della griglia (sotto).
|
||||
- **Convergenza fortissima della forma** (9/10 superstiti): griglia **asimmetrica
|
||||
ribassista** — range profondo sotto (−13/−20%), corto sopra (+4/+8%), **livelli al
|
||||
minimo (4)** → passo largo ~4.5-5.5%, SL buffer profondo (5-15%), max_bars lunghi.
|
||||
Tradotto: **compra i dip di ETH in 4 tranche distanziate ~5%, rivendi ogni tranche
|
||||
al rimbalzo di un passo, stop catastrofale a ~−25/−30%**. Il gioco ha ri-scoperto
|
||||
per la terza volta la mean-reversion (qui in forma di dip-buying a tranche), e ha
|
||||
imparato da solo la lezione anti-fee: meglio pochi passi larghi che griglie fitte.
|
||||
|
||||
**Vincitore: agente #11, ETH 15m**, griglia −17.1%/+4.6% × 4 livelli, SL buf 12.4%,
|
||||
TP buf 4.8%, max 2143 barre. TEST(OOS): **PnL +891% (additivo), win 97%, 38.5
|
||||
trade/mese, Sharpe 10.1**. FULL 2018-2026 (include bear 2018 e 2022): +4284%, Sharpe 9.6.
|
||||
Stress slippage TEST: 0.05%/lato → 871%, 0.10%/lato → 850% (il passo ~5.4% ⋙ costi).
|
||||
|
||||
## Caveat onesti (perché NON è un candidato deploy così com'è)
|
||||
|
||||
1. **Il PnL è additivo per-trade e non misura il drawdown UNREALIZED**: l'engine
|
||||
somma i round-trip realizzati; mentre la griglia tiene 4 tranche dentro un
|
||||
drawdown −17%, l'equity vera è sott'acqua (fino a ~−15% di episodio + SL −25/30%
|
||||
quando scatta). Il win-rate 97% è il profilo classico della griglia: tante
|
||||
micro-vincite, perdite rare ma grandi (stessa famiglia di rischio del
|
||||
short-vol/martingala). Per un gate serio servirebbe l'equity curve mark-to-market.
|
||||
2. **Long-only su ETH con VALID/TEST 2023-2026** (regime rialzista/oscillante):
|
||||
l'asimmetria −17/+4.6 è anche un fit al regime. Il FULL positivo (bear inclusi)
|
||||
è incoraggiante ma il grosso del PnL resta nei periodi di reversione rialzista.
|
||||
3. Le candele flat ETH 15m (14-30%/anno) e i fill intrabar "al livello" condividono
|
||||
i caveat noti del progetto (bias pro-stop-stretti dell'engine intrabar; qui gli
|
||||
stop sono larghi, quindi l'effetto è minore).
|
||||
|
||||
## Lezioni
|
||||
|
||||
- La spec STRATEGIA_GRIGLIA.md è implementabile in modo causale e onesto; il suo
|
||||
vincolo break-even (§4) è esattamente la "lezione fee" del progetto, e il torneo
|
||||
l'ha confermato spingendo i livelli al minimo (passo massimo).
|
||||
- La griglia evoluta è un parente povero delle fade MR già in live: stesso edge
|
||||
(reversione ETH), ma incassato con inventory risk crescente invece che con
|
||||
TP/SL per-trade. Non sostituisce le MR; eventuale interesse solo come variante
|
||||
"a tranche" da gateare con equity mark-to-market (e confronto con MR01/MR02 a
|
||||
parità di rischio) PRIMA di pensarci per il PORT06.
|
||||
|
||||
## GATE "si puo' inserire?" (stessa sera) — NO-GO: edge = artefatto delle wick testnet
|
||||
|
||||
`scripts/analysis/grid_game_gate.py`: engine **mark-to-market** dedicato (equity
|
||||
per barra = capitale + inventario al close, SL gap-aware, flat-skip, fee 0.10% RT),
|
||||
metriche standard del progetto + gate PORT06. Primo passaggio ingannevole: standalone
|
||||
WINNER 15m FULL Sharpe 5.61 DD 15.8%, corr max coi sleeve 0.34, plateau 16/16,
|
||||
e il criterio formale promuoveva il half-size (OOS Sh 10.07->10.12, DD 1.48->1.36).
|
||||
MA il breakdown annuale mostrava **+4946% nel 2022** (ETH −70%): impossibile.
|
||||
|
||||
**Verifica avversariale decisiva**: il feed Deribit (testnet) e' pieno di **spike
|
||||
print** — ETH 15m ha 1064 barre con wick ≥6% sotto i close adiacenti che rientrano
|
||||
subito (fino a −19% in 15 minuti; BTC ha spike a −54% nel feb 2024). La griglia
|
||||
intrabar compra su quelle wick FINTE e rivende al rimbalzo: free money in sim,
|
||||
infillabile dal vivo. Stress **close-only** (fill solo su attraversamento del
|
||||
close): WINNER 15m CAGR 1544%->21%, Sharpe 5.61->0.92, OOS +2738%->+32%,
|
||||
trades 3803->1156; top3 1h CAGR -1.7%, OOS −18%. **~99% dell'edge vive nelle
|
||||
wick.** La versione onesta (Sharpe 0.92, DD 27%) e' molto sotto ogni sleeve
|
||||
deployato → **NON inseribile**, in nessuna size.
|
||||
|
||||
Lezioni aggiuntive:
|
||||
- Il torneo ha massimizzato esattamente l'artefatto: la convergenza su ETH 15m
|
||||
range profondo era la firma del **wick harvesting**, non di un edge.
|
||||
- I motori intrabar dei giochi (`grid_engine`, e in misura minore i TP intrabar
|
||||
di `engine.py`) vanno SEMPRE stressati con una variante close-only prima di
|
||||
promuovere qualunque vincitore: aggiungere il check ai prossimi giochi.
|
||||
- Gli sleeve in produzione NON sono toccati da questo artefatto nello stesso modo:
|
||||
pairs entra/esce sui close, le fade hanno EXIT-16 close-confirm sullo SL, e
|
||||
soprattutto il ledger REAL-TRUTH usa i fill reali (che gli spike non fillano).
|
||||
|
||||
Artefatti: `scripts/games/grid_{engine,arena,brief}.py`, spec agenti in
|
||||
`data/games/specs_grid/`, digest `data/games/grid_digests.json`, risultato
|
||||
`data/games/grid_result.json`, log `data/games/grid_tournament.log`, gate
|
||||
`scripts/analysis/grid_game_gate.py` (param `close_only` per lo stress anti-wick).
|
||||
Reference in New Issue
Block a user