Files
PythagorasGoal/docs/diary/2026-08-22-wave-multiagente.md
T

10 KiB
Raw Blame History

Ondata multi-agente 2026-08-22 — 20 filoni, branch research/wave-0822

Mandato dell'operatore: "metti decine di agenti a fare analisi di nuove strategie possibili. Lavora su branch separato. Lo scopo e' sempre lo stesso arrivare ai 50 giornalieri velocemente."

Esito in una riga: 0 candidati promossi, 1 difetto di produzione che avrebbe falsato un gate fra 36 giorni, 3 soglie pubblicate falsificate, 1 leva strutturale che nessun gate del progetto sa vedere. Book, pesi, cron, config INVARIATI.

Ledger completo per filone: docs/research/RESULTS-0822.md. Briefing dato agli agenti: docs/research/BRIEF-0822.md. 21 script in scripts/research/r0822_*.py (15.295 righe, compilano tutti, ognuno gira da solo).

0. Come e' stata condotta (e perche' conta)

Vincolo di macchina: 2 core, 7 GB, e sulla stessa VPS gira il libro con soldi veri (cron_book al minuto :07). Il briefing imponeva nice -n 19, budget 15 min/run, sola lettura su config/, data/live/, src/live/, scripts/live/, cron. Ha tenuto: al picco di carico (load 14 su 2 core) il giro delle 17:07 del libro e' girato in 18 secondi, feed fresco, nessuna azione, nessun OOM. ⚠️ Fatto operativo da ricordare: il cron gira dal working tree. Con questo branch attivo, stanotte alle 00:30 il cron esegue il codice di QUESTO branch. Verificato che il diff vs main tocca solo scripts/research/ e docs/research/ -> produzione identica. E' anche il motivo per cui nessuna riparazione e' stata applicata qui: sarebbe andata live senza una decisione.

Il briefing dava agli agenti, in anticipo, i dieci modi in cui questo progetto si e' gia' ingannato (null del de-levering, TP01 travestito, selezione sull'hold-out, fortuna d'ancora, Sharpe implausibile, win-rate come knob, ...) e la lista dei filoni morti. Sette agenti hanno catturato un errore proprio prima di pubblicare, e tre hanno refutato una propria ipotesi in corsa.

1. Il risultato che va agito — 4 monitor forward su 6 sono rotti

fetch_hyperliquid (e resample_tf) scrivono la barra del giorno in corso; advance() dei monitor la consuma e porta last_ts su di essa -> le ore restanti di ogni giorno non entrano in nessun rendimento registrato.

monitor barre coincidenti col replay min/giorno registrati gate
paper_statarb 0/46 4 STATARB 27/09
paper_dvolspread 0/28 2 DVOLSPREAD 24/10
paper_xsr 1/28 41 XSR01 23/10
paper_portfolio 7/56 19
paper_prevday 1259/1319 1.438
paper_combo 7/37 1.402 — (sano per caso: aspetta una borsa)

Il gate STATARB del 27/09 si ribalta su 2 criteri su 3: Sharpe registrato +1,96 contro 2,02 ricostruito, maxDD 2,2% contro 15,3% (guardia <10%). Ma la finestra non va persa, ed e' misurato due volte in modo indipendente: il feed non riscrive le barre chiuse (paper_prevday 1427/1488 barre identiche al bit dopo 62 notti; e le 6 barre di paper_statarb recuperate dopo il guasto EPERM del 09-15/07 coincidono al bit). -> La riparazione e' "riparare advance() + RIGENERARE", non "riparare e azzerare": nessuna data di gate si sposta. Guardia raccomandata (non implementata): ts_ultima_barra + cadenza <= mtime del file, grazia 5 min. O(1), segnala 5/6, tace sul sano, controllo positivo sintetico 6/6 nei due versi. ⚠️ monitor_health non poteva vederlo: una serie fresca, completa e sbagliata passa ogni controllo di freschezza. E implausible_sharpe esiste dal 26/07 ma non e' mai stato puntato sulle serie forward (avrebbe segnalato Sharpe 15,8 su 28 barre).

2. Tre soglie pubblicate, falsificate con misure

  1. "XS01 serve ~$20k" -> non esiste soglia da min-order. L'origine del numero era "rumore di arrotondamento", una stima a occhio del 19/06. Haircut ~0 gia' a $200-600 allocati. Meccanismo: gli ordini sono due popolazioni — il ribilanciamento del segnale e' il 13% degli ordini ma il 75% del nozionale (ticket $13,65, passa sempre); la deriva del vol-target e' l'87% degli ordini ma il 25% del nozionale (ticket $0,64, il pavimento la taglia ed e' gratis). Contare gli ordini da' 16% e sembra un disastro; contare il nozionale da' 75%. Due agenti indipendenti ci sono arrivati per strade diverse. ⚠️ Il "$20k di XS01" e il "$20k della decisione di venue" erano due cose diverse conflate in CLAUDE.md. Il primo cade; il secondo regge intatto — e' una decisione dell'operatore sull'asse della rovina, non sull'eseguibilita'.
  2. "Slippage = rischio #1 di XSR01" -> refutato con margine 21x al livello di liquidita' odierno (mezzo-spread 0,7-1,0 bps contro i ~16 che servirebbero a uccidere l'edge).
  3. "BTC opzioni fuori a $3.000 (min 0.1 = $6.210/lotto)" -> misurato sulla famiglia inverse, che il conto (in USDC) non puo' marginare. La famiglia USDC-lineare ha lotti 10x piu' piccoli. Il muro resta, ma per il prezzo del lotto, non per quello che si credeva.

3. La leva: l'unica variabile che nessun gate del progetto sa vedere

