research(gtaa): DEGIRO ha tutte e sei le gambe — verificato sul conto reale
Screenshot della watchlist "Pythagoras" su flatexDEGIRO: le 6 gambe ci sono tutte, coi ticker esatti raccomandati. Era Revolut a non avere R2US. VERIFICA INDIPENDENTE che le due linee EUR (VUAA, XNAS su Tradegate) siano gli stessi fondi, dai dati e non dallo screenshot: il rapporto prezzo-IB/prezzo-Degiro dev'essere un solo cambio -> 1.1341 e 1.1315, scarto 0.23%. Le altre 4 stanno a 0.993-0.998 (gia' USD). Due fondi diversi non darebbero lo stesso cambio. ERRORE MIO, dello stesso tipo che avevo codificato come regola un messaggio prima: per cercare le linee in euro delle altre 4 gambe ho interrogato IB per TICKER sulle borse tedesche, ottenendo "nessuna linea EUR" su 4/4. Falso. Cercando per ISIN ognuna ce l'ha: ZPRR (=R2US), IS04 (=IDTL), EGLN (=IGLN, Londra EUR), IS0R (=IHYU). Un "assente" da una ricerca per ticker su una borsa dove quel ticker non esiste non significa "non esiste". TURNOVER PER GAMBA a $10k (21 ordini/anno): IDTL 9 ordini / $6.257 = 46% del totale, poi VUAA 17%, IGLN 12%, XNAS 12%, IHYU 7%, R2US 6%. Il 71% del turnover e' su gambe in USD ($9.752/anno) -> conversione $24/anno a 25bps. Spostare la sola IDTL sulla linea in euro (IS04) copre il 64% del turnover convertibile. Ma non e' un risparmio netto (spread Xetra piu' larghi delle linee primarie di Londra, tariffa di connettivita' per borsa) e su $10k si parla di decine di dollari l'anno in entrambe le direzioni: non e' una decisione importante, ed e' piu' utile dirlo che costruire una precisione finta. Il prompt W-8BEN di Degiro non riguarda queste sei: sono fondi irlandesi, non titoli USA. Stato: preparazione, non azione (saldo Degiro EUR 328,92; GTAA01 richiede >=$3k e la decisione venue tiene tutto su Deribit fino a $20k). Book, pesi, cron, config INVARIATI. 448 test verdi (+1). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01XBbYmiXqbUNuGpK9sfbsGp
This commit is contained in:
@@ -126,11 +126,22 @@ def test_le_soglie_di_lettura_sono_dichiarate():
|
||||
def test_le_equivalenze_dichiarate_condividono_la_isin_del_veicolo_scelto():
|
||||
"""ZPRR (Xetra EUR) e R2US (Londra USD) sono la stessa classe di quote: se le ISIN non
|
||||
coincidono l'equivalenza e' falsa e l'operatore comprerebbe un altro fondo."""
|
||||
assert {a for a, _, _, _ in B.EQUIVALENZE} == set(B.ISIN), \
|
||||
"ogni gamba deve avere una linea in euro dichiarata: su un conto in EUR e' cio' che evita la conversione"
|
||||
for a, b, isin, _ in B.EQUIVALENZE:
|
||||
assert a in B.ISIN, f"{a} non e' un veicolo del set DEPLOY"
|
||||
assert B.ISIN[a][0] == isin, f"{a}: la ISIN dell'equivalenza non e' quella del veicolo"
|
||||
assert re.fullmatch(r"IE00[A-Z0-9]{8}", isin)
|
||||
assert b not in B.ISIN, f"{b} e' un ALIAS di {a}, non un veicolo distinto"
|
||||
if b != a:
|
||||
assert b not in B.ISIN, f"{b} e' un ALIAS di {a}, non un veicolo distinto"
|
||||
|
||||
|
||||
def test_ogni_isin_compare_una_volta_sola_fra_le_equivalenze():
|
||||
"""Due gambe con la stessa ISIN sarebbero lo stesso fondo comprato due volte: il vol-target
|
||||
girerebbe su cinque esposizioni invece di sei senza che nulla lo segnali."""
|
||||
isins = [i for _, _, i, _ in B.EQUIVALENZE]
|
||||
assert len(set(isins)) == len(isins)
|
||||
assert len(set(B.ISIN[t][0] for t in B.ISIN)) == 6
|
||||
|
||||
|
||||
def test_il_ripiego_smallcap_e_dichiarato_come_indice_DIVERSO():
|
||||
|
||||
Reference in New Issue
Block a user