Files
PythagorasGoal/docs/diary/2026-07-30-vrp-f-strutture.md
T
Adriano Dal Pastro fb01c5714c 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>
2026-07-30 22:17:11 +00:00

100 lines
5.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.