research(wave-0822): BIN-FREQ — direzione reale (0/72 sul segno inverso), taglia = selezione; e due premesse del briefing refutate

This commit is contained in:
Adriano Dal Pastro
2026-08-22 21:22:43 +00:00
parent 74539db8b8
commit fd37add518
2 changed files with 117 additions and 23 deletions
+73 -1
View File
@@ -697,7 +697,7 @@ stessi hanno nominato senza poterli eseguire**. Stesso contratto di consegna, st
| 22 | MAKER | l'esecuzione passiva e' una fonte di ritorno, al netto del costo di non essere eseguiti? | **SCARTATO** — il segno dipende da `<` contro `<=` |
| 23 | BOCPD | un rilevatore di cambio di regime vero batte il miglior lookback COSTANTE? | **SCARTATO** — filone chiuso definitivamente |
| 24 | CRITICO | cosa NON e' stato misurato, e quale singola misura mancante vale di piu' | **3 correzioni all'ondata**, 1 regola mia ritirata |
| 25 | BIN-FREQ | il binario di frequenza su SKH01 e' un candidato o un sottoprodotto? | _in corso_ |
| 25 | BIN-FREQ | il binario di frequenza su SKH01 e' un candidato o un sottoprodotto? | **LEAD** — direzione reale, taglia = selezione |
| 26 | TP01-SINISTRO | quanto pesa TP01 se l'obiettivo include un crash che nel campione non c'e'? | **allarme SCARTATO** — il rischio e' XS01, non TP01 |
| 27 | SURFACE-RV | la superficie e' internamente incoerente, e l'incoerenza vale piu' del costo di attraversarla? | **SCARTATO** — l'incoerenza al mid **e'** la larghezza del mercato |
@@ -1157,3 +1157,75 @@ chiusure**, e i close giornalieri non lo vedrebbero.
⚠️ *Nota di attribuzione: il file risultava `M` in git perche' **io** (coordinatore) l'avevo incluso
in un commit mentre l'agente ci stava ancora lavorando — non un altro agente. Un `git add -A` durante
un'ondata cattura il lavoro in corso.*
---
## 25 — BIN-FREQ (il binario di frequenza su SKH01, giudicato come candidato)
`scripts/research/r0822b_bin_freq.py` (~400 s, **23 ancore piene**, due esecuzioni indipendenti con
output **numericamente identici**). **144 celle** dichiarate nel docstring **prima di guardare**, piu'
i **71 trial gia' spesi sullo stesso oggetto** (28 VOL-SIZE + 43 scettico) → **conto onesto = 215**:
*riaprire un parametro riapre la sua famiglia.*
**Repliche bit-exact** (`max|dif| = 0`) contro `sleeves._skyhook_returns()` **e** contro
`r0702_anchor_skh01.run_asset`; **titolo dello scettico riprodotto esattamente** chiamando la sua
funzione (`BIN L>=med` +0,080 in 20/23, inverso 0,159 in 0/23).
| | ShFULL | ShHOLD | maxDD | CAGR |
|---|---|---|---|---|
| BASE (libro live 75/25) | 1,626 | 1,037 | 10,4% | 18,6% |
| BIN, peso effettivo lasciato cadere | 1,690 | 1,031 | 10,3% | 17,8% |
| **BIN, controllo ISO-PESO** | **1,589** | 0,956 | 10,0% | 16,8% |
📌 **La statistica che decide non e' l'argmax, e' la MEDIANA DI FAMIGLIA.** Argmax
(`q0,50 w60 h0,10 s+`) ISO **+0,112 in 23/23**; **stima onesta di famiglia +0,007**, con **39/72
celle positive = 54% ≈ monetina**. **L'argmax vale 16× la mediana → punta, non plateau.**
**Controllo di segno: 0/72 celle positive** sulla meta' inversa → la *direzione* e' solidissima.
**Gate:** `marginal_vs_tp01` **ADDS**; selezione **in-sample-only** sceglie la stessa cella mentre
scegliendo **sull'hold-out** ne esce un'altra (0,017) → **il gate ha potenza**;
**`weights_tilt_null` FAIL** (pctl 36-38) **e per giunta inerte** (il binario *abbassa* il peso
effettivo 0,250→0,19, e nella forma di deploy naturale il vettore proposto e' identico a quello
corrente); causalita' verificata con **troncamento diretto** su 52 decisioni, 0 divergenti;
**trasferisce a SKH01_V1** (geometria d'uscita diversa): +0,087 in 20-21/23.
**Il deflated-Sharpe NON e' vacuo — refuta l'ipotesi a-priori che l'agente aveva registrato:**
**0,976** (N=144) / **0,977** (N=215, conto onesto) / 0,948 (N=500), baseline 0,828/0,834. E il
**motivo e' riusabile**: il DSR e' vacuo quando i trial si somigliano (var→0 ⇒ sr0→0 ⇒ DSR≈1 *per
chiunque*); una famiglia **binaria** contiene celle che scartano insiemi di trade molto diversi,
quindi **riacquista potenza**. *Non e' il binario a essere piu' solido: e' la famiglia a essere piu'
larga.* ✅ Terza misura convergente della stessa giornata sul difetto del DSR (con BOCPD e CRITICO).
⚠️ **Il null "con potenza" ha una mediana che NON e' zero, ed e' un fatto di misura:** scartare a caso
il 40% dei trade **danneggia**, perche' lo Sharpe annualizzato va con √(scommesse/anno) — misurato:
gamba 1,107 → **0,883** permutata contro **0,861** previsti da √0,60. Il null resta valido e **piu'
severo** (reale +0,112 vs massimo del null 0,031, p<0,01), **ma risponde a "batte una selezione
casuale?", non a "batte il non filtrare?"**.
🚨 **Due premesse del MIO briefing misurate e REFUTATE:**
(i) *"il binario dimezza gli ordini → migliora l'eseguibilita' e riduce le fee"* — gli ordini
**nettati** calano del **17%**, non del 50%; i sotto-min-order **non si muovono** perche' sono di
TP01; e l'**haircut a $635 e' 0,001 in entrambe le braccia**: non c'era niente da guadagnare.
(ii) *"converti il risparmio di fee in Sharpe con la curva del 26/07"* — **a fee ZERO l'effetto resta
l'87-110%** → non e' risparmio di costo, e' **informazione sul rendimento lordo**, e convertirlo
sarebbe stata un'attribuzione sbagliata.
**VERDETTO: LEAD** (non candidato, non scartato). La **direzione** e' reale e sopravvive a tutto; la
**taglia di una singola cella e' selezione**.
📌 **E la domanda che avevo posto — "+0,080 contro ±0,196 di banda d'ancora, merita?" — era il
confronto SBAGLIATO** (la banda del *livello* si cancella in un disegno appaiato), **ma la risposta
corretta e' PEGGIORE per il candidato**. Criterio dichiarato, 4 gambe: (1) mediana di famiglia ≥ meta'
della cella e >65% celle positive → **FAIL (6%, 54%)**; (2) `weights_tilt_null`**FAIL/vacuo**;
(3) marginale + null con potenza → PASS; (4) taglia ≥ €0,10/giorno per pagare un modo di fallire in
piu' → **FAIL: €0,0113/giorno** ($4,79/anno a $635).
Due prove ausiliarie che chiudono il caso: **due implementazioni difendibili della stessa regola**
(d'accordo sul 97,6% dei trade) danno **+0,066 contro +0,080** — *il 21% dell'effetto sta nel come si
riempie il warm-up*; e **versare €500/mese vale ~1456× l'effetto misurato**.
**Libro, pesi, cron, config INVARIATI.**
📌 **Riapertura pre-registrata: non una data, una SOGLIA DI CAPITALE** — cio' che fallisce e' il
rapporto fra un costo operativo **fisso** e un beneficio **proporzionale**, e nessun dato in piu' lo
cambia (con SE(Sharpe)≈1,4 su 6 mesi nessun forward misura 0,07). €0,10/giorno richiede **~$5.600**
alla stima della cella e **~$53.000** a quella onesta di famiglia → si rivaluta alla revisione dei
**$20k** gia' in calendario, **e solo se la cella e' giustificata da un MECCANISMO** invece che
dall'argmax di una griglia.