Files
PythagorasGoal/docs/diary/2026-08-28-gtaa-fase-e-allarmi.md
T
Adriano Dal Pastro 418f523be7 gtaa: la decisione tenere/bloccare va a $15k — gate (A) ritirato, soglia sorvegliata
Decisione dell'operatore: GTAA01 NON si blocca oggi, si decide quando il book
arriva a $15k. Il motivo registrato non e' «non contribuisce» — la misura dice
il contrario (+0,095/+0,124 di Sharpe a iso-rischio secondo la fase, positivo in
tutte e cinque, hold-out +0,247, 6 anni su 8, correlazione col resto +0,087).
Il motivo e' che sotto $15k di book lo sleeve NON E' ACCENDIBILE:
GTAA_MIN_CAPITAL e' $3.000 allocati, che al peso 20% fa $15.000 contro i $2.068
attuali. Finora era manutenzione senza beneficio incassabile.

Registrate anche le due ragioni contro il blocco, che restano valide: N7 (uno
sleeve difensivo si giudica sul sinistro, e questa finestra non lo contiene) e
N4 (togliendolo il portafoglio di ricerca diventa 100% cripto su un venue solo).
E il costo che sarebbe andato pagato: GTAA01 e' uno dei quattro nomi di
W_DEPLOY, da cui escono i $313k del muro.

PERCHE' LA DECISIONE NON SI DIMENTICHI (N9). Una decisione parcheggiata su un
numero che nessuno sorveglia e' parcheggiata per sempre. `journal.SOGLIE_CAPITALE`
legge l'equity ogni giorno — il giornale lo fa comunque — e il giorno che supera
la soglia la voce dice quale decisione si sblocca e perche'. Seconda riga: $20k,
dove si riapre «100% Deribit fino a $20k». Una riga si TOGLIE quando la decisione
e' presa. 5 test, incluso «equity non leggibile non e' una soglia superata» (P5).

GATE (A) RITIRATO come pass/fail, congelando il MOTIVO e non l'esito — come il
07/08 col confronto fra ranghi, e per la stessa ragione: il criterio decide su un
margine piu' piccolo del rumore che lo scuote. In piu' una guardia sulla CAUSA
(`test_la_fase_di_ribilanciamento_e_ancora_ancorata_alla_POSIZIONE`) che si rompe
il giorno che qualcuno ancorasse la fase al calendario: quel giorno il gate
potrebbe tornare decidibile, ed e' un fatto da guardare, non da ignorare.
Il test sul margine assoluto si e' auto-ritirato: diceva «se scendesse sotto un
centesimo questo criterio smetterebbe di essere una misura», ed e' sceso a 0,0074.

CLAUDE.md: §3 nuova riga · §5.2 RISOLTO (trasporto allarmi) · §5.4 riscritto (la
domanda fiscale (a) ha una risposta alla fonte: derivati in c-quater al 26%, non
c-sexies al 33% — Circolare AdE 30/E del 27/10/2023, citata verbatim) · §5.13
nuovo debito, la fase che ruota — quantificata e dichiarata INNOCUA oggi (D5):
0,029 di Sharpe a livello di portafoglio, dentro la banda [1,81-2,12].

Diario: docs/diary/2026-08-28-gtaa-fase-e-allarmi.md
Suite: 789 passati, 0 falliti.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-28 12:54:08 +00:00

