diary(2026-08-22): ondata multi-agente — 20 filoni, 0 candidati, 1 difetto di produzione, 3 soglie falsificate
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user