research(vrp): f misurato sul 10g — il mio sospetto era sbagliato, e il campione non basta ancora
Book, pesi, config INVARIATI. Nuovo sorvegliante in cron_daily. IL CAMPIONE C'ERA GIA': 8 scadenze utilizzabili per asset su 8, entrambe le strutture, 16 osservazioni ciascuna. Non serviva aspettare per fare la misura; serve aspettare per rispondere alla DIFFERENZA, che e' un'altra domanda. CORREZIONE A UN ARGOMENTO PUBBLICATO POCHE ORE FA. Nel gate del tenore avevo scritto che la cella vincente 'sta massimizzando l'errore di modello' perche' compra l'ala piu' lontana. Misurato: il meccanismo e' confermato e piu' forte del previsto (f_long 5.85 contro 2.23) ma la conclusione era ROVESCIATA — quell'ala pesa il 3.2% del premio corto invece del 18.4%, quindi sul credito NETTO l'effetto e' minore: f_net 0.852 contro 0.718, il candidato ha un f MIGLIORE. Con f_net = (f_short - k*f_long)/(1-k), un f_long grande fa danno solo moltiplicato per un k grande: avevo guardato il fattore e non il peso. La decisione (nessun cambio) regge, ma su tre gambe invece di quattro. Artefatto di tick escluso prima di crederci: l'ask dell'ala sta a 22 tick mediani, minimo 15, 0% delle osservazioni a <=2 tick. LA DIFFERENZA NON E' STABILITA: appaiata per (asset, scadenza) fa +0.109 con IC95 [-0.047, +0.193], 11/16 positive -> contiene lo zero. Replica indipendente del canonico: 0.718 per un percorso con finestra DTE e pairing diversi da quello che stamattina dava 0.73. CRITERIO PRE-REGISTRATO, congelato in un test: >=40 coppie E ampiezza IC95 <=0.12 (oggi 16 e 0.241), prima gamba verso fine ottobre 2026. Il sorvegliante rifa' la misura ogni giorno e notifica una volta sola quando basta — lezione DVOLSPREAD, un lead senza sorvegliante e senza data e' un lead perso. Calibrazione della soglia verificata prima di fidarsene: con differenza vera nulla lo zero e' escluso nel 5.0/4.0/3.0% dei casi a n=16/40/60, cioe' il 5% atteso. Il test iniziale su seed fisso falliva perche' quel seed era uno dei 5% legittimi: sostituito con un test sulla proprieta'. REGOLE: (a) un fattore di errore si giudica moltiplicato per il suo peso; (b) prima di credere a un rapporto estremo su un prezzo piccolo, contare i tick; (c) una soglia sull'ampiezza di un IC richiede di verificarne la copertura; (d) 'non abbastanza campione' non e' 'nessuna differenza'. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
# 2026-07-30 (5º filone) — f misurato sul 10g: il mio sospetto era sbagliato, e il campione non basta ancora
|
||||
|
||||
**Richiesta dell'operatore:** *«misura f sul 10g quando ci sono abbastanza scadenze».*
|
||||
**Esito: misurato oggi (il campione c'era), campione INSUFFICIENTE per la differenza, un mio
|
||||
argomento pubblicato oggi REFUTATO. Book, pesi, config INVARIATI.**
|
||||
|
||||
Script `scripts/live/vrp_f_watch.py` (in `cron_daily.sh`), test `tests/test_vrp_f_watch.py` (11).
|
||||
|
||||
## Il campione c'era già
|
||||
|
||||
Prima cosa misurata, non assunta: nella catena (1.235.064 righe, 2026-05-01 → 2026-07-30) ci sono
|
||||
**8 scadenze utilizzabili per asset su 8**, per **entrambe** le strutture — quindi 16 osservazioni
|
||||
ciascuna. Non serviva aspettare per fare *la misura*; serve aspettare per rispondere alla
|
||||
*differenza*, che è un'altra domanda.
|
||||
|
||||
## ❌ La correzione: il mio sospetto aveva il meccanismo giusto e la conclusione sbagliata
|
||||
|
||||
Nel diario del gate sul tenore, poche ore fa, avevo scritto che la cella vincente
|
||||
*«sta plausibilmente massimizzando l'errore di modello, non l'edge»*, perché compra l'ala più
|
||||
lontana e il 30/07 aveva misurato quell'ala sottoprezzata ~2.3× dal modello piatto.
|
||||
|
||||
Misurato:
|
||||
|
||||
| struttura | f_short | f_long | quota ala/corta | **f_net** |
|
||||
|---|---|---|---|---|
|
||||
| canonico 7g δ−0.10 | 1.013 | 2.233 | **18.4%** | **0.718** |
|
||||
| candidato 10g δ−0.05 | 0.972 | **5.846** | **3.2%** | **0.852** |
|
||||
|
||||
**Il meccanismo è confermato e più forte del previsto** — l'ala a δ −0.05 costa **5.85×** il
|
||||
modello contro 2.23× — **ma la conclusione era rovesciata**: quell'ala pesa il **3.2%** del premio
|
||||
corto invece del 18.4%, quindi il suo errore muove molto meno il credito **netto**. Il candidato ha
|
||||
un f **migliore**, non peggiore.
|
||||
|
||||
L'aritmetica lo rende ovvio a posteriori: con `k = premio_lungo/premio_corto`,
|
||||
`f_net = (f_short − k·f_long)/(1 − k)`. Un `f_long` grande fa danno solo se moltiplicato per un `k`
|
||||
grande. Avevo guardato il fattore e non il peso.
|
||||
|
||||
⚠️ **Artefatto escluso prima di crederci.** Un `f_long` di 5.85 su un'opzione quasi senza valore
|
||||
poteva essere solo il tick minimo (0.0001). Misurato: l'ask dell'ala sta a **22 tick di mediana**
|
||||
(minimo 15, **0%** delle osservazioni a ≤2 tick). È un prezzo vero, non discretizzazione.
|
||||
|
||||
## La differenza NON è stabilita
|
||||
|
||||
Confronto **appaiato per (asset, scadenza)** — non due intervalli guardati a occhio:
|
||||
|
||||
| | mediana | IC95 bootstrap |
|
||||
|---|---|---|
|
||||
| f canonico | 0.718 | [0.662, 0.797] |
|
||||
| f candidato | 0.852 | [0.809, 0.892] |
|
||||
| **differenza appaiata** | **+0.109** | **[−0.047, +0.193]** |
|
||||
|
||||
11 coppie su 16 positive, **l'IC contiene lo zero**. Il punto stimato favorisce il candidato; la
|
||||
misura non lo stabilisce. ✅ Replica indipendente: il f del canonico esce **0.718** per un percorso
|
||||
diverso (finestra DTE e pairing diversi) da quello che stamattina dava 0.73 — le due misure si
|
||||
confermano.
|
||||
|
||||
Al proprio f misurato: canonico **0.43**, candidato **1.18** (a f=1.00 erano 1.32 e 1.55).
|
||||
|
||||
## Criterio pre-registrato, e un sorvegliante invece di un promemoria
|
||||
|
||||
Dichiarato **prima** di avere il campione pieno, congelato in un test:
|
||||
|
||||
> **≥ 40 coppie appaiate** (oggi 16) **E ampiezza IC95 della differenza ≤ 0.12** (oggi 0.241).
|
||||
|
||||
Con ~2 coppie/settimana la prima gamba cade verso **fine ottobre 2026**. `vrp_f_watch.py` gira in
|
||||
`cron_daily.sh`, rifà la misura a ogni giro e **manda una notifica una volta sola** quando il
|
||||
criterio è soddisfatto. È la disciplina imparata con DVOLSPREAD (35 giorni di limbo): *un lead
|
||||
senza sorvegliante e senza data è un lead perso*.
|
||||
|
||||
⚠️ **Verificata la calibrazione della soglia prima di fidarsene.** Una soglia sull'*ampiezza* di un
|
||||
IC vale solo se l'IC è calibrato. Misurato su differenza vera nulla: lo zero viene escluso nel
|
||||
**5.0% / 4.0% / 3.0%** dei casi a n=16/40/60 — esattamente il 5% atteso. (Il test iniziale su un
|
||||
seed fisso falliva proprio perché quel seed era uno dei 5% legittimi: sostituito con un test sulla
|
||||
**proprietà**, 100 estrazioni.)
|
||||
|
||||
## Cosa questa misura NON fa
|
||||
|
||||
**Non promuove niente.** Il candidato è bocciato sul **deflated-Sharpe (0.948 < 0.95)**, che non
|
||||
dipende da f, e la regola *niente short-vol da modello in deploy* resta. Un f favorevole toglie
|
||||
**un argomento di cautela su quattro** — restano il gate pre-registrato, il fatto che la regione
|
||||
mai esplorata (>10g) perde comunque, e l'ineseguibilità sotto ~$2.6k.
|
||||
|
||||
Ma la decisione ora poggia su **meno gambe di quante ne avevo dichiarate**, e questo va scritto:
|
||||
uno dei quattro argomenti era mio, era misurabile, e l'ho misurato sbagliato.
|
||||
|
||||
Il valore operativo vero sta sull'altra riga della tabella: **f = 0.718 sul canonico** è il numero
|
||||
che rende onesti i conti di uno sleeve che **sta nel book**, non di un candidato.
|
||||
|
||||
## Regole
|
||||
|
||||
- **Un fattore di errore si giudica moltiplicato per il suo peso.** `f_long` 5.85 sembra
|
||||
devastante e conta il 3%; `f_long` 2.23 sembra mite e conta il 18%. Guardare il fattore senza il
|
||||
peso porta alla conclusione opposta a quella vera.
|
||||
- **Prima di credere a un rapporto estremo su un prezzo piccolo, contare i tick.** Un ratio di 5×
|
||||
su qualcosa che vale un tick è aritmetica di griglia, non mercato.
|
||||
- **Una soglia su un intervallo di confidenza richiede di verificare la copertura di
|
||||
quell'intervallo** — altrimenti si pre-registra un criterio che non misura ciò che dice.
|
||||
- **«Non abbastanza campione» non è «nessuna differenza»**: si aspetta con una data, non si
|
||||
conclude.
|
||||
Reference in New Issue
Block a user