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