Lo Sharpe e' invariante alla scala (misurato: 1,31 a ogni cella del knob) -> deflated_sharpe e marginal_vs_tp01 non falliscono sulla leva, non la vedono. E' per questo che in due mesi la scala non e' mai stata esaminata. Il libro gira al 7% di Kelly e raccoglie il 15% della crescita massima in log. Il gradino eseguibile 1,00x -> 1,25-1,50x vale 14,7 anni -> 12,9-11,6 al capitale-rendita (€500/mese, netto fisco). Lo scettico ha confermato il risultato di testa e ha tolto la sua condizione bloccante: sotto la lente wick accoppiata il maxDD prende un ricarico moltiplicativo costante del ~3,5%, non un'amplificazione (il maxDD e' multi-giorno, il wick e' di un giorno). Il gradino resta NON autorizzato: cadono una riserva su tre. Restano il drift stimato su 7,4 anni (k* e' lineare nel suo errore) e la coda assente dal dataset — un solo giorno a 10% all'anno porta k* da ~10x a 2x. 📌 Ma la lezione del 25/07 e' vera e non si trasferisce: su una regola a UN giorno (daily-loss, stop di conto) close-only e' esattamente cieca — 0,00 breach/anno contro 0,40-1,21 veri, rapporto INF. Sul canale prop/funded la lente accoppiata resta obbligatoria.

4. Cosa e' morto, e come

Filoni chiusi con autopsia (l'elenco per esteso e' nel ledger): adaptive-horizon (il "vincitore adattivo" e' un lookback costante travestito), dealer-gamma (la gamba tradeable e' incoerente: BTC non separa, ETH separa al rovescio), ortho-screen 7/7, oi-pin (il max-pain non batte mai la media a 7 giorni dello spot), term-structure (la pendenza e' un termometro contemporaneo), skew direzionale (il prezzo muove lo skew, t 3,1-9,4 su 8/8 — non il contrario), flow-squeeze, basis-calendar (il basis dei datati E' il funding del perp), alt-options (alt), xs-lite, vrp-quote-vere.

Tre chiusure di famiglia che valgono per le prossime ondate:

  • Il filone funding si chiude sul QUARTO lato (affollamento): misurato su 53.430 ore / 3 anni, non predice ne' direzione ne' volatilita'. E i futures datati non sono un quinto lato: sono lo stesso lato quotato diversamente (+7,33% implicito contro +6,48% realizzato, premio incassabile +0,85%/anno con IC95 che contiene lo zero).
  • La mean-reversion non risorge sotto due conditioner mai provati (volume, shock 3σ): la selezione in-sample sceglie il ramo di continuazione in entrambi i casi.
  • 📌 Uno screen largo su BTC/ETH direzionale NON PUO' passare il proprio gate. Su 168 trial il massimo Sharpe atteso dal puro rumore e' 1,572, sopra il soffitto direzionale misurato (~1,3). Non e' sfortuna, e' aritmetica. Le prossime ondate o dichiarano famiglie molto piu' piccole in anticipo, o cambiano meccanismo.

⚠️ Tre volte in questa ondata l'eseguibilita' a $600 NON e' stata il vincolo (haircut 0,00-0,01; lotti $7-242; margine ~$148). Dopo due mesi in cui il muro era sempre il capitale, adesso muoiono tutti sull'edge. E' un'informazione sul dove cercare.

5. Regole nuove, e una ritirata

Nuove:

  • L'open interest non misura la negoziabilita' — su Deribit USDC sono quasi anti-correlati (rho di rango 0,77): SOL_USDC e' 1ª per OI e ultima per quote a due lati (9%); BTC_USDC ha 5 strumenti con OI>=100 e il 93% dei put quotati.
  • Il deflated-Sharpe va calcolato DI SCREEN, non solo di famiglia (168 trial, non 24).
  • Un placebo si controlla per BILANCIAMENTO DEL SEGNO prima di usarlo: un null che concorda col segnale solo nel 14% dei casi non e' un null, e' la strategia invertita — e fabbrica celle "significative".
  • Il null del de-levering e' DEGENERE quando la variante e' una ri-scalatura (sh(k*base) === sh(base)): il test che serve e' iso-peso sullo Sharpe.
  • Un gate che stampa None va verificato prima di dichiararlo "non girato".
  • Su una finestra interamente post-hold-out, marginal_vs_tp01 non puo' dare ADDS per costruzione — un NEUTRAL li' non e' un giudizio.

Ritirata (era stata pubblicata poche ore prima, in questa stessa ondata): "Su equity a gradino un overlay giornaliero e' non-causale"falso su questo motore: backtest_signals contabilizza al giorno d'ingresso in 291/293 trade, e la "riparazione" e' un no-op bit-exact. Il "+0,04 fantasma" era la differenza fra due varianti entrambe causali, e quella scartata era la migliore sull'hold-out. Il costo di una regola derivata da un difetto inesistente e' gia' stato pagato.

6. Cio' che resta aperto (decisioni dell'operatore, non mie)

  1. Riparare advance() + rigenerare le serie forward, prima del 27/09.
  2. Cablare la guardia D2 (ts_ultima_barra + cadenza <= mtime) in monitor_health.
  3. Il collettore della catena raccoglie la famiglia inverse; ETH_USDC costa +587 chiamate/giro (+90%) ed e' una decisione sul rate limit per-IP, che il 29/07 e' gia' costata un guasto.
  4. Rimisurare f di VRP01 term-structure-consistent (il 42% del difetto e' li', e la regola per prenderlo era gia' scritta il 03/07).
  5. XS01 e' eseguibile a ~$1.300 di conto, non a $20k. Resta fuori per la decisione di venue, che e' un'altra cosa. Se il piano cambia, si riapre prima.