Files
PythagorasGoal/docs/diary/2026-07-26-wall-fixedpoint.md
Adriano Dal Pastro 3a44171402 research: il muro come punto fisso — la previsione del follow-up era SBAGLIATA
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>
2026-07-26 18:56:07 +00:00

133 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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.