# 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): 1. **hedge-shaped** — l'uplift viene dai regimi TP01-down (uplift +0.79 TP01-down vs +0.20 TP01-up); 2. **fallisce il null a corr-zero** — uplift pre-2025 al 20-24° pctl del null di un asset random scorrelato (aggiunge MENO del rumore); 3. **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.