Files
PythagorasGoal/docs/diary/2026-06-21-prevday-fill-haircut.md
Adriano Dal Pastro 8514c096ea research(intraday): fill-haircut PREVDAY a basso capitale -> blocker d'esecuzione BENIGNO
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>
2026-06-21 19:41:20 +00:00

3.9 KiB
Raw Permalink Blame History

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.