8514c096ea
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>
68 lines
3.9 KiB
Markdown
68 lines
3.9 KiB
Markdown
# 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.
|