- Gioco GRID TRADERS (sessione 3, regola STRATEGIA_GRIGLIA.md): grid_engine (backtest causale fee-aware della griglia geometrica), grid_brief (digest anonimo per dimensionare la griglia), grid_arena (torneo 100 agenti); diario docs/diary/2026-06-10-grid-traders-game3.md - Gioco OPZIONI: options_engine (BS + skew fittato + DVOL storica), options_arena, opt_calibrate (superficie premi REALE da cerbero-bite) - Gioco SESSION: session_engine/session_arena (pattern orari intraday) - arena: vincolo GAME_NO_LIVE=1 (vieta pairs e fade zscore/breakout/momentum gia' live, coercizione a trend/ma_cross) + normalize del candidato PRIMA della valutazione nel hill-climb - Gate: grid_game_gate (griglia ETH vincitrice vs PORT06, mark-to-market), pairs30m_gate (ETH/BTC 30m ridondante col 15m gia' deployato?) - reset_flatten: flatten one-shot del conto testnet per il reset portafoglio - .gitignore: data/portfolio_paper_stats/ (stato runtime sleeve paper-only) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
7.2 KiB
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 geometricaratio=((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);_normalizedell'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'è)
- 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.
- 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.
- 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 diengine.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).