Quattro filoni chiesti dall'operatore ("proposte"). Book, pesi, config: INVARIATI.
1. LUMP-SUM + VENUE (r0727_lumpsum_split.py). Tutte le traiettorie del 25-26/07 avevano
START=600 cablato: mai misurato un versamento iniziale, mentre ~10k EUR stanno fermi
altrove. Macchineria validata: con lump 0 riproduce IDENTICI i numeri del 26/07.
- 10k EUR oggi e mai piu' nulla -> traguardo 17.2a, P 62%, rendita 61.58 EUR/g
- equivalenza onesta: +154 EUR/mese per 13 anni = 24.523 EUR, cioe' 2.45x
(la prima stesura misurava i versamenti risparmiati: numero giusto, domanda sbagliata)
- col rischio venue: a 11.500$ lo split e' possibile (quota IB 26%, non 25%) e taglia
P(perso tutto) da 18.4% a 3.5% a p=1%, costando 1.9-2.6pp di P(arrivare)
- SPLIT-CASSA: seconda gamba ferma costa altri 0.6-0.8pp e protegge IDENTICO
-> la protezione non e' bloccata dal PRIIPs: serve un CONTO, non uno sleeve
2. FEE WATCH (scripts/live/fee_watch.py). Nuovo schema Deribit dal 1 agosto senza numeri
pubblicati -> sorvegliante invece di promemoria. Legge il tier base dall'endpoint
pubblico (oggi taker 5.00 bps), applica la regola congelata e allerta sui cambiamenti.
3. MONITOR HEALTH (src/live/monitor_health.py). Tre gate pre-registrati si decidono su
serie forward di cui una sola era sorvegliata. Misura coda E buchi interni: una serie
bucata ma fresca passa qualunque guardia di freschezza.
4. BANDA GTAA01 25% VALIDATA (r0727_gtaa_band_gate.py). 30 celle, 29.9 anni, dpy=252.
Non e' selection-on-holdout (4/30 IS, 5/30 OOS), DSR 0.999, tracking OK ma AL BORDO.
Il modo di fallire non e' il de-levering (la vol non scende) ma la perdita di tracking.
Impatto sul book: zero -> REBAL_BAND_USD non toccato, si applica al deploy.
Aggiunto anche il bullet edge_watch, cablato il 26/07 e mai finito in CLAUDE.md.
Test: 56 nuovi, 504/504 verdi.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
15 KiB
2026-07-27 — Il capitale già fermo, due sorveglianze mancanti, e la banda GTAA validata
Richiesta dell'operatore: "proposte". Delle cinque proposte messe sul tavolo ne sono state scelte quattro; questo diario le chiude tutte. Book, pesi, cron-strategia, config: INVARIATI. Il cron guadagna due sorveglianze (non toccano l'esecuzione).
Script: r0727_lumpsum_split.py, r0727_gtaa_band_gate.py, scripts/live/fee_watch.py,
scripts/live/monitor_health.py + src/live/monitor_health.py.
Test: test_lumpsum_split.py (14), test_gtaa_band_gate.py (13), test_fee_watch.py (13),
test_monitor_health.py (16) = 56 nuovi.
1. Il capitale già fermo — la leva mai misurata
Il buco
Tutte le traiettorie pubblicate il 25 e 26/07 hanno START = 600.0 cablato. Il progetto ha
misurato con grande cura il calendario dei versamenti (fattore 6 fra front e back loading) e
non ha mai misurato un versamento iniziale — mentre sul conto Revolut ci sono ~€10.000, di
cui €6.043 in XEON che rende ~0% reale netto. Il conto che gira ne ha 600.
Validazione prima dei numeri
La macchineria è una generalizzazione di r0726_venue_risk.simulate (capitale iniziale e
deposito diventano parametri, tutto il resto identico incluso l'ordine di consumo dell'RNG).
Con lump=0 e €250/mese deve riprodurre esattamente i numeri del 26/07:
p=0.0% P(arrivare) 0.9487 vs 0.9487 · P(perso tutto) 0.0000 vs 0.0000 -> IDENTICO
p=1.0% P(arrivare) 0.8080 vs 0.8080 · P(perso tutto) 0.1842 vs 0.1842 -> IDENTICO
Cosa compra un versamento iniziale (p=0, 100% Deribit, 20 anni)
| lump | dep/mese | totale versato | anni al muro | P(entro 20a) | cap. mediano | rendita a 20a |
|---|---|---|---|---|---|---|
| €0 | €0 | $600 | mai | 0.0% | $16.354 | €3.21/g |
| €2.000 | €0 | $2.780 | 19.0a | 2.5% | $75.773 | €14.89/g |
| €5.000 | €0 | $6.050 | 18.5a | 22.9% | $164.901 | €32.39/g |
| €10.000 | €0 | $11.500 | 17.2a | 61.7% | $313.448 | €61.58/g |
| €0 | €250 | $66.818 | 15.7a | 94.9% | $544.645 | €106.99/g |
| €2.000 | €250 | $68.998 | 15.1a | 96.8% | $605.454 | €118.94/g |
| €5.000 | €250 | $72.268 | 14.4a | 98.2% | $695.475 | €136.62/g |
| €10.000 | €250 | $77.718 | 13.3a | 99.5% | $844.022 | €165.80/g |
La riga che sorprende è la quarta: €10.000 fermi oggi, senza versare mai più nulla, portano al capitale-rendita in 17.2 anni mediani con P=62%. Il piano da €250/mese senza lump ci arriva in 15.7 anni con P=95%: più affidabile, ma costa $66.818 di versamenti contro $10.900 una volta sola.
L'equivalenza — e la metrica che sbagliavo
Prima stesura: "€10.000 subito risparmiano 30 mesi = €7.414 di versamenti futuri, cioè 0.7x". Numero giusto, domanda sbagliata, e la conclusione che invita è l'opposto di quella corretta: il valore di un lump-sum non è versare meno, è arrivare prima. La formulazione onesta è a quale versamento mensile permanente equivale:
| lump | traguardo | equivale a versare | cioè |
|---|---|---|---|
| €2.000 | 15.1a (da 15.7a) | €281/mese | +€31/mese per 15 anni (€5.666) |
| €5.000 | 14.4a | €327/mese | +€77/mese per 14 anni (€13.241) |
| €10.000 | 13.3a | €404/mese | +€154/mese per 13 anni (€24.523) |
€10.000 oggi valgono €24.500 di versamenti futuri: 2.45×. È lo stesso meccanismo del front-loading misurato il 26/07, portato al suo estremo.
E il rischio di venue, che è la metà scomoda della domanda
Il 26/07 aveva già osservato che il front-loading mette più capitale sull'exchange prima. Un lump-sum è il front-loading estremo, quindi va misurato col rischio dentro. A €10.000 il conto sarebbe $11.500 e lo split diventa possibile — a quota IB 26%, non il 25% preferito: sotto $3.000 sulla gamba equity non c'è uno sleeve, c'è cash su un secondo conto.
| p annua | P(arrivare) CONC | SPLIT | SPLIT+costi | P(perso tutto) CONC | SPLIT |
|---|---|---|---|---|---|
| 0.0% | 99.5% | 98.2% | 98.0% | 0.0% | 0.0% |
| 0.5% | 93.2% | 91.4% | 91.2% | 9.7% | 0.9% |
| 1.0% | 87.1% | 85.2% | 85.0% | 18.4% | 3.5% |
| 2.0% | 76.2% | 73.2% | 73.1% | 33.7% | 11.2% |
| 5.0% | 50.5% | 47.9% | 47.8% | 64.1% | 40.7% |
Lo split costa 1.9-2.6pp di P(arrivare) e taglia P(perso tutto) da 18.4% a 3.5% (a p=1%). La colonna "SPLIT+costi" applica alla gamba IB il haircut dichiarato (0.8pp/anno di costi a taglia piccola + 0.1pp di drag UCITS): cambia lo 0.1-0.2pp, cioè niente. Il costo della gamba equity non è ciò che decide.
⚠️ P(perso tutto) sotto CONC non dipende dal lump (9.7/18.4/33.7/64.1% a qualunque taglia): con un conto solo "almeno un fallimento" coincide con "perso tutto", e quella probabilità è una proprietà del tempo di esposizione. Il lump non la peggiora — moltiplica ciò che porta via.
La sezione che serviva davvero: e se la seconda gamba fosse solo liquidità?
GTAA01 oggi non è deployabile (blocco PRIIPs; la via UCITS su Degiro è verificata ma in preparazione). Quindi lo split disponibile subito è Deribit + un conto fermo.
| p annua | P(arrivare) CONC | SPLIT-GTAA | SPLIT-CASSA | P(perso tutto) CONC | SPLIT |
|---|---|---|---|---|---|
| 0.5% | 93.2% | 91.4% | 90.7% | 9.7% | 0.9% |
| 1.0% | 87.1% | 85.2% | 84.5% | 18.4% | 3.5% |
| 2.0% | 76.2% | 73.2% | 72.6% | 33.7% | 11.2% |
Tenere ferma la seconda gamba invece di investirla costa 0.6-0.8pp di P(arrivare) e non toglie NULLA alla protezione — che è identica, perché dipende da quanti conti falliscono, non da cosa ci sta sopra. La protezione dalla rovina non è bloccata dal PRIIPs, non aspetta la validazione della banda, non richiede che GTAA01 esista: richiede un secondo conto.
Soglie
- split a quota raccomandata (25%): da $12.000
- split forzando la quota fino al 35%: da $8.571
- con un lump da €10.000 il conto sarebbe $11.500 → possibile, ma a quota 26%.
La riapertura della decisione di venue è fissata a $20.000. Un lump da €10k porta il conto sotto quella soglia ma sopra la fattibilità tecnica — ed è un cambiamento del piano, il caso in cui CLAUDE.md dice esplicitamente di riaprire prima. Questa tabella è il materiale per farlo; la decisione resta dell'operatore, come il 26/07.
⚠️ Cosa questo filone NON decide: quanto dei €6.043 in XEON sia un vero fondo d'emergenza. Un fondo d'emergenza non è capitale disponibile, e la tabella qui sopra misura cosa compra ogni euro che entra, non quali euro debbano entrare.
2. Fee Deribit — un sorvegliante invece di un promemoria
Il nuovo schema entra in vigore il 1° agosto e l'annuncio non contiene numeri. La regola era già decisa in anticipo (≤5bps/lato → nulla; >10bps → rivedere il peso di SKH01, 4× più fee-sensibile di TP01). Mancava solo il modo di accorgersene.
public/get_instrument espone il tier base — che è quello che paga un conto da $600, dove
ogni soglia VIP è fuori portata — senza chiavi:
strumento taker maker liquidaz.
BTC-PERPETUAL 5.00 0.00 75.00
ETH-PERPETUAL 5.00 0.00 90.00
verdetto: [OK] taker 5.0bps <= 5: non si tocca nulla
scripts/live/fee_watch.py (in cron_daily.sh) confronta con l'ultima lettura, allerta su
qualsiasi cambiamento — taker, maker e liquidation fee, che l'annuncio tocca tutti e tre — e
applica la regola congelata. Cross-check best-effort sulla fee realmente pagata dai trade del
conto, con {} che significa non misurata e non zero.
test_baseline_e_quella_dei_backtest lega BASELINE_TAKER_BPS al default fee_rt=0.001 di
backtest_signals: se un giorno le due divergessero, il confronto smetterebbe di avere senso.
3. I forward-monitor non erano sorvegliati
Tre gate pre-registrati — STATARB 27/09, XSR01 23/10, DVOLSPREAD kill 24/10 — si
decideranno leggendo serie forward. Di quelle serie una sola aveva una guardia d'integrità
(paper_dvolspread, contabilità a 3 stati + veto sotto l'80%). Le altre nessuna: paper_xsr,
paper_statarb, paper_prevday, paper_portfolio, paper_combo → 0 controlli.
Un monitor fermo produce silenzio, e il silenzio in una serie di ritorni si legge come zero,
cioè come una misura. È lo stesso schema già pagato con fresh_5m (26/07) e col feed-freeze del
14/07.
src/live/monitor_health.py misura due guasti diversi, perché una sola misura non basta:
- coda — l'ultima barra è vecchia (il monitor si è fermato adesso);
- buchi interni — la serie è più corta del proprio arco temporale. Una guardia di sola freschezza lascerebbe passare un monitor che ha perso il 30% delle barre di mezzo e ha scritto stanotte — ed è esattamente il guasto che falsifica un gate senza farsi notare.
Cadenze dichiarate per monitor, perché sbagliarle significa un falso allarme a settimana:
paper_prevday registra a barra oraria (864 barre in 36 giorni); paper_combo vive sul
calendario di borsa (venerdì è l'ultima barra fino a lunedì). Soglia di copertura 0.80,
riusata di proposito dal veto DVOLSPREAD: una soglia diversa per monitor renderebbe i gate non
confrontabili.
Stati: OK / FERMO / BUCATO / ASSENTE / NUOVO — quest'ultimo per i monitor troppo
giovani per un giudizio (XSR01 e DVOLSPREAD hanno 2 barre): non allerta, ma non risulta sano.
Stato al 27/07: 6/6 monitor giudicati, tutti OK; paper_combo al 96% per il 3 luglio — festività
di borsa che np.busday_count non conosce. È un limite dichiarato e conservativo (segnala di
più, non di meno).
I test includono i controlli positivi obbligatori (un rilevatore che non ha mai segnalato nulla è indistinguibile da uno rotto): monitor fermo → FERMO, serie bucata e fresca → BUCATO, stato assente → ASSENTE.
4. La banda GTAA01 al 25% — validata
La proposta del 27/07 (banda = 25% della gamba invece di $50 assoluti) era dichiarata esplicitamente non validata. Griglia 30 celle (5 cadenze × 6 bande) su 29.9 anni di path di produzione, annualizzazione √252 (una serie su giorni di borsa passata a 365 esce con lo Sharpe ×1.20: l'errore del 25/07).
(A) Selezione in-sample (cella scelta sui soli dati pre-2015, letta sul 2015+, l'hold-out equity documentato di GTAA01):
cella scelta al buio : cadenza 1, banda 25% -> IS 0.66 · OOS 0.90 · FULL 0.74
cella proposta 27/07 : cadenza 5, banda 25% -> IS 0.62 · OOS 0.86 · FULL 0.70
rango della proposta : 4/30 in-sample · 5/30 sull'hold-out
Il rango non migliora passando all'hold-out → non è selezione-sull'hold-out (la firma sarebbe il contrario). La cella scelta al buio preferisce il controllo giornaliero, che vale +0.04 di Sharpe e costa 42 ordini/anno con 250 controlli manuali: il conto d'esecuzione non ha API (misurato il 27/07), quindi non è una configurazione, è un'ipotesi. La cadenza settimanale costa −0.04 e compra l'eseguibilità a mano.
(B) Deflated Sharpe sulle 30 celle, dpy=252: 0.999 PASS (massimo atteso sotto il nullo 0.14), sia per la proposta sia per la cella scelta al buio.
(C) Null de-levering — e qui il modo di fallire non è quello atteso:
| banda | corr col riferimento | vol/rif | Sh FULL | |
|---|---|---|---|---|
| 0% | 0.983 | 1.03 | 0.59 | OK |
| 10% | 0.980 | 1.02 | 0.64 | OK |
| 25% | 0.951 | 0.99 | 0.70 | OK (al bordo) |
| 40% | 0.907 | 1.04 | 0.67 | fuori traccia |
| 60% | 0.859 | 1.10 | 0.59 | fuori traccia |
Allargando la banda la volatilità non scende: il null de-levering classico non morde. Ciò che si rompe è il tracking — lo sleeve tiene posizioni vecchie e smette di somigliare a sé stesso. E i due segnali concordano: oltre il 25% la correlazione cala e lo Sharpe smette di migliorare, quindi non esiste una zona in cui il numero premia il congelamento. ⚠️ Ma il 25% è al bordo (corr 0.951 contro una soglia di 0.95), non al centro di un plateau: va citato così.
Invarianza al capitale — la ragione per cui la proposta esiste:
| capitale | banda 25% | ord/anno | Sharpe | banda $50 fissa | ord/anno | Sharpe | |
|---|---|---|---|---|---|---|---|
| $3.000 | $125 | 25 | 0.66 | $50 | 65 | 0.52 | |
| $10.000 | $417 | 25 | 0.70 | $50 | 92 | 0.62 | |
| $50.000 | $2.083 | 25 | 0.71 | $50 | 134 | 0.66 |
⚠️ 25 ordini/anno, non i 21 citati il 27/07: stimatore diverso (qui il gate contato sulla griglia dei controlli, 30 anni, veicoli USA; lì i cambi di posizione sulla finestra UCITS di 3.2 anni). L'invarianza — che è la proprietà sotto esame — regge in entrambi.
Impatto sul book: Sharpe FULL 2.221 → 2.221, maxDD 6.08% → 5.94%. Zero. Il book modella GTAA01 a $10.000, dove la banda fissa già funziona: il valore della proposta è tutto al capitale piccolo (0.52 → 0.66 a $3k), cioè al deploy.
Verdetto: la proposta passa i tre gate. Produzione NON toccata: cambiare
REBAL_BAND_USD non sposta un solo numero pubblicato, e lo sleeve non è deployabile prima dei
$20k. Il cambio si applica al deploy, insieme alla scelta del broker, con questo diario come
giustificazione.
5. Il debito chiuso di straforo
edge_watch.py — i criteri di kill del book live — è in cron dal 26/07 e non era in
CLAUDE.md (zero occorrenze). Il criterio di morte di ciò che gira con soldi veri non stava nella
memoria operativa del progetto: la sessione successiva avrebbe ragionato come se non esistesse.
Aggiunto.
6. Regole
- Un parametro d'esecuzione scelto guardando il risultato è selezione come ogni altra, e va passato per gli stessi gate — anche quando "è solo esecuzione" e non tocca l'allocazione.
- Quando si misura l'effetto di un vincolo, si misura anche il vincolo del vincolo. Lo split di venue a $11.500 non è "25% su IB": è 26%, perché sotto $3.000 la gamba equity non esiste. È il capitale a scegliere la quota, non la preferenza.
- Il valore di un versamento iniziale non si misura in versamenti risparmiati (domanda sbagliata, rapporto 0.7×) ma in versamento mensile equivalente (2.45×). La prima formulazione invita alla conclusione opposta.
- Una guardia di freschezza non è una guardia d'integrità. Il guasto che conta — la serie bucata e fresca — passa la prima e fallisce la seconda.
- Il verdetto pre-scritto va confrontato coi numeri prima di stamparlo. Il testo di (C) diceva "il numero migliora perché esce dal mercato": la vol misurata non scendeva, quindi era falso. Il fallimento vero era un altro (tracking), e dirlo giusto vale più che avere ragione.
- Un rischio non-diversificabile si compra con un secondo conto, non con un secondo sleeve. La protezione dalla rovina è identica con GTAA01 o con liquidità: dipende da quanti conti falliscono, non da cosa ci sta sopra.