# 2026-07-26 — GTAA01 sugli UCITS: la via d'uscita dal blocco PRIIPs è aperta, e il broker non è la variabile **Domanda dell'operatore:** *"usiamo revolut o degiro"* — dopo che il conto reale ha rifiutato l'ordine sui 6 ETF USA di GTAA01 con `Trading limitato — Questo prodotto non dispone di un KID`. **Risposta breve:** cambiare broker non sblocca niente (il PRIIPs è una norma, non una politica di IB). Ciò che sblocca è cambiare **veicolo**. Misurato: il cambio di veicolo costa **~0**, e con la scelta giusta delle linee lo sleeve è eseguibile **senza frazionamento** già a $3.000. **Book, pesi, cron, config: INVARIATI.** GTAA01 non entra nel book live (resta la decisione venue del 26/07: 100% Deribit fino a $20k). Script: `scripts/research/fetch_ib_ucits.py`, `scripts/research/r0726_gtaa_ucits.py`. Modulo nuovo: `src/data/eq_crosscheck.py`. Test: `tests/test_eq_crosscheck.py` (14), `tests/test_gtaa_ucits.py` (10). --- ## 0. La premessa che era falsa, ed è la ragione per cui il problema è piccolo La nota che avevo scritto in `src/portfolio/gtaa.py` diceva: > storia più CORTA (diversi nati dopo il 2010) → si perde la validazione a 30 anni che è ciò che > rendeva credibile questo sleeve **È falsa, per un motivo strutturale: il PRIIPs vieta di COMPRARE, non di GUARDARE.** I prezzi di SPY/QQQ/IWM/TLT/GLD/HYG restano leggibili — l'operatore li aveva sotto gli occhi sul terminale *mentre* l'ordine veniva rifiutato. Quindi il **segnale** di GTAA01 può continuare a girare sui 30 anni di serie USA per sempre; cambia solo il **veicolo** su cui si incassa il rendimento. La storia corta degli UCITS non serve a validare la strategia. Serve a misurare una cosa sola: la **deviazione del veicolo**, che è un drift lento e si stima bene anche su pochi anni. > **Regola:** prima di dichiarare che un vincolo esterno distrugge un risultato, chiedersi > *esattamente cosa* vincola. Qui la differenza fra "non posso comprare" e "non posso vedere" > separa uno sleeve morto da uno sleeve con un problema di esecuzione. --- ## 1. Il dato, prima della strategia — e il feed equity non aveva un cross-check Estratti 12 veicoli UCITS da IB (`LSEETF`, **tutti in USD**: quotare in USD elimina un livello di costo, la conversione per ordine). Alla prima certificazione, **7 su 10 con gap lunghi** e CSPX con un **+27.8% giornaliero** su un tracker S&P 500. I gap sono tutti **al lancio** della linea USD (ultimo gap lungo: CSPX 2014-04, XRSU 2016-10, IGLN/IHYU 2011); negli ultimi 3 anni tutti i veicoli fanno 253 barre/anno. Non è un problema corrente. Il +27.8% invece è un difetto vero. La barra CSPX 2012-01-13: ``` open 112.740 high 112.740 low 88.010 close 88.010 ``` **`open`/`high` in USD, `low`/`close` in EUR** — fattore dai close adiacenti **1.2797**, cioè l'EURUSD di quel giorno (reale 1.266-1.282). Andata e ritorno: 112.63 → 88.01 → 112.47 mentre SPY faceva −0.39% e +0.23%. **La certificazione esistente non lo vedeva.** L'unica guardia sui movimenti era `maxret > 50% → SPIKE?`, e una contaminazione EUR/USD vale ~22-28%. È lo **stesso schema** dello split 2:1 non aggiustato del 25/07 (che valeva *esattamente* −50%): una soglia tarata su una classe di difetto non sorveglia le altre. ### Perché serviva il gemello e non una regola locale Il discriminante del 25/07 (**range intraday**) qui non funziona: una barra contaminata ha un range enorme, ma anche un crollo vero (SLV 2026-01-30 aveva 33% di range). Ciò che separa i due casi è che **un evento di mercato lo fa anche il gemello**: nel *rapporto* veicolo/gemello i movimenti veri si cancellano. Controprova su dati reali: la stessa scansione fatta sui **prezzi** segnalava IDTL 2020-03 (liquidazione dei treasury) e IGLN 2013-04 (crollo dell'oro) — andate-e-ritorni identiche nella forma. Sul **rapporto** spariscono, e resta la sola CSPX 2012-01-13. Questo è il buco che il feed equity aveva: nel crypto la certificazione incrocia sempre più venue (`certify_feed.py` vs Coinbase USD); il feed equity aveva **solo controlli locali**. ### La soglia non è tarabile sulla deviazione, ed è il punto interessante | statistica | rumore massimo misurato | difetto CSPX | margine | |---|---|---|---| | deviazione dal gemello | **9.90%** (2025-04-09) | 21.4% | 2.2× ❌ | | **|dev| / movimento del gemello** | **8.1** | **42.7** | **5.3×** ✅ | Il 9.90% è **legittimo**: Londra chiude alle 11:30 di New York, quindi in un giorno violento le due chiusure sono davvero lontane. Ma **un disallineamento d'orario non può superare il movimento del mercato**: se il gemello si è mosso dello 0.4% e il veicolo se ne va del 21%, non c'è orario che lo spieghi. La statistica adimensionale porta il margine da 2.2× a 5.3× — sopra il 3× che questo progetto richiede a un rilevatore. Tre condizioni congiunte (come il rilevatore di split, e per la stessa ragione): deviazione oltre `MIN_DEV`, non-spiegato oltre `MIN_UNEXPLAINED=18.0`, e **rientro** entro 5 barre (una divergenza di NAV vera persiste, una stampa sbagliata no). **Riparazione = scartare la barra, non ricostruirla.** Del prezzo vero non sappiamo niente; sappiamo che quello scritto è sbagliato. Scartarla rende corretto il rendimento 12/01→17/01 (−0.14%); "ripararla" con un fattore stimato inventerebbe un dato. ### ⚠️ Limite dichiarato, e come è stato chiuso GBPUSD ~1.27 → 21% di deviazione = **sempre rilevata**. EURUSD ~1.09 → 8.3% = **dentro il rumore** dei giorni violenti. Non è tappabile abbassando la soglia (sotto 12 si segnalano i giorni veri). Invece di inseguire la rilevabilità ho misurato il **danno** di una contaminazione non vista: iniettando 60 contaminazioni casuali, **dSharpe mediano −0.003, peggiore −0.056, |Δ|>0.05 nel 2% dei casi**. Il limite resta, ma è quantificato e irrilevante. > **Regola:** quando un rilevatore ha un buco che non si può chiudere senza generare falsi positivi, > si misura il **danno** del caso non rilevato, non la sua probabilità. Un buco quantificato e > innocuo è un risultato; un buco taciuto è un debito. --- ## 2. Quanto costa il veicolo: ~zero — ma lo stimatore ovvio dà la risposta sbagliata Prima stesura: media delle differenze giornaliere → **CSPX −0.47%/anno**. Sbagliato. Le due serie seguono lo **stesso indice** ma sono campionate a orari diversi. La differenza giornaliera è dominata da uno sfasamento che si **inverte il giorno dopo**: volatilità 17-22% annualizzata, **errore standard ~7%/anno** sulla stima del drag — cioè **15 volte più grande del drag stesso**. In più la media delle differenze *semplici* è contaminata dal drag di varianza. Il rapporto veicolo/gemello invece è **stazionario**: il suo drift *è* il drag. | gamba | UCITS | drag misurato | atteso da TER | + ritenuta USA | banda annua | |---|---|---|---|---|---| | SPY | CSPX | **−0.06%** | +0.02% | +0.20% | [−0.52,+0.63] | | QQQ | EQQQ | **−0.00%** | −0.10% | −0.03% | [−0.13,+1.29] | | IWM | XRSU | **−0.15%** | −0.11% | +0.07% | [−0.91,+0.37] | | TLT | IDTL | **+0.18%** | +0.08% | +0.68% | [−0.45,+1.60] | | GLD | IGLN | **+0.36%** | +0.28% | +0.28% | [−0.56,+0.99] | | HYG | IHYU | **+0.28%** | −0.01% | +0.89% | [−0.83,+1.88] | | **media EW** | | **+0.10%/anno** | +0.03% | **+0.35%** | | Controllo di plausibilità: **segno concorde in 4/6, scarto < 30bps in 6/6**. Il caso più netto è l'oro (GLD 0.40% vs IGLN 0.12% → atteso +0.28%, misurato +0.36%): è un controllo indipendente che la misura sta cogliendo il TER e non rumore. Le due gambe discordi restano entro 30bps, e su una banda annua larga [−0.9%,+1.9%] il segno di uno scarto così piccolo non è informativo. **Ciò che il controllo stabilisce è la scala: decine di bps, non punti.** ⚠️ La colonna "ritenuta" è **a favore dell'UCITS e non è nel drag misurato**: `ADJUSTED_LAST` sulle serie USA è al **lordo** della ritenuta USA del 15% che un residente italiano paga davvero sui dividendi. Comprando SPY quella ritenuta la paghi e nella serie non c'è; un UCITS irlandese la subisce una volta a livello di fondo e non una seconda all'incasso. *(Ipotesi fiscale dichiarata, fonte secondaria, da confermare col commercialista — non è un parere fiscale.)* ### Le tre lenti | lente | Sharpe | CAGR | maxDD | vol | |---|---|---|---|---| | L0 segnale USA + rend. USA (pubblicato) | 0.81 | 3.96% | −7.9% | 5.0% | | L1 segnale USA + rend. UCITS (veicolo) | 0.89 | 4.22% | −7.0% | 4.8% | | L2 segnale UCITS + rend. UCITS (+orologio) | **0.84** | **4.08%** | −7.5% | 4.9% | **Totale L2−L0: dSharpe +0.03, dCAGR +0.12%/anno.** Il cambio di veicolo *non costa*. ⚠️ `corr(L0,L2) = 0.65`, bassa per due serie sullo stesso indice — ed è l'**orologio**, non un difetto: le due chiusure condividono la notte e la mattina americana ma non il pomeriggio. Verificato che non sia uno sfasamento di date: la correlazione veicolo/gemello è **massima a lag 0 su 6/6 coppie** (0.46-0.78). Conseguenza: le statistiche *giornaliere* delle due lenti non sono confrontabili una a una, mentre il **drift** sì — che è esattamente perché la sezione 2 usa il rapporto cumulato. --- ## 3. Il vincolo vero non è il broker: è il prezzo di UNA azione Senza frazionamento un ordine è almeno una azione. **Il prezzo unitario è una scelta dell'emittente, non una proprietà dell'indice**: CSPX costa $802 e VUAA $144 sullo *stesso* S&P 500. | gamba | STORIA | prezzo | DEPLOY | prezzo | a $3.000 | a $10.000 | |---|---|---|---|---|---|---| | SPY | CSPX | $801.86 | **VUAA** | $143.80 | 29% | 9% | | QQQ | EQQQ | $692.67 | **XNAS** | $65.74 | 13% | 4% | | IWM | XRSU | $437.80 | **R2US** | $86.35 | 17% | 5% | | TLT | IDTL | $3.09 | IDTL | $3.09 | 1% | 0% | | GLD | IGLN | $79.06 | IGLN | $79.06 | 16% | 5% | | HYG | IHYU | $94.12 | IHYU | $94.12 | 19% | 6% | *(% = quanto pesa una azione sull'allocazione di quella gamba)* Danno misurato dell'esecuzione a numero **intero** di azioni, stessa finestra per entrambi: | insieme | capitale | Sh fraz. | Sh intero | Δ | vol fraz. | vol intero | **gambe vive** | esposta | |---|---|---|---|---|---|---|---|---| | STORIA | $3.000 | 0.84 | 0.80 | −0.04 | 5.1% | **2.2%** | **4/6** | **33%** | | STORIA | $10.000 | 1.08 | 1.02 | −0.06 | 5.1% | 4.2% | 6/6 | 63% | | **DEPLOY** | **$3.000** | 0.88 | 0.84 | −0.04 | 5.1% | **4.5%** | **6/6** | **65%** | | DEPLOY | $10.000 | 1.10 | 1.09 | −0.02 | 5.1% | 4.9% | 6/6 | 66% | **Con i veicoli giusti il frazionamento non serve.** Con quelli sbagliati, a $3.000 lo sleeve perde due gambe su sei ed è a mercato un terzo del tempo: non è GTAA01 con un vincolo, è un'altra cosa. ⚠️ **Si legge `gambe vive` e `vol`, non `Sharpe`.** Un vincolo che alza lo Sharpe non è un miglioramento: arrotondando in giù riduce l'esposizione e paga meno commissioni. È il **null de-levering** (4ª occorrenza dopo VRP-DD, TP01×DVOL, MAT01). Qui il controllo è stato eseguito e il verdetto è che con l'insieme DEPLOY il de-levering **non c'è**. ⚠️ Scartati di proposito, benché con più storia: **RTWO** (Russell 2000 *quality* = fattore), **CSUSS** (MSCI USA Small Cap *ESG*), **IDP6** (S&P 600, indice diverso). Equivalenza dell'indice prima della storia. --- ## 4. Il costo del venue, per FORMA — la sola cosa su cui i broker differiscono davvero **Ordini/anno** (dipendono da banda e cadenza, non dal listino): **77 a $3.000, 102 a $10.000, 149 a $50.000**. Con questo numero ogni listino è calcolabile a mano. | costo fisso/ordine | $3.000 Sh | CAGR | $10.000 Sh | CAGR | $50.000 Sh | CAGR | |---|---|---|---|---|---|---| | $0.00 | 0.92 | 4.45% | 0.92 | 4.48% | 0.92 | 4.48% | | $0.35 (IB US) | 0.73 | 3.52% | 0.84 | 4.11% | 0.90 | 4.37% | | $1.00 | 0.39 | 1.80% | 0.71 | 3.42% | 0.86 | 4.17% | | $2.00 | −0.13 | −0.79% | 0.50 | 2.37% | 0.79 | 3.86% | | $5.00 | −1.51 | −8.17% | −0.12 | −0.71% | 0.61 | 2.93% | | costo proporzionale | $3.000 | $10.000 | $50.000 | |---|---|---|---| | 5 bps/ordine | 0.89 | 0.89 | 0.88 | | 25 bps/ordine | 0.77 | 0.76 | 0.75 | | 50 bps/ordine | 0.62 | 0.60 | 0.59 | **Le soglie da verificare presso il broker:** | capitale allocato | CAGR = 0 | Sharpe = 0.45 | |---|---|---| | $3.000 | $1.68/ordine | **$0.90/ordine** | | $10.000 | $4.34/ordine | **$2.23/ordine** | | $50.000 | $14.65/ordine | **$7.62/ordine** | Un listino **proporzionale** è quasi indifferente al capitale (0.75-0.89 di Sharpe a ogni taglia); uno **fisso** è una tassa regressiva. È la regola del 25/07 riconfermata su un venue diverso. --- ## 5. Risposta operativa alla domanda **Revolut o Degiro non sbloccano gli ETF USA**: il PRIIPs vale per ogni intermediario che serve retail UE. IB è anzi fra i più permissivi. Aprire un terzo conto per lo stesso rifiuto aggiunge rischio di venue senza guadagno. Ciò che si compra su *qualunque* dei tre sono gli **UCITS**, e a quel punto la scelta si gioca su **una sola dimensione misurabile**: il costo per ordine, contro le soglie della tabella sopra, con 77-149 ordini l'anno. **Raccomandazione: restare su IB**, perché (a) il conto esiste già, (b) i dati per il segnale arrivano dallo stesso gateway, (c) è l'unico dei tre di cui la forma di costo è già modellata in `gtaa.py`. La verifica che resta da fare è **una sola**: la tariffa IB per ordine su LSEETF in USD, contro $2.23 (a $10.000) o $0.90 (a $3.000). **Nessuna azione oggi**: la decisione venue del 26/07 tiene tutto su Deribit fino a $20k, cioè ~2028 col piano di versamenti corrente. --- ## Lezioni 1. **Prima di dichiarare che un vincolo esterno distrugge un risultato, chiedersi cosa vincola esattamente.** "Non posso comprare" ≠ "non posso vedere": tutta la validazione a 30 anni era salva, e la nota che diceva il contrario era mia. 2. **Un feed senza secondo parere non è certificato**, e la regola valeva già nel crypto. Il feed equity ha vissuto 5 settimane con soli controlli locali, e il primo veicolo estero ha trovato il buco alla prima estrazione. 3. **Una soglia tarata su una classe di difetto non sorveglia le altre** — 2ª conferma dopo lo split 2:1 del 25/07. E quando la taratura non regge il margine richiesto, la risposta non è accettarla ma **cambiare statistica**: qui il passaggio da assoluta ad adimensionale (deviazione / movimento del gemello) porta il margine da 2.2× a 5.3×. 4. **La media delle differenze giornaliere non è la deviazione fra due veicoli sullo stesso indice.** Errore standard 15× più grande della quantità stimata, più il drag di varianza. La domanda "quanto mi costa il veicolo" è una domanda sul **drift**, quindi si misura sul rapporto cumulato. 5. **Il prezzo unitario di un ETF è un parametro di progetto, non un dato.** Sceglierlo cambia la soglia di capitale di uno sleeve più di qualunque negoziazione con un broker. 6. **Il grado d'accordo si conta, non si dichiara.** La prima stesura stampava "stesso segno su 6/6 gambe"; i dati dicevano 4/6. Scriverlo a mano nel `print` è il modo più facile di pubblicare una conclusione che i propri dati smentiscono — 3ª occorrenza in questa sessione. --- # Addendum 2026-07-27 — "io ho già Revolut e Degiro, IB sono solo iscritto" L'informazione ribalta la raccomandazione di ieri. L'argomento principale per IB era **"il conto esiste già"**, e non è vero: i conti reali sono Revolut e Degiro, IB è una registrazione. Cosa **non** cambia: il gateway IB serve per i **dati** del segnale (ADJUSTED_LAST sui 6 ETF USA), e per quello basta il paper — non serve eseguire lì. La scelta del broker di **esecuzione** è quindi libera, e si gioca su una sola dimensione misurabile: il **costo per ordine**. Script: `scripts/research/r0727_gtaa_broker.py`. Test: `tests/test_gtaa_broker.py` (9). **Book, pesi, cron, config: INVARIATI.** ## Il numero di ordini è un parametro, non un dato I 77-149 ordini/anno del 26/07 sono la conseguenza di `REBAL_EVERY=5` e `REBAL_BAND_USD=50`, scelti il 25/07 sul plateau **per il listino IB su azioni USA e a una taglia sola**. | cadenza | banda | ord/anno | Sh @ $0 | Sh @ $1 | Sh @ $2 | |---|---|---|---|---|---| | settimanale | $25 | 102 | 1.28 | 1.08 | 0.87 | | settimanale | **$50** (canonico) | 84 | 1.27 | 1.10 | 0.94 | | settimanale | $400 | **23** | **1.27** | 1.22 | 1.18 | | mensile | $50 | 33 | **1.12** | 1.06 | 1.00 | | bimestrale | $400 | 10 | 1.10 | 1.08 | 1.06 | **Si legge `Sh @ $0` per prima**: è il prezzo della banda *in assenza di commissioni*. Allargare la banda a cadenza settimanale **non lo tocca** (1.27 → 1.27), rallentare la cadenza sì (1.27 → 1.12). Il meccanismo è interpretabile: `_exposure` è la media di 4 indicatori binari, quindi si muove a scatti di 0.25 ≈ $417 su una gamba da $1.667. **La banda filtra la deriva del vol-target, non il segnale di trend.** ### Controllo su finestra lunga e veicoli diversi Sui **veicoli USA**, finestra comune ai 6 (10 anni, limitata dalla cache TLT dal 2016): | banda | ord/anno | Sh @ $0 | Sh @ $1 | |---|---|---|---| | $25 | 133 | 0.98 | 0.72 | | $400 | **35** | **0.96** | **0.89** | ✅ Lo Sharpe a costo zero perde **0.02** mentre gli ordini calano del **74%**. Non è un artefatto della finestra corta. ## ⚠️ Ma la banda in dollari assoluti è la parametrizzazione sbagliata | capitale | banda | % della gamba | ord/anno | **esposta** | Sharpe | | |---|---|---|---|---|---|---| | $3.000 | $400 | **80%** | **3** | **45%** | 0.71 | ❌ congelato | | $10.000 | $400 | 24% | 23 | 66% | 1.22 | OK | | $50.000 | $400 | 5% | 75 | 66% | 1.25 | OK | A $3.000 la banda da $400 è l'80% della gamba: **3 ordini l'anno**, a mercato il **45%** del tempo invece del 66%. Lo Sharpe resta 0.71 — accettabile — **su una strategia che ha smesso di seguire il proprio target**. È il null de-levering in una veste nuova: qui non travestito da "meno drawdown" ma da "meno costi". > **Regola: quando un parametro di esecuzione è espresso in valuta assoluta, il suo effetto dipende > dal capitale — e il controllo non è lo Sharpe ma la QUOTA DI TEMPO A MERCATO.** ## La configurazione: banda = 25% della gamba | capitale | banda | ord/anno | esposta | soglia $/ordine | budget/anno | |---|---|---|---|---|---| | $3.000 | $125 | **21** | 66% | **$5.65** | $120 | | $6.000 | $250 | **21** | 66% | $11.34 | $240 | | $10.000 | $417 | **21** | 66% | $18.90 | $400 | | $25.000 | $1.042 | **21** | 66% | $47.26 | $1.000 | | $50.000 | $2.083 | **21** | 66% | >$60 | — | **21 ordini l'anno a ogni capitale**, esposizione 66% ovunque. Contro il canonico: a $3.000 la soglia passa da **$2.08 a $5.65 per ordine** — cioè dalla differenza fra *"serve un broker economico"* e *"va bene qualunque broker europeo"*. ⚠️ **Non è un cambio di produzione.** È una configurazione **proposta**, tarata su questa finestra, non passata per `study_family_honest` né per un deflated-Sharpe. Regge il controllo su 10 anni e veicoli diversi, ma GTAA01 non è deployabile prima dei $20k (decisione venue 26/07): c'è tempo per validarla come si deve. ## Cosa cercare sul proprio conto — per ISIN, non per ticker | gamba | ticker | ISIN | prezzo | descrizione | |---|---|---|---|---| | SPY | VUAA | `IE00BFMXXD54` | $143.80 | Vanguard S&P 500 UCITS (Acc, USD) | | QQQ | XNAS | `IE00BMFKG444` | $65.74 | Xtrackers Nasdaq 100 UCITS 1C | | IWM | R2US | `IE00BJ38QD84` | $86.35 | SPDR Russell 2000 US Small Cap UCITS | | TLT | IDTL | `IE00BSKRJZ44` | $3.09 | iShares $ Treasury Bond 20+yr UCITS | | GLD | IGLN | `IE00B4ND3602` | $79.06 | iShares Physical Gold ETC | | HYG | IHYU | `IE00B4PY7Y77` | $94.12 | iShares $ High Yield Corp Bond UCITS | *(ISIN da contract details IB: i ticker cambiano da borsa a borsa, le ISIN no. Tutti domiciliati in Irlanda — è il motivo per cui sono acquistabili nell'UE.)* Tutti quotati a **Londra in USD**. ⚠️ Le stesse ISIN esistono su altre borse e in altre valute: una linea in **EUR** aggiunge la conversione per ordine, che a 25bps costa **~0.15 di Sharpe** — più del costo per ordine di qualunque broker a questa cadenza. **La valuta della linea conta più del broker.** ## Verdetto Con 21 ordini l'anno e una tolleranza di $5.65/ordine già a $3.000, **il vincolo di costo smette di essere binding su qualunque broker retail europeo**. La domanda "Revolut o Degiro" perde quindi la sua parte quantitativa e resta solo la parte di disponibilità: quale dei due quota le sei ISIN sopra sulla linea in USD. Restano due criteri non misurabili da qui, entrambi a favore di Degiro su Revolut per questo uso (universo ETF europeo tipicamente più ampio, e accesso diretto a LSE), **ma vanno verificati guardando i due conti** — non sono cose che posso misurare da questo lato. ## Lezione **Una raccomandazione poggiata su un fatto non verificato sul conto reale vale quanto quel fatto.** Ieri ho consigliato IB in parte perché "il conto esiste già": era un'assunzione, e per la seconda volta in due giorni un'assunzione sul conto reale ha cambiato la conclusione. La prima volta era la negoziabilità (PRIIPs), questa volta quale conto è davvero operativo. --- # Addendum 2026-07-27 (2) — "degiro ha api?" **Fatto:** DEGIRO **non** espone una API di trading ufficiale per il retail. Revolut nemmeno (la sua API è per pagamenti, non per il portafoglio titoli). IB sì, documentata e supportata — è quella che il progetto già usa per i dati. Esistono wrapper **non ufficiali** degli endpoint interni del web trader DEGIRO. Girano su credenziali + seed 2FA depositati sulla macchina, sono fuori dai termini di servizio, e si rompono **in silenzio** a ogni cambio di front-end. Questo progetto ha già pagato una volta il prezzo di un guasto silenzioso (`fresh_5m`, 26/07: fallimento muto → latenza d'uscita di SKH01 da ~1h a ~1 giorno senza che nulla lo segnalasse). **Un esecutore automatico che può rompersi senza dirlo è peggio dell'esecuzione manuale.** Quindi la domanda utile non è "si può automatizzare" ma **"quanto costa non farlo"**. ## Carico operativo (banda 25%, controllo settimanale, $10.000) | | | |---|---| | controlli/anno | 50 | | **settimane con ≥1 ordine** | **15** (29% dei controlli) | | ordini per settimana attiva | 1.4 (max 5) | Nel 71% dei controlli non c'è nulla da fare. ## Costo del ritardo di esecuzione Veicoli USA, 10 anni. ⚠️ Sulla finestra UCITS di 3.2 anni la curva **non risulta monotona** (5 giorni −0.26, 10 giorni −0.13): il campione corto non risolve differenze di questa taglia, quindi il numero si legge sulla finestra lunga. | ritardo | Sharpe | ΔSharpe | stabilità | |---|---|---|---| | 0 giorni | 0.90 | — | — | | **1 giorno** | 0.89 | **−0.02** | peggiora in 6/11 anni = **moneta** | | 2 giorni | 0.83 | −0.07 | 7/11 | | 3 giorni | 0.78 | −0.13 | 7/11 | | 5 giorni | 0.73 | −0.18 | 7/11 | | **10 giorni** | 0.63 | **−0.27** | 6/11 | **Il costo non è il ritardo tipico, è la coda.** Eseguire il giorno stesso o il giorno dopo costa nulla; dieci giorni valgono quasi un terzo dello sleeve. ## Conseguenza Il rischio dell'operatività manuale non è la lentezza, è la **dimenticanza** — e quella si compra con un **allarme**, non con una API. `gtaa_rebalance_plan(held, capital)` esiste già in produzione ed è nato esattamente per un esecutore; il progetto ha già l'allerta Telegram sul book live. Un cron settimanale che calcola il piano e notifica quando c'è da agire copre il caso 15 volte l'anno. ⚠️ **L'altro lato, che resta vero:** il resto del book è automatico (TP01 e SKH01 mandano ordini veri su cron). Aggiungere una gamba manuale introduce un modo di fallire che il sistema oggi non ha. È un argomento reale a favore di IB — che l'API ce l'ha — ma richiede finanziare un secondo venue, e la decisione venue del 26/07 tiene tutto su Deribit fino a $20k. **La scelta è quindi rimandata al punto in cui la si riaprirebbe comunque.** ## Lezione **Una capacità mancante si valuta sul costo di non averla, non sulla sua assenza.** Qui l'assenza di API sembra squalificante e vale −0.02 di Sharpe se si esegue entro un giorno; ciò che vale davvero (−0.27) è un rischio operativo che si copre con una notifica. --- # Addendum 2026-07-27 (3) — "r2us in revolut non c'è, ma ho zprr e spy4" ## ZPRR **è** R2US | ticker | borsa | valuta | ISIN | |---|---|---|---| | R2US | Londra | USD | `IE00BJ38QD84` | | **ZPRR** | **Xetra** | **EUR** | **`IE00BJ38QD84`** | Stessa ISIN = stessa classe di quote = **stesso fondo, stesso NAV**. Cambia solo dove e in che valuta si negozia. La gamba small cap è risolta: **compra ZPRR**, non si perde niente. > **Regola: si cerca per ISIN, non per ticker.** Lo stesso fondo ha ticker diversi su borse diverse, > e un ticker copiato da una lista può essere un altro prodotto. ## ⚠️ SPY4 non è quello che sembra `IE00B4YBJ215` = SPDR **S&P 400 US Mid Cap**. Non è small cap, e non è l'S&P 500 (quello è SPY5, `IE00B6YX5C33`). Non serve, dato che ZPRR c'è — ma misurato come ripiego, su 6.5 anni: | gamba small cap | Sharpe | CAGR | maxDD | |---|---|---|---| | R2US (small) | 0.86 | 4.20% | −8.2% | | SPY4 (mid) | 0.86 | 4.26% | −8.3% | Correlazione dei due sleeve **0.991**, SPY4 peggiore in **3/7 anni** = moneta. *(Sulla finestra corta di 3.2 anni sembrava −0.15 di Sharpe: era rumore.)* **Ripiego accettabile**, e il motivo è meccanico: small e mid cap USA hanno correlazione giornaliera ~0.95, e un TSMOM su due serie così vicine si accende quasi negli stessi giorni. ⚠️ Non è "validato" — 6.5 anni non bastano a distinguere due gambe così simili, ed è **esattamente per questo** che la scelta fra le due non conta. ## ⚠️ Correzione a un'indicazione data ieri: sulla valuta avevo ragionato al contrario Ieri ho scritto che *"una linea in EUR aggiunge la conversione per ordine"*. È vero **solo per un conto in USD**. Per un conto in **euro** — cioè un retail italiano su Revolut o Degiro — vale l'opposto: comprare la linea in USD costringe a convertire a ogni ordine, la linea in EUR no. L'esposizione economica è identica nei due casi: il fondo detiene attivi in USD e **nessuna delle due linee è coperta**. La valuta di quotazione non copre niente — decide solo se serve una conversione. > **Regola giusta: prendere la linea nella valuta del proprio saldo.** Quanto vale, misurato (turnover lordo **$13.655/anno** su $10.000, 21 ordini): | bps FX per ordine | ΔSharpe | costo/anno | |---|---|---| | 15 bps | −0.04 | $20 | | 25 bps | −0.07 | $34 | | 50 bps | −0.14 | $68 | A 25bps la conversione equivale a ~**$1.6 in più su ciascuno dei 21 ordini**: reale, ma piccolo rispetto alla soglia di $18.90/ordine a $10.000. Quindi **ZPRR in EUR su un conto in euro è la scelta migliore**, non un compromesso. ## Lezione **Un costo di conversione non è una proprietà dello strumento ma della coppia strumento-conto.** Avevo dedotto "linea in EUR = costo in più" da un caso (conto in USD) e l'avevo scritta come regola generale; per il conto che l'operatore usa davvero il segno è invertito. È la terza volta in due giorni che un'assunzione non verificata sul conto reale cambia la conclusione — dopo la negoziabilità PRIIPs e quale conto è operativo. --- # Addendum 2026-07-27 (4) — DEGIRO ha tutte e sei Screenshot della watchlist "Pythagoras" su flatexDEGIRO: **le sei gambe ci sono tutte**, con i ticker esatti raccomandati. (Era Revolut a non avere R2US.) | gamba | ticker | borsa | valuta | prezzo Degiro | |---|---|---|---|---| | SPY | VUAA | TDG | **EUR** | € 126,795 | | QQQ | XNAS | TDG | **EUR** | € 58,10 | | IWM | R2US | LSE | USD | $ 86,66 | | TLT | IDTL | LSE | USD | $ 3,09987 | | GLD | IGLN | LSE | USD | $ 79,585 | | HYG | IHYU | LSE | USD | $ 94,32 | ## Verifica indipendente che le linee in EUR siano gli stessi fondi Non dallo screenshot ma dai dati: il rapporto fra il prezzo IB (Londra USD) e il prezzo Degiro deve essere **un solo cambio** per entrambe le linee EUR. | ticker | Degiro | IB (LSE USD) | rapporto | |---|---|---|---| | VUAA | 126,795 | 143,80 | **1.1341** | | XNAS | 58,10 | 65,74 | **1.1315** | | R2US / IDTL / IGLN / IHYU | — | — | 0.993-0.998 (già USD) | EURUSD implicito **1.1341 vs 1.1315, scarto 0.23%**. Due fondi diversi non darebbero lo stesso cambio: sono le stesse quote, quotate in euro. ## ⚠️ Un errore mio, dello stesso tipo che avevo appena codificato come regola Per cercare le linee in euro delle altre quattro gambe ho interrogato IB **per ticker** sulle borse tedesche: risultato "nessuna linea EUR" su 4/4. **Falso.** Il ticker cambia da borsa a borsa — R2US su Xetra si chiama ZPRR. Cercando **per ISIN**: | gamba | linea USD | **linea EUR** | ISIN | |---|---|---|---| | SPY | VUAA (LSE) | VUAA (Xetra/BIt) | `IE00BFMXXD54` | | QQQ | XNAS (LSE) | XNAS (Xetra) | `IE00BMFKG444` | | IWM | R2US (LSE) | **ZPRR** (Xetra) | `IE00BJ38QD84` | | TLT | IDTL (LSE) | **IS04** (Xetra) | `IE00BSKRJZ44` | | GLD | IGLN (LSE) | **EGLN** (Londra) | `IE00B4ND3602` | | HYG | IHYU (LSE) | **IS0R** (Xetra) | `IE00B4PY7Y77` | **Ogni gamba ha una linea in euro.** Avevo scritto la regola "si cerca per ISIN, non per ticker" un messaggio prima e poi ho costruito la sonda per ticker. *Un "assente" da una ricerca per ticker su una borsa dove quel ticker non esiste non significa "non esiste".* ## Quanto vale la conversione, e su quale gamba Turnover per gamba a $10.000 (banda 25%, 21 ordini/anno): | gamba | ticker | ordini/anno | turnover/anno | quota | |---|---|---|---|---| | **TLT** | **IDTL** | **9** | **$6.257** | **46%** | | SPY | VUAA | 3 | $2.289 | 17% | | GLD | IGLN | 3 | $1.695 | 12% | | QQQ | XNAS | 3 | $1.614 | 12% | | HYG | IHYU | 1 | $958 | 7% | | IWM | R2US | 2 | $843 | 6% | - turnover su gambe in **USD** (da convertire): **$9.752/anno = 71%** - costo conversione: **$24/anno a 25bps**, $49 a 50bps (0.24-0.49% del capitale, ~6-12% del CAGR) **IDTL da sola vale il 46% del turnover e 9 dei 21 ordini.** Se si vuole ridurre la conversione senza cambiare sei strumenti, si sposta **quella** sulla linea in euro (IS04, `IE00BSKRJZ44`): da sola copre il **64%** del turnover convertibile. ⚠️ Il risparmio non è netto: le linee di Xetra possono avere spread più larghi delle linee di Londra (che sono le primarie), e Degiro storicamente addebita una tariffa di connettività per borsa. Su $10.000 parliamo di decine di dollari l'anno in entrambe le direzioni — **non è una decisione importante**, e dirlo è più utile che costruire una precisione finta. ## Cosa NON serve Il messaggio in cima allo screenshot — *"Richiedi un'aliquota ridotta della ritenuta alla fonte sugli investimenti statunitensi"* (il W-8BEN) — **non riguarda queste sei posizioni**: sono fondi irlandesi, non titoli USA. La ritenuta del 15% la subisce il fondo al proprio interno e nessun modulo dell'investitore la cambia. Va compilato se un giorno si detengono azioni USA dirette. ## Stato Saldo Degiro €328,92: questa è **preparazione, non azione**. GTAA01 richiede ≥$3.000 per reggere i costi, e la decisione venue del 26/07 tiene tutto su Deribit fino a $20k.