3a44171402
Il follow-up dichiarato stamattina diceva: "i muri usano il book a 2 sleeve da $600
estrapolato a $272k; il book diversificato ha Sharpe piu' alto -> IL MURO VERO E' PIU'
BASSO". Misurato: FALSO. A pari nozionale il muro e' $273.900 contro i $272.061
pubblicati (+1%): l'estrapolazione col book a 2 sleeve era giusta PER CASO.
STRUTTURA: il muro e' un PUNTO FISSO — serve capitale C per girare il book che determina
il muro C, quindi si itera C_{n+1} = muro(book(C_n)). Converge in 1 iterazione perche' il
muro cade SOPRA la soglia XS01 ($117k) e la composizione non cambia; la struttura conta
solo se il muro atterra vicino a una soglia, ma va iterato per saperlo.
BOOK DEPLOYABLE (non il "migliore"): TP01 38 / SKH01 23 / GTAA01 23 / XS01 17. VRP01
escluso per regola permanente (niente short-vol da modello in deploy), XSR01 escluso per
gate pre-registrato 23/10. Costi capital-aware, fattore d'ancora x0.860 misurato su
QUESTO book. Sharpe 1.94, vol 8.9%, CAGR 18.3%.
PERCHE' NON SCENDE: diversificare alza lo Sharpe (1.64 -> 1.94) ma abbassa drift e vol
INSIEME, e la rendita perpetua vive sul DRIFT -> 10.91% -> 10.84%, invariata. Il guadagno
di Sharpe va in meno rischio, non in piu' reddito. E' il fatto gia' misurato il 25/07 §3,
dimenticato scrivendo il follow-up.
E STAVO VIOLANDO UNA REGOLA GIA' CODIFICATA: "un diversificatore a basso CAGR si giudica
a ISO-RISCHIO, mai a iso-nozionale" (25/07 §3). A iso-rischio (leva 1.28x): rendita
13.35%, muro $222.406 = -18% -> replica indipendente del -19% misurato il 25/07 con
macchineria e book diversi. Vale solo se la leva e' disponibile e a costo < uplift: $222k
e' un TETTO, non una stima.
BUG CATTURATO PRIMA DI PUBBLICARE: la prima corsa dava Sharpe 0.95 e muro $854k
("diversificare triplica il muro" — spettacolare e falso). CC.gtaa_banded ritorna la
storia GTAA dal 1996 mentre lo sleeve di produzione tronca a GTAA_BOOK_ACTIVATION; con la
rinormalizzazione per-riga di combine_outer il 75% del campione era GTAA01 DA SOLO al
100%. Preso non da un test ma perche' la somma pesata dei componenti (~18%) non tornava
col drift del combinato (6.8%). Diagnostica decisiva: la copertura per colonna
(TP01 24.6% / SKH01 24.6% / GTAA01 100.0% / XS01 8.6%).
Book, pesi, cron, config INVARIATI.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
133 lines
6.3 KiB
Markdown
133 lines
6.3 KiB
Markdown
# 2026-07-26 — Il muro come PUNTO FISSO: la mia previsione era sbagliata, e il numero pubblicato era giusto per caso
|
||
|
||
**Richiesta:** *"fai follow up"* — il follow-up dichiarato poche ore prima:
|
||
|
||
> I muri assumono il book a 2 sleeve da $600 fino a $272k. Il book a 5 sleeve ha Sharpe piu' alto,
|
||
> quindi **il muro vero e' piu' basso di $272k**.
|
||
|
||
**Script:** `r0726_wall_fixedpoint.py`. **Test:** `tests/test_wall_fixedpoint.py` (11).
|
||
**Book, pesi, cron, config: INVARIATI.**
|
||
|
||
---
|
||
|
||
## 0. Esito in una riga
|
||
|
||
**La previsione era sbagliata: il muro NON scende.** A pari nozionale e' **$273.900** contro i
|
||
**$272.061** pubblicati — **+1%**, cioe' l'estrapolazione col book a 2 sleeve era **giusta per
|
||
caso**. Solo a **iso-rischio** scende, a **$222.406 (−18%)**, e li' serve leva a costo minore
|
||
dell'uplift, che non e' gratis.
|
||
|
||
---
|
||
|
||
## 1. La struttura giusta: il muro e' un punto fisso
|
||
|
||
Il difetto era reale: `book_series(alloc=$600)` e' il book a **2 sleeve**, estrapolato fino a
|
||
$272k. A quella taglia gireresti un altro book — a ~$13k si accende GTAA01 (IB), a ~$118k XS01
|
||
(Hyperliquid, 19 gambe).
|
||
|
||
E la correzione ha una forma: **serve capitale C per girare il book che determina il muro C**.
|
||
Si itera `C_{n+1} = muro(book(C_n))`.
|
||
|
||
```
|
||
iter capitale ipotesi sleeve Sharpe rendita -> muro
|
||
0 $272,061 TP01+SKH01+GTAA01+XS01 1.94 10.84% $273,900
|
||
CONVERGE a $273,900 (variazione < 2%)
|
||
```
|
||
|
||
Converge in **una** iterazione, e il motivo e' istruttivo: il muro cade **sopra** la soglia di
|
||
XS01 ($117k), quindi la composizione del book non cambia fra un'iterazione e l'altra. La struttura
|
||
a punto fisso conta solo se il muro atterra **vicino a una soglia** — qui non succede, ma non si
|
||
poteva sapere prima di iterare.
|
||
|
||
**Regole di ammissione rispettate** (e' il book *deployable*, non il *migliore*): **VRP01 escluso**
|
||
(regola permanente: niente short-vol da modello in deploy), **XSR01 escluso** (gate pre-registrato
|
||
23/10), pesi = book attivo rinormalizzato, costi **capital-aware** (TP01 haircut min-order, GTAA01
|
||
commissione IB reale a banda+cadenza, SKH01 sul path live), fattore d'ancora **misurato su questo
|
||
book** (×0.860) e non ereditato.
|
||
|
||
---
|
||
|
||
## 2. Perche' il muro non scende
|
||
|
||
```
|
||
sleeve peso drift/a vol/a Sharpe
|
||
TP01 38% 15.7% 12.2% 1.29
|
||
SKH01 23% 27.6% 23.4% 1.18
|
||
GTAA01 23% 6.1% 5.4% 1.12
|
||
XS01 17% 28.0% 20.9% 1.34
|
||
|
||
book 2-sleeve (riferimento) drift 18.6% vol 11.4% Sharpe 1.64
|
||
book deployable al p.fisso CAGR 18.3% vol 8.9% Sharpe 1.94
|
||
```
|
||
|
||
Diversificare **alza lo Sharpe** (1.64 → 1.94) ma abbassa **drift e vol insieme**. La rendita
|
||
perpetua vive sul drift: 10.91% → 10.84%, cioe' **invariata**. Il guadagno di Sharpe finisce tutto
|
||
in **meno rischio**, non in piu' reddito.
|
||
|
||
E' esattamente il fatto gia' misurato il 25/07 (§3): *"Diversificare NON crea reddito a pari
|
||
nozionale — libera BUDGET DI RISCHIO"*. Non me ne ero ricordato scrivendo il follow-up.
|
||
|
||
## 3. Il confronto onesto e' a ISO-RISCHIO — e stavo violando una regola del progetto
|
||
|
||
CLAUDE.md ha una regola codificata il 25/07:
|
||
|
||
> **Un diversificatore a basso CAGR si giudica a ISO-RISCHIO, mai a iso-nozionale** (e' il null
|
||
> de-levering al contrario).
|
||
|
||
Il confronto che avevo impostato era **iso-nozionale**: quello sbagliato secondo la regola del
|
||
progetto stesso.
|
||
|
||
```
|
||
lente rendita muro
|
||
2 sleeve, ×0.89 (pubblicato) 10.91% $272,061
|
||
deployable, ISO-NOZIONALE (leva 1.00x) 10.84% $273,900 (+1%)
|
||
deployable, ISO-RISCHIO (leva 1.28x) 13.35% $222,406 (-18%)
|
||
```
|
||
|
||
✅ **Replica indipendente:** il 25/07 misurava, con macchineria diversa e su un book diverso,
|
||
iso-rischio → **−19% di muro**. Qui esce **−18%**. Due implementazioni separate, stesso numero.
|
||
|
||
⚠️ L'iso-rischio vale **solo se la leva e' (a) disponibile e (b) a costo minore dell'uplift** —
|
||
addendum IB del 25/07: su ETF a IB c'e' Reg-T 2x (portfolio margin da ~$110k) e il margine costa
|
||
~5.5%/anno. **Il $222k NON sconta il costo del margine: e' un tetto, non una stima.**
|
||
|
||
---
|
||
|
||
## 4. Il bug che ha quasi prodotto un titolo grottesco
|
||
|
||
La prima corsa dava: Sharpe **0.95**, CAGR 6.7%, muro **$854.013** — cioe' *"diversificare triplica
|
||
il muro"*, un risultato spettacolare e falso. Il numero era plausibile abbastanza da poter essere
|
||
pubblicato.
|
||
|
||
**Causa:** `CC.gtaa_banded` ritorna la storia GTAA **dal 1996**, mentre lo sleeve di produzione
|
||
(`sleeves._gtaa_daily_returns`) la tronca a `GTAA_BOOK_ACTIVATION` (2019-03). Con la
|
||
rinormalizzazione per-riga di `combine_outer`, per il **75% del campione** (1996-2019) il "book a
|
||
4 sleeve" era **GTAA01 da solo al 100%** — uno sleeve al 4% di drift.
|
||
|
||
**Come l'ho preso:** non da un test, ma perche' **la somma pesata dei componenti (~18%) non
|
||
tornava col drift del combinato (6.8%)**. Una discrepanza di 11 punti che non sapevo spiegare.
|
||
|
||
**Diagnostica decisiva:** la copertura per colonna — `TP01 24.6% / SKH01 24.6% / GTAA01 100.0% /
|
||
XS01 8.6%`. Un 100% accanto a tre valori bassi dice tutto in una riga.
|
||
|
||
**Cablato:** `test_gtaa_e_troncato_all_era_book` (la causa), `test_il_book_deployable_non_parte_dal_1996`
|
||
(l'effetto, per prendere una gamba futura che reintroducesse storia antecedente) e
|
||
`test_il_book_a_4_sleeve_ha_sharpe_superiore_al_singolo_gtaa` (plausibilita').
|
||
|
||
---
|
||
|
||
## 5. Regole trasferibili
|
||
|
||
1. **Un follow-up dichiarato contiene una PREVISIONE, e la previsione va misurata, non assunta.**
|
||
Avevo scritto in CLAUDE.md "il muro vero e' piu' basso": era una deduzione ragionevole
|
||
(piu' Sharpe → piu' rendita) e sbagliata, perche' la rendita vive sul **drift**.
|
||
2. **Prima di misurare, rileggere le regole gia' codificate.** La risposta ("diversificare non
|
||
crea reddito a pari nozionale, si giudica a iso-rischio") era gia' in CLAUDE.md dal 25/07 e ho
|
||
impostato comunque il confronto sbagliato.
|
||
3. **Quando un aggregato non torna con la somma dei suoi pezzi, fermarsi.** L'11% di discrepanza
|
||
era l'unico segnale del bug: nessun test lo copriva, nessuna eccezione, output plausibile.
|
||
4. **La copertura per colonna e' la prima diagnostica di un outer-join.** Un 100% accanto a valori
|
||
bassi = una gamba con storia diversa che domina la rinormalizzazione.
|
||
5. **Un punto fisso converge subito se non e' vicino a una soglia** — ma va iterato lo stesso per
|
||
saperlo.
|