# 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.**