docs: memoria — gate GTAA corretto, storia troncata di TLT, tabelle del piano al netto
Tre aggiornamenti alla memoria operativa: 1. Il bullet "BANDA GTAA01 AL 25%" registrava «proposta 4/30 in-sample, 5/30 hold-out → il rango NON migliora» come evidenza. Non lo era: quel criterio lo passa il 47% della griglia per costruzione. Sostituito col criterio decidibile (la banda scelta al buio in-sample E' la proposta, quella scelta sull'hold-out no), che e' piu' forte del precedente. Registrata la storia troncata di TLT e la guardia cablata. 2. Il bullet "IL FISCO DURANTE L'ACCUMULO" dichiarava che tutte le tabelle a 15-20 anni erano al lordo. Ora ci sono le versioni nette (muro, traiettorie, versamenti, rendita) con il controllo di replica. 3. Le due tabelle lorde piu' citate (traiettoria da $600 e "quanto versare per un orizzonte dato") portano un rimando esplicito alla versione netta: restano perche' sono la replica di controllo del fattore d'ancora, non perche' siano il piano. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -610,6 +610,10 @@ Prima ondata di ricerca onesta su BTC/ETH certificati (5 track, harness condivis
|
|||||||
| €500 | 19.6a (48%) | 15.7a (94%) | **12.4a (100%)** |
|
| €500 | 19.6a (48%) | 15.7a (94%) | **12.4a (100%)** |
|
||||||
| €1000 | 14.8a (95%) | 12.0a (100%) | **9.0a (100%)** |
|
| €1000 | 14.8a (95%) | 12.0a (100%) | **9.0a (100%)** |
|
||||||
| €2000 | 10.0a (100%) | 8.5a (100%) | **6.0a (100%)** |
|
| €2000 | 10.0a (100%) | 8.5a (100%) | **6.0a (100%)** |
|
||||||
|
⛔ **QUESTA TABELLA E' AL LORDO del fisco d'accumulo — la versione NETTA e' nel bullet "IL FISCO
|
||||||
|
DURANTE L'ACCUMULO" (r0807_piano_netto, 07/08) e cambia la riga di testa: €250/mese passa da
|
||||||
|
P(20a) 92% a 52%.** Le colonne qui restano perche' sono la replica di controllo del fattore
|
||||||
|
d'ancora, non perche' siano il piano.
|
||||||
✅ La colonna ×0.60 **riproduce esattamente** i numeri del 25/07 (19.6a / 14.8a) = validazione
|
✅ La colonna ×0.60 **riproduce esattamente** i numeri del 25/07 (19.6a / 14.8a) = validazione
|
||||||
indipendente della replica. ⚠️ **Cio' che NON cambia col fattore: senza depositi il
|
indipendente della replica. ⚠️ **Cio' che NON cambia col fattore: senza depositi il
|
||||||
capitale-rendita non si raggiunge mai** (0% dei path a 20 anni a OGNI fattore) — l'accumulo
|
capitale-rendita non si raggiunge mai** (0% dei path a 20 anni a OGNI fattore) — l'accumulo
|
||||||
@@ -622,6 +626,9 @@ Prima ondata di ricerca onesta su BTC/ETH certificati (5 track, harness condivis
|
|||||||
| **10 anni** | €806/m | €995/m | **€1.178/m** | €1.299/m | **$155.923** |
|
| **10 anni** | €806/m | €995/m | **€1.178/m** | €1.299/m | **$155.923** |
|
||||||
| 15 anni | €313/m | €408/m | €509/m | €583/m | $101.643 |
|
| 15 anni | €313/m | €408/m | €509/m | €583/m | $101.643 |
|
||||||
| 20 anni | €129/m | €180/m | €237/m | €280/m | $63.406 |
|
| 20 anni | €129/m | €180/m | €237/m | €280/m | $63.406 |
|
||||||
|
⛔ **AL LORDO: i numeri da usare sono quelli NETTI** (€1.323 / €672 / €371 a P=90%, bersaglio
|
||||||
|
$258k) nel bullet "IL FISCO DURANTE L'ACCUMULO" — il fisco costa **+12% al mese a 10 anni, +32%
|
||||||
|
a 15, +57% a 20**.
|
||||||
⚠️ **Comprimere l'orizzonte da 20 a 10 anni costa 2.5× al mese E 2.5× in totale**: a 10 anni
|
⚠️ **Comprimere l'orizzonte da 20 a 10 anni costa 2.5× al mese E 2.5× in totale**: a 10 anni
|
||||||
versi $155k per arrivare a $272k (il rendimento fa il 43%), a 20 anni ne versi $63k (il
|
versi $155k per arrivare a $272k (il rendimento fa il 43%), a 20 anni ne versi $63k (il
|
||||||
rendimento fa il **77%**). **A orizzonti corti non fai lavorare la strategia, COMPRI il
|
rendimento fa il **77%**). **A orizzonti corti non fai lavorare la strategia, COMPRI il
|
||||||
@@ -1611,23 +1618,50 @@ Prima ondata di ricerca onesta su BTC/ETH certificati (5 track, harness condivis
|
|||||||
deploy**, con questo gate come giustificazione. **REGOLA: un parametro d'ESECUZIONE scelto
|
deploy**, con questo gate come giustificazione. **REGOLA: un parametro d'ESECUZIONE scelto
|
||||||
guardando il risultato e' selezione come ogni altra** e passa per gli stessi gate, anche quando
|
guardando il risultato e' selezione come ogni altra** e passa per gli stessi gate, anche quando
|
||||||
"non tocca l'allocazione".
|
"non tocca l'allocazione".
|
||||||
⚠️ **QUESTO GATE OGGI FALLISCE (2026-08-07) e la sua misura NON e' riproducibile.**
|
⚠️ **CORREZIONE 2026-08-07 — il criterio (A) qui sopra e' RITIRATO: non misurava cio' che
|
||||||
`test_la_proposta_non_e_selezionata_sull_hold_out`: la proposta e' **9ª/30 in-sample e 8ª/30
|
dichiarava, e il "4/30 in-sample, 5/30 hold-out" non e' un'evidenza.** Il test lo aveva
|
||||||
sull'hold-out** (migliora dove non doveva essere guardata) contro il **4/30 e 5/30** registrato
|
segnalato smettendo di passare (9ª/30 in-sample, 8ª/30 hold-out) **senza che il codice fosse
|
||||||
sopra. Caratterizzato: i due ranghi distano **0.00116 di Sharpe** su un'ampiezza di griglia di
|
cambiato** — `data/raw/` e' gitignored e il cron riscrive i parquet equity ogni notte con
|
||||||
0.3124 (**0.4%**) → *il criterio non ha mai avuto margine, era un rango*; il calcolo e'
|
`ADJUSTED_LAST` di IB, che e' retroattivo. Misurato in `r0807_gtaa_gate_resolution.py`:
|
||||||
**deterministico** (2 corse, `max|diff| = 0.0`) e il codice e' **invariato** dal 27/07 (nessun
|
**(a)** i due ranghi distavano **0.00116 di Sharpe** su uno spread di griglia di **0.3124**
|
||||||
commit su `r0727_gtaa_band_gate.py`, `gtaa.py`, `eqlib.py`, `eq_splits.py`) → **e' cambiato il
|
(0.4%); **(b)** e soprattutto **il criterio `rank_in <= rank_oos` lo passano 14/30 celle
|
||||||
DATO**: `data/raw/` e' gitignored e i parquet equity sono riscritti ogni giorno dal cron con
|
(47%) PER COSTRUZIONE** — la somma dei ranghi e' la stessa nelle due finestre → *e' una moneta,
|
||||||
`ADJUSTED_LAST` di IB, che e' retroattivo.
|
e il 27/07 la moneta era uscita bene*. Contorno: spostamento tipico fra le due finestre **8
|
||||||
📌 **REGOLA NUOVA: un gate validato su dati SOVRASCRITTI ogni giorno non e' ri-verificabile.**
|
ranghi** (max 25), **Spearman IS/OOS +0.05**.
|
||||||
Il lato cripto non ha il problema (`rebuild_history.py` ricostruisce da sorgente deterministica),
|
✅ **CRITERIO SOSTITUITO, e la proposta ne esce piu' forte di prima.** La proposta e' una
|
||||||
il lato equity si'. **Test NON toccato** (allentare una soglia perche' ha smesso di passare e'
|
**BANDA** (la cadenza settimanale e' gia' `REBAL_EVERY=5` in produzione), quindi la domanda
|
||||||
proprio cio' che questo progetto vieta; un `xfail` silenzierebbe il segnale). Niente di operativo
|
decidibile e' *quale banda si sceglie a cadenza di produzione guardando solo il pre-2015*:
|
||||||
dipende da questo — GTAA01 non e' deployabile (PRIIPs) e non e' nel book live — ma
|
esce **25% = la proposta**, con margine **+0.0151** di Sharpe sulla seconda (**13×** il margine
|
||||||
**l'affermazione "il rango NON migliora sull'hold-out" oggi e' falsa**: decisione dell'operatore
|
del vecchio criterio); chi avesse scelto **sull'hold-out** avrebbe preso **40%** (controllo
|
||||||
se correggerla, ripensare il gate, o congelare uno snapshot dei parquet equity.
|
positivo: se coincidessero il gate non avrebbe potenza). Su **tutta** la griglia la cella al
|
||||||
Diario `2026-08-07-crescita-fisco-etf-scelta.md` §7.
|
buio e' cadenza 1 / banda **25%** — stessa banda. **La proposta e' il CONTRARIO di una
|
||||||
|
selezione-sull'hold-out.** Regge identico sull'universo a **5 gambe** (blind 25%, hold-out 40%,
|
||||||
|
margine +0.0164). ⚠️ Il criterio dice da dove VIENE la scelta, **non** che sia la migliore
|
||||||
|
sull'hold-out (con Spearman ~0 nessuna cella lo sarebbe): provenienza ≠ previsione.
|
||||||
|
⚠️ **TROVATO PER STRADA, ed e' il difetto vero: TLT ha 13.5 ANNI DI STORIA IN MENO.** Parte dal
|
||||||
|
**2016-02-03** invece che dalla quotazione (2002-07-22) → **GTAA01 gira su CINQUE gambe prima
|
||||||
|
del 2016**, e quella assente e' la gamba obbligazionaria, cioe' quella che diversifica. Non e'
|
||||||
|
di oggi (cosi' fin dal primo giro nel `cron_daily.log`, 24/06 = **prima** della validazione del
|
||||||
|
27/07) e **non e' un fetch da rifare**: una richiesta retro esplicita a IB su questo conto
|
||||||
|
ritorna **0 barre**. Conseguenza metodologica: **l'in-sample e l'hold-out di GTAA01 non sono la
|
||||||
|
stessa strategia**, e ogni confronto fra le due finestre su questo sleeve va letto cosi'.
|
||||||
|
✅ **Guardia cablata** (`fetch_ib_equities.certify`, test `tests/test_eq_history_guard.py`, 11):
|
||||||
|
**`TRONCATO`** = storia persa rispetto al disco → **il file NON viene sovrascritto** (e neppure
|
||||||
|
fuso: `ADJUSTED_LAST` e' ri-aggiustato all'indietro, incollare due vintage crea un salto sul
|
||||||
|
giunto); **`STORIA-CORTA`** = parte >1 anno dopo la quotazione e non al tetto della richiesta
|
||||||
|
(`PRIMA_QUOTAZIONE`, 6 simboli, **fonte secondaria dichiarata**). Controlli positivi
|
||||||
|
obbligatori: giro normale, serie al tetto 30Y, ETF giovane, simbolo fuori tabella.
|
||||||
|
**REGOLE:** (a) **un criterio si misura sulla sua RISOLUZIONE prima che sul suo esito** — se
|
||||||
|
decide su una frazione di percento dello spread e' rumore anche quando passa; (b) **un gate si
|
||||||
|
valida contando quante volte lo passa un candidato a caso** (qui 47%: il conto si poteva fare
|
||||||
|
il 27/07 senza dati nuovi); (c) **una certificazione che guarda solo DENTRO la serie non vede
|
||||||
|
cio' che la serie ha PERSO** — una serie troncata e' integra, senza gap, senza spike, senza
|
||||||
|
duplicati, e passa tutto (3ª occorrenza dopo split 2:1 e contaminazione EUR/USD); (d)
|
||||||
|
distinguere «giovane» / «al tetto della richiesta» / «troncato», o la guardia segnala sempre e
|
||||||
|
viene ignorata; (e) **un test che fallisce senza che il codice sia cambiato sta segnalando che
|
||||||
|
i dati non sono versionati** — si guarda sotto prima di toccarlo.
|
||||||
|
Diari `2026-08-07-crescita-fisco-etf-scelta.md` §7 (scoperta) e
|
||||||
|
`2026-08-07-gate-gtaa-e-storia-troncata.md` (risoluzione).
|
||||||
- 💰 **IL FISCO DURANTE L'ACCUMULO — mai contato in nessuna traiettoria, vale −30% a 10 anni
|
- 💰 **IL FISCO DURANTE L'ACCUMULO — mai contato in nessuna traiettoria, vale −30% a 10 anni
|
||||||
(misurato 2026-07-27, registrato qui il 2026-08-07).** ⚠️ I quattro risultati del 27/07 sera
|
(misurato 2026-07-27, registrato qui il 2026-08-07).** ⚠️ I quattro risultati del 27/07 sera
|
||||||
(`r0727_3k_vs_5k.py`, `r0727_orizzonte10.py`, `r0727_tasse.py`) erano **solo nei messaggi di
|
(`r0727_3k_vs_5k.py`, `r0727_orizzonte10.py`, `r0727_tasse.py`) erano **solo nei messaggi di
|
||||||
@@ -1649,6 +1683,56 @@ Prima ondata di ricerca onesta su BTC/ETH certificati (5 track, harness condivis
|
|||||||
comprano il **traguardo**, non il sorpasso: mediana al bersaglio al 12º anno invece del 15º,
|
comprano il **traguardo**, non il sorpasso: mediana al bersaglio al 12º anno invece del 15º,
|
||||||
P(bersaglio) a 15a da 73.2% a **99.0%**. Lump €3k vs €5k = ~1.8 mesi ogni €1.000 → non e' una
|
P(bersaglio) a 15a da 73.2% a **99.0%**. Lump €3k vs €5k = ~1.8 mesi ogni €1.000 → non e' una
|
||||||
decisione. Script `scripts/research/r0807_growth_yearly.py`.
|
decisione. Script `scripts/research/r0807_growth_yearly.py`.
|
||||||
|
✅ **TABELLE RIFATTE AL NETTO (2026-08-07) — il muro si sposta poco, i VERSAMENTI molto.**
|
||||||
|
`scripts/research/r0807_piano_netto.py`, test `tests/test_piano_netto.py` (16), diario
|
||||||
|
`2026-08-07-piano-al-netto.md`. **Book/pesi/cron/config INVARIATI.**
|
||||||
|
**(0) Controllo di replica superato:** a fisco spento la nuova macchina riproduce **$272.061 al
|
||||||
|
dollaro** (implementazione separata) e la colonna LORDA delle traiettorie riproduce **4 righe su
|
||||||
|
4** della tabella pubblicata (16.3/12.4/9.0/6.0 contro 16.2/12.4/9.0/6.0). ⚠️ Trovato per
|
||||||
|
strada: `perp_and_wall` gira a **2000 path** e a quella taglia da' **$269.648** → **la terza
|
||||||
|
cifra del muro e' rumore Monte Carlo (0.9%)**: si cita **$272k**, non $272.061.
|
||||||
|
**(1) IL MURO era calcolato con una convenzione ASIMMETRICA** — prelievo lordizzato ma capitale
|
||||||
|
che compone senza mai pagare imposte. Coerente (imposte annue dentro il portafoglio, prelievo
|
||||||
|
gia' netto): perpetua **10.91% → 7.70%**, muro **$272.061 → $258.338 (−5.0%)**; a 26% $236.310.
|
||||||
|
I due errori vanno in versi OPPOSTI e **si compensano quasi — per caso, non per costruzione**.
|
||||||
|
**(2) TRAIETTORIE da $600** (25a, 3000 path, seed 725; mediana CONDIZIONATA all'arrivo + P(20a)):
|
||||||
|
| €/mese | LORDO anni / P(20a) | **NETTO anni / P(20a)** |
|
||||||
|
|---|---|---|
|
||||||
|
| 0 | mai / 0% | **mai / 0%** |
|
||||||
|
| **250** | 16.3a / **92%** | **19.8a / 52%** |
|
||||||
|
| 500 | 12.4a / 100% | **14.7a / 99%** |
|
||||||
|
| 800 | 10.0a / 100% | **11.4a / 100%** |
|
||||||
|
| 1000 | 9.0a / 100% | **10.0a / 100%** |
|
||||||
|
| 2000 | 6.0a / 100% | **6.4a / 100%** |
|
||||||
|
📌 **€250/mese — il livello con cui il piano risultava «P 92%, funziona» — al netto e' una
|
||||||
|
moneta (52%).**
|
||||||
|
**(3) QUANTO VERSARE, al netto** (bersaglio $258.338; fra parentesi il vecchio numero lordo):
|
||||||
|
| orizzonte | P=50% | P=75% | **P=90%** | P=95% | tot. versato @P=90% |
|
||||||
|
|---|---|---|---|---|---|
|
||||||
|
| **10 anni** | €998/m | €1.162/m | **€1.323/m** *(€1.178)* | €1.424/m | **$175.058** *($155.923)* |
|
||||||
|
| 15 anni | €470/m | €570/m | **€672/m** *(€509)* | €725/m | $133.983 *($101.643)* |
|
||||||
|
| 20 anni | €245/m | €306/m | **€371/m** *(€237)* | €417/m | $98.762 *($63.406)* |
|
||||||
|
**Il fisco costa +12% al mese a 10 anni, +32% a 15, +57% a 20** (cresce con l'orizzonte perche'
|
||||||
|
l'errore era composto). La lettura del 26/07 si RAFFORZA: a 10 anni versi $175k per arrivare a
|
||||||
|
$258k (il rendimento fa il **32%**), a 20 anni ne versi $99k (il rendimento fa il **62%**).
|
||||||
|
**(4) RENDITA €/g mediana, netta** (perpetua 7.70%, imposte gia' dentro — non lordizzare due
|
||||||
|
volte): €250/m → 4.38 (5a) / 11.82 (10a) / 24.61 (15a) / **46.61 (20a)**, P(€50/g a 20a)
|
||||||
|
**42.0%** contro i **91.30 €/g e 90.0%** pubblicati; €500/m → 92.11 e 97.6%; €800/m → 146.78.
|
||||||
|
**COSA NON CAMBIA:** senza versamenti il capitale-rendita non si raggiunge **mai** a nessuna
|
||||||
|
lente fiscale; l'ordine delle leve (versare > quando > quanto presto si smette > piatto vs
|
||||||
|
crescente > frequenza) e' invariato; il rischio di venue resta fuori scala (a p=5% il mediano
|
||||||
|
e' zero comunque).
|
||||||
|
⚠️ **ERRORE MIO catturato prima di pubblicare:** la prima stesura calcolava la mediana degli
|
||||||
|
anni sull'INTERO vettore coi non-arrivi a `-1` → €250/mese risultava passare da 15.7 a **15.3**
|
||||||
|
anni col fisco (*piu' veloce*) mentre P crollava da 91% a 53%, perche' con meta' dei path a −1
|
||||||
|
la mediana cade sui PRIMI arrivi. **REGOLA: un non-arrivo va codificato +∞, mai −1** — con −1 il
|
||||||
|
numero migliora tanto piu' quanto peggio va la colonna. E **una mediana condizionata si stampa
|
||||||
|
sempre accanto alla sua probabilita'**.
|
||||||
|
**REGOLE:** (a) un modello che tassa una meta' del conto e non l'altra non e' conservativo, e'
|
||||||
|
**incoerente** — e i due errori possono compensarsi quasi esattamente, il che li rende
|
||||||
|
invisibili finche' non si rifa' il conto in modo simmetrico; (b) prima di pubblicare un numero
|
||||||
|
nuovo, **far riprodurre alla macchina quello vecchio**; (c) **un Monte Carlo ha una risoluzione
|
||||||
|
e va detta** ($272.061 e' esatto quanto $269.648: la differenza e' la taglia del campione).
|
||||||
- ⚖️ **BOOK vs ETF (S&P 500 / MSCI World) — le due lenti danno risposte OPPOSTE, e la scelta
|
- ⚖️ **BOOK vs ETF (S&P 500 / MSCI World) — le due lenti danno risposte OPPOSTE, e la scelta
|
||||||
robusta e' un MIX 50/50 (2026-08-07).** Script `r0807_asset_compare.py` + `r0807_best_strategy.py`;
|
robusta e' un MIX 50/50 (2026-08-07).** Script `r0807_asset_compare.py` + `r0807_best_strategy.py`;
|
||||||
diario `2026-08-07-crescita-fisco-etf-scelta.md`. **Book/pesi/cron/config INVARIATI.**
|
diario `2026-08-07-crescita-fisco-etf-scelta.md`. **Book/pesi/cron/config INVARIATI.**
|
||||||
|
|||||||
Reference in New Issue
Block a user