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:
Adriano Dal Pastro
2026-07-30 22:17:11 +00:00
parent 36dc55748e
commit fb01c5714c
6 changed files with 479 additions and 6 deletions
+99
View File
@@ -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.