159 lines
9.0 KiB
Markdown
Raw 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-08-28 — La fase che ruota, gli allarmi che si perdevano, e una risposta fiscale
*Scritto il 2026-08-28. Numeri riprodotti dagli script citati; le letture in prosa sono firmate
come tali (P13).*
## In una riga
Un test rosso su GTAA01 non parlava di GTAA01: parlava del fatto che **la finestra "congelata"
pre-2015 rotola da sola ogni notte**. Nel frattempo si e' chiuso il debito del trasporto degli
allarmi, e la prima delle due domande al commercialista ha trovato una risposta alla fonte.
---
## 1. Il gate (A) della banda GTAA01 e' una moneta — la finestra rotola
`r0828_gtaa_band_phase.py`. Replica bit-exact della produzione verificata (max|Δ| = 0.00e+00 su
7.544 barre). Codice fermo dal 07/08: nessun commit su `src/portfolio/gtaa.py` ne' su
`r0727_gtaa_band_gate.py`. Si e' mosso il DATO.
**(0) La finestra in-sample non e' ferma.** IB serve una finestra **rotolante di 30 anni**. SPY e'
l'unica gamba al muro (30,0 anni) e nel `logs/cron_daily.log` la sua data d'inizio avanza di un
giorno di borsa ogni notte: `1996-07-02` il 24/06 → `1996-09-04` oggi. QQQ e IWM arriveranno allo
stesso muro fra **2,5 e 3,7 anni**.
**(1) L'amplificatore e' la fase.** `_gated_returns` ribilancia su `i % every == 0`, dove `i` e' la
**posizione nell'array**. Se la prima barra scivola, si ri-fasa ogni decisione di ribilanciamento
di trent'anni di storia.
| misura | valore |
|---|---|
| spostamento max dello Sharpe in-sample dal 07/08 (finestra CHIUSA, codice fermo) | **0,076** |
| banda scelta al buio in 10 notti consecutive | 25% · 40% · 60% |
| notti col margine sotto il pavimento dichiarato (0,01) | **4/10** (minimo 0,0026) |
| a dato FISSO, muovendo solo la fase | 25% su 3 fasi, 60% su 2 |
Il criterio decideva su ~0,007-0,015 di Sharpe mentre il rumore che lo scuote vale fino a 0,076.
E' lo stesso modo di fallire del criterio a ranghi ritirato il 07/08 (che decideva su 0,00116), in
un costume nuovo.
## 2. Criterio (C): la mediana delle 5 fasi
`r0828_gtaa_band_median_phase.py`. ⚠️ **Scelto DOPO aver visto la tabella delle fasi**: misura lo
strumento, non valida la banda. Pavimento tenuto a 0,01, invariato.
- (i) scelta stabile su 10 notti: **SI**`60%` in tutte e dieci
- (ii) margine sempre ≥ 0,01: **SI** — minimo 0,0197
- (iii) potenza (al buio ≠ hold-out): **SI** — 60% contro 40%
Escursione dello Sharpe in-sample su 10 notti: **74/99%** per ogni banda. Lo strumento regge.
**Ma la cella che sceglie non e' la proposta:** al buio esce il 60%, il 25% vince **0 notti su 10**.
Da tenere accanto: sull'hold-out il 60% e' **penultimo** (0,7430 contro 0,9315 del 40%), coerente
con lo Spearman IS/OOS ~0 misurato il 07/08 — la scelta in-sample **non predice**.
**Contorno che vale piu' del verdetto:** le 5 serie di fase correlano **0,988****N_eff 1,01**.
La mediana di 5 fasi e' UNA osservazione: toglie l'artefatto, non compra precisione.
### Le due domande che erano state confuse
Il gate (A) puo' chiedere due cose diverse, e il 07/08 coincidevano **per fortuna di fase**:
| forma | difetto | quanto e' grave |
|---|---|---|
| «la banda e' la scelta che si fa al buio?» | **non ha risoluzione** | cambia verdetto ogni notte |
| «la banda non e' stata selezionata sull'hold-out?» | **non ha potenza** | 1 cella su 30 e' l'argmax dell'hold-out → **29/30 lo passano per costruzione** |
📌 *Lettura (agente, fallibile).* Il 25% non viene dalla griglia affatto: viene dall'argomento
**strutturale** del 27/07 — una banda in dollari assoluti degenera al variare del capitale, una
frazione no. Sotto la mediana delle fasi il 25% e' **2° in-sample e 3° sull'hold-out**: decente
ovunque, primo da nessuna parte, che e' la firma di un parametro NON selezionato sui dati. A un
parametro scelto per ragioni strutturali non si applica un gate di *selezione* ma uno di
*robustezza* — «fa danno da qualche parte?». Risposta: no.
**Esito:** gate (A) **ritirato** come pass/fail, congelando il MOTIVO (come il 07/08), piu' una
guardia sulla CAUSA che si rompe il giorno che la fase venisse ancorata al calendario.
## 3. Cosa cambia togliendo GTAA01 — e la decisione dell'operatore
`r0828_senza_gtaa.py`. Portafoglio di **ricerca** a 5 sleeve; NON il book live.
| | Sharpe | CAGR | maxDD | vol |
|---|---|---|---|---|
| CON GTAA01 | **2,28** | +19,2% | 6,1% | 7,8% |
| SENZA, iso-nozionale | 2,16 | **+23,8%** | 7,8% | 10,1% |
| SENZA, **iso-rischio** (×0,77) | 2,16 | +18,0% | 6,0% | 7,8% |
A iso-nozionale togliendolo si guadagna **drift** e si compra **volatilita'**. A iso-rischio — la
sola lente onesta per un diversificatore a basso CAGR (M6) — **Δ Sharpe +0,121**, maxDD invariato.
Hold-out 2025+: **Δ +0,247**. Aiuta in **6 anni su 8**. Correlazione col resto **+0,087**: e'
davvero altro. Standalone Sharpe 1,06, CAGR +5,8%.
⚠️ **Con la sua fascia di fase:** il Δ sulle 5 fasi va da **+0,095 a +0,124** e supera la soglia
dichiarata (0,12) in **2 fasi su 5**. Il **segno e' stabile**, il verdetto **binario** no.
### La decisione: rinviata a $15k di book
Discussa con l'operatore. L'argomento che ha deciso non e' «GTAA01 non contribuisce» — la misura
dice il contrario — ma che **a questo capitale lo sleeve non e' accendibile**: `GTAA_MIN_CAPITAL`
e' **$3.000 allocati**, che al peso 20% significa **$15.000 di book** contro i **$2.068** attuali.
Sotto quella soglia e' manutenzione senza beneficio incassabile.
Due ragioni registrate **contro** il blocco immediato, entrambe regole del progetto:
- **N7** — uno sleeve difensivo si giudica **sul sinistro, non sul premio**, e la finestra
2019-2026 non contiene il sinistro per cui esiste un GTAA a sei gambe;
- **N4** — il rischio di venue si compra con un **conto**, non con uno sleeve: togliere GTAA01
renderebbe il portafoglio di ricerca **100% cripto su un venue solo**.
E un costo che sarebbe andato pagato, non saltato: GTAA01 e' uno dei **quattro** nomi di
`r0726_wall_fixedpoint.W_DEPLOY`, da cui escono i **$313k** e tutta la pianificazione da €500/mese.
**Perche' la decisione non si dimentichi** (N9), la soglia e' sorvegliata dal giornale:
`journal.SOGLIE_CAPITALE` legge l'equity ogni giorno e il giorno che supera $15k la voce lo dice,
con la domanda da rispondere accanto. Stessa tabella, seconda riga: **$20k**, dove si riapre
«100% Deribit fino a $20k».
## 4. Allarmi: il marcatore «gia' detto» si scrive DOPO l'invio
Debito §5.2 chiuso su decisione dell'operatore. `venue_watch.run_once` salvava lo stato coi
marcatori `alerted` gia' a True e l'invio lo faceva il chiamante **dopo**: col 6,9% di invii
falliti misurato (2/29), un 🚨 perso restava perso per l'**episodio intero** (200-2.324 ore).
Ora il sender e' **iniettato** (la funzione resta testabile senza rete d'uscita, che era la ragione
del disegno precedente) e su fallimento si disfano i **soli marcatori**, non le misure:
asset in ALERT → ri-allerta l'ora dopo; lock MAINT/ALERT → flag azzerati **ma le ore continuano a
correre**, cosi' una manutenzione che sfora la grazia sale ad ALERT anche col trasporto giu';
lock RIENTRATO → stato ripristinato, perche' il rientro si annuncia una volta sola.
`notify()` accetta `tentativi` (venue_watch: 3) e l'esito finisce nel log del cron.
⚠️ Resta scoperto **ogni altro chiamante di `notify()`**: la disciplina e' oggi solo in venue_watch.
## 5. L'analista del 27/08, e la riga di diagnosi che mancava
La voce del 27/08 era senza analisi. Causa, dal transcript della sessione headless:
`Failed to authenticate: OAuth session expired and could not be refreshed`, exit 1 alle
`00:37:00.98Z`. La meccanica aveva retto (nessuna analisi vecchia spacciata per nuova, esito nel DB,
notifica partita) ma il motivo registrato era `uscita 1: ` — vuoto: `interroga()` leggeva il solo
**stderr**, e la CLI aveva scritto su **stdout**. Riparato (`motivo_uscita`), analisi recuperata.
Guasto **transitorio**: il refresh token era valido, unico caso su 24 sessioni.
## 6. Fisco: la domanda (a) ha una risposta alla fonte
Circolare AdE **30/E del 27/10/2023**, letta direttamente dal PDF ufficiale. **I derivati con
sottostante cripto stanno in `c-quater` → 26%**, non in `c-sexies` → 33%, e la circolare dice
esplicitamente che la riforma 2023 non sposta nulla. Il **collaterale** sconta il **2‰** al 31/12
(intermediario non residente → imposta sul valore delle cripto-attivita', ~$4/anno a questo
capitale). E la conversione **USDC→USDE non e' fattispecie realizzativa**. Dettaglio e citazioni
verbatim in CLAUDE.md §5.4. La (b), i payout di una prop firm, **resta aperta**.
## Cosa cambia
- `CLAUDE.md`: §3 nuova riga (GTAA01 rinviato a $15k) · §5.2 risolto · §5.4 riscritto · §5.13 nuovo
debito (la fase che ruota, quantificata e innocua oggi).
- `src/live/journal.py`: `SOGLIE_CAPITALE` + regola `soglia_capitale`.
- `src/live/venue_watch.py`, `src/live/notifier.py`, `scripts/live/venue_watch.py`: commit dopo l'invio.
- `src/live/analista.py`: `motivo_uscita` da stdout E stderr.
- `tests/test_gtaa_band_gate.py`: gate (A) ritirato, motivo e causa congelati.
- Script nuovi: `r0828_gtaa_band_phase.py`, `r0828_gtaa_band_median_phase.py`, `r0828_senza_gtaa.py`.
**Suite: 789 passati, 0 falliti.**