# 2026-06-21 — Blind signal fleet: 52 agenti "esperti di segnali" su curve anonime BTC/ETH ## Obiettivo (richiesta utente) Far partire ~50 subagenti **esperti di segnali** a cui passare lo storico di **ETH e BTC in forma ANONIMA** ("senza dire di cosa sono, con curve sovrapposte"): devono trovare come **anticipare l'andamento**, liberi di scrivere script o reti neurali ad hoc. L'**orchestratore** valuta la validità su **PnL e maxDD**. L'idea forte del setup cieco: se gli agenti non sanno che sono BTC/ETH, non possono pattern-matchare a memoria il crash COVID 2020 / l'orso 2022 / l'halving 2024 — devono trovare un timing **trasferibile**, non riconoscere l'era. È anche un test di onestà del metodo: l'edge deve reggere su un hold-out che gli agenti non hanno mai visto. ## Setup — harness cieco e leak-free (prima degli agenti) > 50 agenti su un harness che perde = 50 fantasie (lezione fondante del progetto). Quindi prima > l'infrastruttura, poi la flotta. - `scripts/research/blind/make_blind.py` — esporta BTC/ETH **1d** (via il path certificato `altlib.get`) come **"Series A" / "Series B"**: rebase a **100** (curve sovrapposte, il livello non urla più "$60k bitcoin"), **calendario sintetico** dal 2001 (niente era-crypto da riconoscere), volume normalizzato alla mediana. Split **70% train (visibile agli agenti) / 30% test (solo orchestratore)**. Mapping A=BTC, B=ETH tenuto FUORI dal meta visibile. - `scripts/research/blind/blindlib.py` — l'unico modulo che un agente importa. Evaluator leak-free: la posizione decisa a `close[i]` è **shiftata** e tenuta nella barra `i+1` (impossibile leakare moltiplicando un peso per il rendimento della stessa barra), fee su turnover (Deribit 0.10% RT). Toolkit di indicatori causali ri-esportati da altlib. - **Guardia di causalità automatica** (`causality_ok`): ri-chiama `signal()` su un **prefisso troncato** e pretende che la coda combaci con `signal()` sull'array intero. Qualunque segnale che sbircia il futuro (shift(-k), finestre centrate, fit globale, statistiche full-sample) **diverge → squalificato**. È ciò che rende onesta anche la "rete neurale ad hoc": un modello fittato sul df intero (che a test-time contiene il futuro) fallisce la guardia; passa solo l'expanding/walk-forward. - `score_all.py` — il **giudice unico dell'orchestratore**: per ogni modulo gira la guardia, valuta sul **test held-out** A e B, ordina per PnL/maxDD vs benchmark buy&hold. - `verify_top.py` — secondo strato avversariale: corr al trend canonico TSMOM, fee-stress 0.20% RT, jackknife drop-block. Verifica dell'harness: momentum onesto → causale ok, OOS +44% a 19% DD; segnale **deliberatamente leaky** (guarda domani) → Sharpe 18 assurdo ma **correttamente squalificato**. Benchmark buy&hold OOS sul tail = **−7% PnL, 68% DD, Sharpe 0.22** (il tail 2024-26 contiene un drawdown brutale → anticipare il movimento ha spazio reale per vincere). ## Flotta — 52 agenti, 52 ipotesi distinte Workflow `blind-signal-fleet` (52 agenti in parallelo, ~2h, 2.5M token, 971 tool-call). A ognuno **un'ipotesi diversa** (per non riscoprire tutti il momentum): 11 famiglie — trend/TSMOM, breakout (Donchian/Keltner/squeeze/pivot/volbreak), mean-rev/oscillatori (RSI/Bollinger/zrev/stoch/ DPO/WillR), vol-regime (vol-target/regime-switch/ATR-ride/dd-derisk/**vol-of-vol**), struttura (HHLL/channel-pos), statistici (Hurst/autocorr/efficiency/skew/entropy), ciclo (FFT/Kalman), volume (OBV/PVT/vol-div), **8 ML** (Ridge, logistic, MLP-reg, MLP-clf, GBM, kNN-analog, RLS, RandomForest) e 5 meta/ensemble. **Esito flotta: 52/52 riportati, 52/52 passano la guardia di causalità** (zero look-ahead — la disciplina dell'harness ha tenuto su tutta la flotta, ML inclusi). ## Risultati OOS (orchestratore — PnL & maxDD sul test held-out) Benchmark buy&hold OOS: **PnL −7%, maxDD 68%**. Top per Sharpe-min (peggiore tra A e B): | # | strategia | PnL_A | PnL_B | DD worst | Sh_min | famiglia | |---|---|---|---|---|---|---| | 1 | macd | +23% | +19% | **11%** | 0.84 | trend | | 2 | accel | +40% | +22% | 12% | 0.79 | trend (2ª diff) | | 3 | vol_of_vol | +30% | +32% | 21% | 0.69 | vol-regime | | 4 | regime_switch | +25% | +46% | 20% | 0.63 | vol-regime | | 5 | rf (ML) | +12% | +8% | **7%** | 0.62 | ML walk-fwd | | 6 | obv | +22% | +20% | 16% | 0.60 | volume | Tutti i top sono varianti **trend/vol-regime**. Mean-reversion e ML (logistic/gbm/mlp) in fondo → ri-conferma cieca di "mean-rev morto" e "ML walk-forward debole" del progetto. Lo **Sharpe OOS ~0.84 decade dal train ~1.4** (firma classica di overfit/regime). Ma vs buy&hold (−7%/68% DD) i top trend **ribaltano il segno e tagliano il DD ~3-6×**: è il valore reale, identico alla lezione TP01. ## Verifica avversariale — 3 scettici indipendenti (REFUTE, non confirm) 1. **Regime-luck** → **REFUTED ×3.** I top-5 bar su ~800 OOS forniscono il **67-102% di tutto il PnL**; togliendo 10 bar la serie va **negativa**; `accel` crolla nel terzo finale (COMB Sharpe **−1.21**); A e B non concordano su *quando* funziona. Edge concentrato, non distribuito. 2. **Trend-redundancy** → **REFUTED ×4.** Regressione `cand ~ α + β·TSMOM` (Newey-West HAC): **t(α) = +0.92..+1.51, nessuno supera 1.96**. corr-al-trend 0.34-0.74, β 0.45-0.73; media residua +0.05-0.08/anno = rumore. Sono TSMOM meglio tarati, **non alpha ortogonale**; contro il TP01 reale (~1.3) il margine svanisce. 3. **Overfit/robustezza** → MACD **non-refuted** (plateau vero a un asse, 0% celle <0.5) ma Sharpe OOS onesto **0.84, non 1.40** (numero da docstring = in-sample). `accel` **REFUTED** (il termine di accelerazione, la sua tesi, **danneggia** l'OOS; LAG knife-edge: −20% → −63% Sharpe; corner congiunti negativi). `vol_of_vol` **REFUTED** (gate threshold-fit: PCTL 0.80→0.60 distrugge il 73% dello Sharpe OOS). Fee = drag secondario ~10%, non il killer; il killer è la sensibilità ai parametri. ## Verdetto **52 agenti ciechi, orchestratore che valuta PnL e maxDD su hold-out, e NIENTE di nuovo sopravvive alla verifica avversariale.** Ogni "vincitore" è trend-beta di due curve strutturalmente rialziste; soffitto Sharpe OOS **~0.84** su questo singolo hold-out; nessun alpha statisticamente distinguibile dal TSMOM. È una **ri-conferma INDIPENDENTE e CIECA del soffitto direzionale ~1.3** del progetto e del pattern "TSMOM travestito" — raggiunta da agenti che non sapevano nemmeno fossero BTC/ETH. Il più solido è **macd** (plateau vero, OOS Sharpe 0.84, DD 11%): classe-TP01, **forward-monitor al più, non deploy**. Conferma le regole: (a) giudicare lo Sharpe **marginale vs TP01**, non assoluto; (b) un hold-out corto premia chi è stato fortunato in pochi bar. ### Valore metodologico (cosa resta) L'harness cieco riusabile: `data/blind/` + `blindlib`/`blind_eval`/`score_all`/`verify_top`. La **guardia di causalità online** ha tenuto 52 strategie (ML incluso) leak-free senza intervento manuale → strumento da riusare per ogni futura flotta. La pipeline "anonimizza → fan-out cieco → giudice unico OOS → 3 scettici (regime-luck / trend-redundancy / overfit)" ha ucciso ogni falso positivo che lo Sharpe assoluto avrebbe promosso. File: `scripts/research/blind/{make_blind,blindlib,blind_eval,score_all,verify_top}.py`, `agents/agent_00..51_*.py` (52 moduli), `leaderboard.json`, `verify_top.json`, `SKEPTIC_VERDICTS.json`. Dati rigenerabili: `data/blind/` (gitignored).