Files
PythagorasGoal/Old/docs/diary/2026-06-10-grid-traders-game3.md
T
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

7.2 KiB
Raw Blame History

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