Stima SUBITO (invece di aspettare il forward-monitor) quanto il fill reale a $600 erode il lead
PREVDAY, replicando i due libri di paper_prevday.py su tutto il path 1h (2019-03 -> 2026-06):
- MODELED (continuo) vs REAL-$C (skip ribilanciamenti < $5 min-order), sweep C {600,2k,20k}.
- HAIRCUT $600 = +0.01 Sharpe (FULL e HOLD): saltare il 98.4% dei micro-ribilanciamenti del
vol-target non costa nulla (trade infinitesimi: fee risparmiata e tracking-error entrambi
trascurabili; fee-drag 2.49% -> 2.39%). L'uplift hold-out del blend 80/20 regge +0.56 -> +0.55.
Conseguenza: dei 4 blocker no-deploy, il #4 (fill a basso capitale) e' SMONTATO. Restano i 3
strutturali (hedge-shaped, fallisce il null a corr-zero, tail-luck). PREVDAY resta forward-monitor.
Lezione: eseguire eval_weights_smallcap PRIMA di scartare un lead per 'fill irreale'.
Diario: 2026-06-21-prevday-fill-haircut.md.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
3.9 KiB
PREVDAY fill-haircut a basso capitale — il blocker d'esecuzione è BENIGNO (1/4 smontato)
Data: 2026-06-21 (follow-up di 2026-06-21-intraday-microstructure.md)
Script: scripts/research/intraday/fill_haircut.py
Esito: l'haircut del fill reale a $600 è +0.01 Sharpe (trascurabile). Lo scettico
d'esecuzione (blocker #4) è benigno. Gli altri 3 blocker (hedge / null-corr-zero / tail-luck)
restano → PREVDAY resta in forward-monitor, non deploy.
Domanda
Lo scettico d'esecuzione dell'onda intraday aveva segnalato: il vol-target di PREVDAY fa ~8500
ribilanciamenti/anno per gamba, 97-98% < $1 di nozionale a $600; a quel capitale (min_order $5) NON
puoi piazzarli, quindi il libro MODELED (ribilanciamento continuo, frictionless) è una finzione e lo
Sharpe modellato è gonfiato. Il forward-monitor traccia MODELED-$2000 vs REAL-$600 per misurarlo nei
mesi a venire — qui lo stimiamo SUBITO su tutto lo storico, replicando la STESSA logica dei due libri
di paper_prevday.py ma sull'intero path 1h (2019-03 → 2026-06, 63.732 barre).
Due libri identici tranne il fill:
- MODELED: ribilancia ad ogni barra (fee proporzionale su ogni |Δ|).
- REAL-$C: salta i ribilanciamenti con nozionale
|Δpos|·leg_cap < $5(posizione stale → tracking error, ma niente fee sui trade infinitesimi). Sweep C ∈ {600, 2000, 20000}.
Risultati
| libro | FULL Sh | HOLD Sh | CAGR | DD | rebal/yr | skip% | fee-drag/yr |
|---|---|---|---|---|---|---|---|
| MODELED ($∞) | +1.23 | +1.27 | +24.3% | −27% | 17.484 | 0.0% | 2.49% |
| REAL-$20k | +1.23 | +1.27 | +24.4% | −27% | 3.747 | 78.6% | 2.47% |
| REAL-$2000 | +1.23 | +1.27 | +24.4% | −27% | 677 | 96.1% | 2.42% |
| REAL-$600 | +1.22 | +1.26 | +24.2% | −27% | 277 | 98.4% | 2.39% |
HAIRCUT $600 (MODELED − REAL): FULL Sharpe +0.01, HOLD-OUT +0.01.
Domanda-soldi (l'uplift del blend regge col fill reale?):
| PV | w | FULL (uplift) | HOLD (uplift) |
|---|---|---|---|
| MODELED | 20% | 1.58 (+0.28) | 0.86 (+0.56) |
| MODELED | 30% | 1.65 (+0.36) | 1.08 (+0.78) |
| REAL-$600 | 20% | 1.58 (+0.28) | 0.86 (+0.55) |
| REAL-$600 | 30% | 1.65 (+0.35) | 1.08 (+0.77) |
(TP01 solo: FULL +1.30, HOLD +0.31.) L'uplift hold-out sopravvive quasi intatto.
Lettura
Saltare il 98.4% dei micro-ribilanciamenti a $600 non costa quasi nulla perché quei trade sono individualmente infinitesimi: sia la fee risparmiata sia il tracking-error introdotto sono trascurabili. Il PnL è dominato dai ~50 flip di direzione/anno + la deriva lenta del vol-target, che il libro $600 cattura comunque sui movimenti grandi (la fee-drag passa solo da 2.49% a 2.39%). La "finzione della fee sub-dollaro" è quindi benigna: non gonfia lo Sharpe modellato (MODELED e REAL-$600 coincidono a ±0.01). NB: lo Sharpe non si degrada scendendo di capitale → l'edge modellato di PREVDAY è eseguibile alla taglia reale; il blocker era altrove.
Conseguenza sul verdetto
Dei 4 blocker che tenevano PREVDAY fuori dal deploy, il #4 (fill a basso capitale) è SMONTATO. Restano in piedi i 3 strutturali (dall'onda intraday, non rivalutati qui):
- hedge-shaped — l'uplift viene dai regimi TP01-down (uplift +0.79 TP01-down vs +0.20 TP01-up);
- fallisce il null a corr-zero — uplift pre-2025 al 20-24° pctl del null di un asset random scorrelato (aggiunge MENO del rumore);
- tail-luck — top-5 giorni = 76-83% del PnL delle gambe revert, <10 eventi/anno.
PREVDAY resta il lead più solido sull'esecuzione di tutta la ricerca post-reset (il dubbio più
"fisico" è caduto), ma forward-monitor, non deploy, finché il track record forward non scioglie
hedge/coda/null. Lezione harness: eval_weights_smallcap (il gate min-order) va sempre eseguito
PRIMA di scartare un lead per "fill irreale" — qui avrebbe evitato di sopravvalutare il blocker #4.