1afb1014c9
Flotta di 52 subagenti "esperti di segnali" su storico BTC/ETH ANONIMIZZATO (Series A/B rebased a 100, calendario sintetico, split 70/30) — non sanno cosa siano. Ognuno scrive un signal(df)->position causale (script o ML), tunato solo sul train. Orchestratore valuta su PnL e maxDD nel test held-out. Harness cieco leak-free (riusabile): - make_blind.py: export anonimo + overlay; blindlib.py: evaluator con shift della posizione + GUARDIA DI CAUSALITA' online (squalifica ogni look-ahead, ML incluso); blind_eval.py CLI; score_all.py giudice OOS; verify_top.py (corr-al-trend, fee-stress, jackknife). - 52/52 passano la guardia (zero leak su tutta la flotta). Esito OOS (benchmark buy&hold: -7% PnL, 68% DD): - top = macd (+21%, DD 11%, Sh 0.84), accel, vol_of_vol, regime_switch, rf, obv — tutti trend/vol-regime. Sharpe OOS ~0.84 decade dal train ~1.4. Mean-rev e ML in fondo. - 3 scettici indipendenti: REFUTED. regime-luck (top-5 bar = 67-102% del PnL); trend-redundancy (HAC alpha t=+0.9..+1.5, nessuno >1.96 — TSMOM travestito); overfit (accel/vov knife-edge). Verdetto: ri-conferma CIECA e indipendente del soffitto direzionale ~1.3. macd = classe-TP01, forward-monitor non deploy. Diario 2026-06-21-blind-signal-fleet.md. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
112 lines
7.3 KiB
Markdown
112 lines
7.3 KiB
Markdown
# 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).
|