Files
PythagorasGoal/docs/diary/2026-07-26-gtaa-ucits.md
T
Adriano Dal Pastro 378f448450 research(gtaa): ZPRR e' R2US (stessa ISIN) + correzione sul verso del costo FX
L'operatore ha verificato su Revolut: R2US assente, ZPRR e SPY4 presenti.

(1) ZPRR (Xetra EUR) == R2US (Londra USD): stessa ISIN IE00BJ38QD84, stessa classe di
quote, stesso NAV. La gamba small cap e' risolta. Regola: si cerca per ISIN, non per
ticker — lo stesso fondo ha ticker diversi su borse diverse.

(2) SPY4 IE00B4YBJ215 NON e' small cap ne' S&P 500: e' SPDR S&P 400 MID cap (l'S&P 500
e' SPY5). Misurato come ripiego su 6.5 anni: Sharpe 0.86 vs 0.86, corr fra i due sleeve
0.991, peggiore in 3/7 anni = moneta. Sulla finestra corta di 3.2 anni sembrava -0.15:
era rumore. Ripiego accettabile per ragione meccanica (small e mid USA correlano ~0.95
giornaliero), NON validato — e' proprio perche' non si distinguono che la scelta non
conta.

(3) CORREZIONE a un'indicazione data ieri. Avevo scritto "una linea in EUR aggiunge la
conversione per ordine". Vero solo per un conto in USD: per un conto in EURO vale
l'opposto. L'esposizione economica e' identica (il fondo detiene attivi USD, nessuna
delle due linee e' coperta) — la valuta di quotazione non copre nulla, decide solo se
serve una conversione. Regola giusta: prendere la linea nella valuta del proprio saldo.
Misurato: turnover lordo $13.655/anno su $10k -> 25bps = -0.07 Sharpe = $34/anno = ~$1.6
per ordine, contro una soglia di $18.90.

Regola generale: un costo di conversione non e' una proprieta' dello strumento ma della
coppia strumento-CONTO.

Book, pesi, cron, config INVARIATI. 447 test verdi (+3).

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XBbYmiXqbUNuGpK9sfbsGp
2026-07-27 11:25:20 +00:00

27 KiB
Raw Blame History

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

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 L2L0: 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.