Files
PythagorasGoal/docs/diary/2026-06-09-blind-traders-game.md
T
Adriano Dal Pastro d25d897fd1 feat(pairs): attiva ETH/BTC 15m flat-skip in PORT06 (BLEND, mezza size)
Origine: gioco "Blind Traders" (100 agenti ciechi su BTC/ETH anonimizzati) ->
vincitore = spread ETH/BTC reversion a 15m. Testato sul serio col gate PORT06:
non duplicato (corr 1h vs 15m = 0.37), robusto (16/16 celle Sharpe>1), edge NON
artefatto delle candele flat ETH 15m (filtrandole resta l'83% dello Sharpe).

Percorso live costruito e validato:
- pairs_research.pairs_sim_flat: engine generalizzato con exit LIVE-REALIZABLE
  (arma exit_ready, esce alla 1a barra pulita); regression-lock a pairs_sim.
- PairsWorker: flat_skip + exit_ready + rilevamento flat da OHLC (1h byte-exact).
- runner: fetch diretto dei timeframe sub-orari + override position_size per-sleeve.
- validate_worker_pairs: replay worker == backtest a 15m (8452 vs 8453 trade).
- _defs/build_everything: sleeve PR_ETHBTC_15M (mezza size, pos 0.10) -> PORT06
  FULL 6.43->7.20, OOS 8.58->9.66, DD giu'. Rischio bilanciato col 1h.
- smoke live: Cerbero serve candele 15m fresche; worker ticca.

Diari docs/diary/2026-06-09-*. Caveat slippage: mezza size = blend-tilt prudente.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-09 11:48:15 +00:00

57 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 2026-06-09 — Gioco "Blind Traders": 100 agenti ciechi
## Setup
100 agenti LLM (haiku) ricevono due serie anonime **X** e **Y** — in realta'
**BTC** e **ETH** 1h/15m/5m, mai etichettate — e devono proporre UNA regola che
"anticipi" i movimenti per un PnL netto positivo (fee 0.10% RT) con **>=10
trade/mese**. Non sanno cosa siano i dati. L'orchestratore (engine deterministico)
valuta ogni strategia, assegna un punteggio su **PNL + %win**, da' **90 epoche di
elaborazione** (hill-climb dei parametri) e **ogni 10 epoche blocca il 10% meno
profittevole** -> restano i **10 piu' profittevoli**.
Infrastruttura in `scripts/games/`:
- `engine.py` — dati anonimizzati, 6 famiglie segnale (zscore/breakout/ma_cross/
rsi/momentum/pairs), backtester causale fee-aware, scoring (>=10 tpm o squalifica).
- `agent_brief.py` — digest ANONIMO (stat aggregate + finestra normalizzata) + menu.
- `arena.py` — torneo a **3 finestre**: TRAIN (hill-climb), VALID (cull+rank
dell'orchestratore), TEST (OOS puro, mai ottimizzato). Anti-overfit.
- `run_game.py` — carica le 100 spec degli agenti e lancia il torneo.
## Risultato emergente
I 100 agenti ciechi, leggendo SOLO le statistiche anonime (autocorrelazione
negativa, "after_big_move_continues_pct" ~30-40% => le mosse estreme rientrano),
hanno **riscoperto da soli che il mercato e' mean-reverting**: 100/100 reversion,
67 hanno scelto il detector pairs, 30 zscore. Esattamente la lezione storica del
progetto (edge = reversione; pairs ETH/BTC il piu' robusto) — senza sapere che
fosse crypto.
## Classifica finale (top 10) — tutti PAIRS su 15m
Vincitore **agente #91** (15m, pairs market-neutral sul log-ratio X/Y):
- TEST/OOS puro: **PnL +3126%**, **win 77%**, **108.9 trade/mese**, **Sharpe 20.3**
- Full-period: PnL +8052%, win 70%, 94 tpm, Sharpe 12.2 (9604 trade)
- params: lookback 66, entry 1.67σ, exit 1.0σ, max_bars 35
- ipotesi (cieca): "Y altamente reversivo, X/Y log-ratio strong mean-reversion
(-0.43 autocorr), bassa correlazione cross-asset -> pairs market-neutral".
Tutti i 10 finalisti: pairs 15m, TEST Sharpe medio 19.9, tpm 66-109 (>>10).
## Caveat onesti
- Numeri OOS ottimistici: PnL additivo a notional fisso, **niente slippage sulle 2
gambe**, finestra OOS calma, 15m molti trade. Coerente col caveat PR01 del
progetto (Sharpe reale atteso ~4-5, non 20). Il valore del gioco e' il **metodo**
(scoperta cieca + selezione anti-overfit), non il livello assoluto di Sharpe.
- La convergenza su pairs conferma robustezza ma riduce la diversita': i 10 finalisti
sono varianti della stessa idea (ETH/BTC spread). Per un portafoglio servirebbe
diversificare (gia' fatto altrove: fade + honest + shape).
## Re-run "sobrio" con slippage (0.05%/lato)
`GAME_SLIP=0.0005` -> i pairs pagano +0.20% RT extra (4 lati). Lo slippage spinge
l'ottimizzatore verso **meno churn**: tpm dei finalisti 66-109 -> **40-47**, Sharpe
top-10 ~20 -> ~13.5. Vincitore **#43** (15m pairs): TEST PnL **+2091%**, win 77%,
**46.9 tpm**, Sharpe **15.6**. La gerarchia (pairs 15m domina) e la robustezza
reggono lo stress; lo Sharpe reale atteso resta ~4-5 (OOS calmo + PnL additivo).
Log: `data/games/game_slip.log`.
Artefatti: `data/games/tournament_result.json`, `data/games/specs/agent_*.json`,
`engine.set_slippage()` (env `GAME_SLIP`).