research(gtaa): la via UCITS e' aperta e costa ~zero — il broker non e' la variabile

Domanda dell'operatore: "usiamo revolut o degiro". Risposta misurata: cambiare
broker non sblocca nulla (il PRIIPs e' una norma, non una politica di IB); cambiare
VEICOLO si', e costa ~zero.

CORREZIONE A UNA MIA AFFERMAZIONE. La nota in gtaa.py diceva che gli UCITS fanno
perdere la validazione a 30 anni. Falso: il PRIIPs vieta di COMPRARE, non di
GUARDARE — i prezzi dei 6 ETF USA restano leggibili, quindi il segnale gira sui 30
anni per sempre e cambia solo il veicolo su cui si incassa.

Misure (3 lenti, un grado di liberta' per volta, 6.3 anni comuni):
  L0 segnale USA + rend. USA   Sh 0.81 / CAGR 3.96%
  L2 segnale UCITS + rend. UCITS Sh 0.84 / CAGR 4.08%
  drag del veicolo +0.10%/anno EW, coerente coi TER; ritenuta USA ~35bps a FAVORE
  dell'UCITS e non inclusa nel drag.

Lo stimatore ovvio sbagliava: la media delle differenze giornaliere dava -0.47%/anno
su CSPX contro -0.06% vero (SE ~7%/anno = 15x la quantita' stimata, piu' drag di
varianza). La deviazione fra veicoli sullo stesso indice si misura sul RAPPORTO
CUMULATO.

Il vincolo non e' il broker ma il prezzo di UNA azione, che e' una scelta: CSPX $802
vs VUAA $144 sullo stesso S&P 500. A $3.000 con azioni intere l'insieme STORIA tiene
4/6 gambe (a mercato il 33%), l'insieme DEPLOY 6/6 (65%) -> il frazionamento non
serve. Letto su gambe-vive+vol, non su Sharpe: il vincolo intero ALZA lo Sharpe
perche' de-leveraggia (null de-levering, 4a occorrenza).

Resta da verificare una cosa sola: 77-149 ordini/anno contro soglie $0.90 ($3k) /
$2.23 ($10k) / $7.62 ($50k) per ordine. Raccomandazione: restare su IB.

Feed equity: aggiunto il CROSS-CHECK che mancava (src/data/eq_crosscheck.py). Il
primo veicolo estero ha trovato subito CSPX 2012-01-13 con open/high in USD e
low/close in EUR (fattore 1.2797 = EURUSD del giorno), invisibile alla guardia
maxret>50% — stesso schema dello split 2:1 del 25/07. Soglia non tarabile sulla
deviazione (rumore 9.90%, margine 2.2x): cambiata statistica in |dev|/movimento del
gemello -> margine 5.3x. Limite EURUSD 1.09 dichiarato e chiuso sul DANNO (dSharpe
mediano -0.003), congelato in un test.

Book, pesi, cron, config INVARIATI. 435 test verdi (+24).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XBbYmiXqbUNuGpK9sfbsGp
This commit is contained in:
Adriano Dal Pastro
2026-07-26 23:01:54 +00:00
parent 6664575e1c
commit be4690375f
8 changed files with 1481 additions and 16 deletions
+71 -7
View File
@@ -1039,18 +1039,82 @@ Prima ondata di ricerca onesta su BTC/ETH certificati (5 track, harness condivis
**COSA NON CADE:** tutte le traiettorie, i muri e le tabelle di rendita pubblicate usano
`book_series(with_gtaa=0)` = **solo TP01+SKH01 su Deribit** → nessun numero del piano va rifatto.
E il book live non lo include.
**VIA D'USCITA, non ancora percorsa:** equivalenti **UCITS** (CSPX/SXR8, EQQQ/SXRV, IUSN/CSUSS,
DTLA/IDTL, SGLN/IGLN, IHYU). ⚠️ **Non e' una sostituzione di ticker:** (a) storia piu' **corta**
(diversi nati dopo il 2010) → si perde la validazione a 30 anni, che e' cio' che rendeva credibile
lo sleeve; (b) ritenuta sui dividendi, TER e replica diversi → decine di bps/anno su un CAGR del
**3.65%**, non trascurabili in proporzione; (c) quotazione LSE/Xetra → orari e valuta diversi da
uno sleeve che decide sul close USA. Percorso onesto: **validare sull'INDICE** (storia lunga) e
**negoziare il VEICOLO UCITS**, dichiarando tracking error e ritenuta come costi espliciti.
**REGOLA: la negoziabilita' sul conto REALE va verificata quando lo sleeve entra in RICERCA, non
quando entra nel book.** Qui 5 settimane di misure poggiavano su un'assunzione mai controllata, e
il controllo e' costato **un ordine di prova**. E' l'analogo azionario di cio' che il progetto fa
gia' rigorosamente sul crypto (min-order, haircut small-cap, eseguibilita' a $600): la stessa
disciplina non era stata applicata all'equity.
- ✅ **LA VIA D'USCITA UCITS E' APERTA E COSTA ~ZERO — misurata 2026-07-26 (domanda dell'operatore:
"usiamo revolut o degiro"). E la premessa su cui era stata scartata era MIA e FALSA.**
Script `fetch_ib_ucits.py` + `r0726_gtaa_ucits.py`; modulo nuovo `src/data/eq_crosscheck.py`;
test `tests/test_eq_crosscheck.py` (14) + `tests/test_gtaa_ucits.py` (10); diario
`2026-07-26-gtaa-ucits.md`. **Book/pesi/cron/config INVARIATI.**
(0) ⚠️ **CORREZIONE:** la nota diceva "storia UCITS piu' corta → si perde la validazione a 30
anni". FALSO per un motivo strutturale: **il PRIIPs vieta di COMPRARE, non di GUARDARE**. I
prezzi dei 6 ETF USA restano leggibili (l'operatore li aveva sul terminale *mentre* l'ordine
veniva rifiutato) → il **segnale** gira sui 30 anni per sempre, cambia solo il **veicolo** su cui
si incassa. La storia corta serve solo a misurare la deviazione del veicolo, un drift lento.
**Regola: prima di dichiarare che un vincolo esterno distrugge un risultato, chiedersi cosa
vincola esattamente** — "non posso comprare" ≠ "non posso vedere".
(1) **Il cambio di veicolo NON costa.** Tre lenti a un grado di liberta' per volta su 6.3 anni
comuni: L0 (segnale USA + rend. USA, pubblicato) **Sh 0.81 / CAGR 3.96%**; L2 (segnale UCITS +
rend. UCITS, deploy) **Sh 0.84 / CAGR 4.08%**. Drag del veicolo **+0.10%/anno** EW, coerente coi
TER (controllo piu' netto: GLD 0.40% vs IGLN 0.12% → atteso +0.28%, misurato +0.36%); e la
**ritenuta USA 15% sui dividendi (~35bps) e' A FAVORE dell'UCITS** e non e' nel drag misurato
(`ADJUSTED_LAST` USA e' al lordo). *(Ipotesi fiscale dichiarata, fonte secondaria.)*
⚠️ **Lo stimatore ovvio da' la risposta sbagliata:** la media delle differenze giornaliere dava
**0.47%/anno** su CSPX contro **0.06%** vero. Le due serie seguono lo stesso indice ma sono
campionate a orari diversi (Londra chiude 4h30 prima) → la differenza giornaliera e' dominata da
uno sfasamento che si inverte il giorno dopo: **SE ~7%/anno, 15× la quantita' stimata**, piu' il
drag di varianza. **REGOLA: la deviazione fra due veicoli sullo stesso indice si misura sul
RAPPORTO CUMULATO** (e' una domanda sul drift), mai sulla media delle differenze.
(2) ✅ **IL VINCOLO NON E' IL BROKER, E' IL PREZZO DI UNA AZIONE — e quello e' una SCELTA.**
CSPX costa $802 e VUAA $144 sullo **stesso** S&P 500. Due insiemi: **STORIA** (CSPX/EQQQ/XRSU/
IDTL/IGLN/IHYU, finestra lunga, per misurare) e **DEPLOY** (VUAA/XNAS/R2US/IDTL/IGLN/IHYU, prezzo
unitario basso, per eseguire). A **$3.000** con esecuzione a azioni INTERE: STORIA tiene **4/6
gambe** ed e' a mercato il **33%** del tempo; DEPLOY tiene **6/6** al **65%**, ΔSharpe 0.04.
**Il frazionamento del broker NON serve.** Scartati benche' con piu' storia: RTWO (Russell 2000
*quality*), CSUSS (*ESG*), IDP6 (S&P 600) — equivalenza dell'INDICE prima della storia.
⚠️ Letto sulla colonna **gambe vive + vol**, non su Sharpe: il vincolo intero *alza* lo Sharpe a
capitale piccolo perche' arrotonda in giu' e paga meno commissioni = **null de-levering, 4ª
occorrenza** (VRP-DD, TP01×DVOL, MAT01).
(3) **Cosa resta da verificare: UNA cosa sola.** Lo sleeve fa **77 ordini/anno a $3k, 102 a $10k,
149 a $50k**; soglia oltre cui non vale la pena (Sharpe<0.45) = **$0.90/ordine a $3k, $2.23 a
$10k, $7.62 a $50k**. Listino **proporzionale** ≈ indifferente al capitale (Sh 0.75-0.89 a ogni
taglia), listino **fisso** = tassa regressiva (regola 25/07 riconfermata su altro venue).
**Raccomandazione: restare su IB** — conto gia' aperto, stesso gateway dei dati del segnale,
forma di costo gia' modellata. ⚠️ **Revolut/Degiro NON sbloccano gli ETF USA**: il PRIIPs vale
per ogni intermediario UE, IB e' anzi fra i piu' permissivi; un terzo conto aggiungerebbe rischio
di venue senza guadagno. Nessuna azione oggi (decisione venue: 100% Deribit fino a $20k).
- ⚠️ **IL FEED EQUITY NON AVEVA UN CROSS-CHECK — buco trovato e chiuso (2026-07-26).**
`src/data/eq_crosscheck.py`. Nel crypto la certificazione incrocia sempre piu' venue
(`certify_feed.py` vs Coinbase USD); il feed equity aveva **solo controlli locali** (integrita',
gap, spike, split). Il primo veicolo estero ha trovato il buco alla prima estrazione: **CSPX
2012-01-13** con `open/high 112.740` in **USD** e `low/close 88.010` in **EUR** (fattore dai close
adiacenti **1.2797** = EURUSD di quel giorno) → 21.9% e poi +27.8% mentre SPY faceva 0.39%.
**La certificazione esistente non lo vedeva:** unica guardia `maxret > 50% → SPIKE?`, e una
contaminazione EUR/USD vale ~22-28% — **stesso schema dello split 2:1 del 25/07** (che valeva
*esattamente* 50%). **2ª conferma: una soglia tarata su una classe di difetto non sorveglia le
altre.**
**Perche' il GEMELLO e non una regola locale:** il discriminante del 25/07 (range intraday) qui
non funziona — anche un crollo vero ha range enorme (SLV 33%). Cio' che separa i casi e' che **un
evento di mercato lo fa anche il gemello**: nel *rapporto* i movimenti veri si cancellano.
Controprova su dati reali: la scansione sui **prezzi** segnalava IDTL 2020-03 (liquidazione
treasury) e IGLN 2013-04 (crollo oro); sul **rapporto** spariscono.
⚠️ **La soglia non era tarabile sulla deviazione** — rumore legittimo fino al **9.90%**
(2025-04-09: Londra chiude alle 11:30 di New York) contro un difetto del 21.4% → margine 2.2×,
sotto il 3× richiesto. **La risposta non e' accettare il margine ma CAMBIARE STATISTICA:**
`|dev| / movimento del gemello` (un disallineamento d'orario **non puo' superare il movimento del
mercato**) → rumore **8.1**, difetto **42.7**, **margine 5.3×**. Soglia 18.0, equidistante in
scala log. Tre condizioni congiunte: deviazione + non-spiegato + **rientro** entro 5 barre.
**Riparazione = SCARTARE la barra, non ricostruirla** (del prezzo vero non si sa nulla).
⚠️ **Limite dichiarato e chiuso sul DANNO, non sulla rilevabilita':** GBPUSD 1.27 → 21% sempre
rilevato; EURUSD 1.09 → 8.3% **dentro il rumore** e non tappabile senza falsi positivi. Misurato
invece il danno di una contaminazione non vista: **dSharpe mediano 0.003, peggiore 0.056,
|Δ|>0.05 nel 2%**. **REGOLA: quando un buco non si puo' chiudere senza generare falsi positivi,
si misura il DANNO del caso non rilevato** — un buco quantificato e innocuo e' un risultato, uno
taciuto e' un debito. Il limite e' congelato in un test (`test_limite_dichiarato_*`): se qualcuno
abbassa la soglia, il test dice cosa e' cambiato.
- 💰 **I VERSAMENTI — le 4 ipotesi che il piano non aveva mai fatto (2026-07-26, ultimo filone).**
Tutte le traiettorie del 25-26/07 assumevano versamento **piatto, ininterrotto, per sempre** =
l'ipotesi meno realistica del piano. Script `r0726_deposits.py`, test `tests/test_deposits.py`