Files
PythagorasGoal/docs/diary/2026-06-21-blind-signal-fleet.md
Adriano Dal Pastro 1afb1014c9 research(blind): 52 agenti ciechi su curve anonime BTC/ETH — orchestratore valuta PnL/maxDD, niente di nuovo regge
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>
2026-06-21 07:05:04 +00:00

7.3 KiB
Raw Permalink Blame History

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-luckREFUTED ×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-redundancyREFUTED ×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).