Analisi: protezione nei cali lenti — peso SKH01 vs TP01 long-short #41

Open
opened 2026-10-08 20:28:28 +00:00 by Adriano · 5 comments
Owner

ESITO: richiesta
RIF: gitea:Adriano/PythagorasGoal
COSA: misurare se alzare il peso SKH01 o rendere TP01 long-short protegge il libro nei cali lenti, dove oggi resta long.

Perché (diagnosi 08/10/2026, sola lettura, operatore-finanziario su Fable 5.1)

  • 07/10: delta equity −106,75 USDC (trades.db journal 2026-10-07; realizzato −0,42, il resto è mark-to-market). 08/10 fino 19:47Z: −85,76. Dal 25/09, versamento del 01/10 escluso: −157,34. DD dal massimo 7.553,12 (02/10 13:47Z): −3,1 %.
  • Nessun difetto: 24 giri/giorno, 0 Traceback dal 25/09, feed SKH fresco, ombra TradingBook identica (confronta_giornata.py --giorno 2026-10-07 → 0 divergenze non spiegate).
  • SKH01 flat dal 25/09 09:47Z: ptn_short richiede close HTF < minimo low 45 barre HTF (~21,6 g), ancorato a 74.920 BTC / 2.357,6 ETH (15-17/09). Distanza minima nel calo: +10,5 % BTC, +8,8 % ETH. buz_vola ETH 12-33 dal 04/10 (regime off): un calo lento abbassa l'ATR.
  • TP01: blend TSMOM 30/90/180 g = 1,0 su entrambi; tp_frac 0,51 BTC / 0,46 ETH solo per vol-targeting (0,20 / vol 30 g 39-43 %). long_only=True.
  • Aritmetica src/live/book.py r.262: net = 0,5·E·(0,75·tp_frac + 0,25·skh_sign) → con skh_sign −1 il libro resta net long finché tp_frac > 1/3. Non documentato.
  • CLAUDE.md r.193-196: protezione SKH01 misurata su finestre con giorni ≤ −5 % (8/8 dal 2022); le 2 finestre perse sono «TP01 long dentro un trend non ancora girato». È il caso 25/09→08/10.

Da misurare

  1. Peso SKH01 25 → 37,5 % (CLAUDE.md r.199-201: 12/12 episodi, maxDD 12,1 % vs 9,4 %; gate weights_tilt_null fallito in-sample; cache segnali ferma al 25/07). Rifare con cache aggiornata, e aggiungere griglia 25/30/37,5/50.
  2. TP01 long-short (HEADLINE_LS_1H, trend_portfolio.py r.49-52, Sharpe ~1,0, scartata per DD). Rimisurare anche varianti: short solo con blend ≤ −1/3, short a dose ridotta.
  3. Scenario di prova: cali lenti senza giorni ≤ −5 % (definire: es. −8 % in 10-20 g con ATR non in crescita), oltre ai crolli della misura r0909. Elencare le finestre storiche e il P&L del libro attuale vs varianti su ognuna.
  4. Documentazione, comunque vada: in CLAUDE.md §1 e nel docstring di src/live/book.py, che lo short SKH01 non inverte il libro se tp_frac > 1/3, e che la misura 8/8 vale per crolli con giorni ≤ −5 %.

Criterio di fatto

Rapporto in docs/ con, per ogni variante: CAGR, Sharpe, maxDD, P&L sulle finestre «calo lento» e sulle finestre di crollo, esito dei gate esistenti (weights_tilt_null e gli altri del §4), raccomandazione con banda. Nessuna modifica a config/live.json né al codice live in questa issue: l'accensione è una decisione separata di Adriano.

NON TOCCARE: config/live.json, execution_enabled, cron del libro, src/live/ (salvo docstring del punto 4).
FONTI: logs/cron_book.log, data/live/book_executions.jsonl r.89-257, data/live/trades.db, src/strategies/skyhook.py r.164-181, src/strategies/trend_portfolio.py r.40-115, src/portfolio/sleeves.py r.239-289, /opt/AI-OS/automations/TradingBook/data/live/ombra.jsonl.

ESITO: richiesta RIF: gitea:Adriano/PythagorasGoal COSA: misurare se alzare il peso SKH01 o rendere TP01 long-short protegge il libro nei cali lenti, dove oggi resta long. ## Perché (diagnosi 08/10/2026, sola lettura, operatore-finanziario su Fable 5.1) - 07/10: delta equity −106,75 USDC (`trades.db` journal 2026-10-07; realizzato −0,42, il resto è mark-to-market). 08/10 fino 19:47Z: −85,76. Dal 25/09, versamento del 01/10 escluso: −157,34. DD dal massimo 7.553,12 (02/10 13:47Z): −3,1 %. - Nessun difetto: 24 giri/giorno, 0 Traceback dal 25/09, feed SKH fresco, ombra TradingBook identica (`confronta_giornata.py --giorno 2026-10-07` → 0 divergenze non spiegate). - SKH01 flat dal 25/09 09:47Z: `ptn_short` richiede close HTF < minimo low 45 barre HTF (~21,6 g), ancorato a 74.920 BTC / 2.357,6 ETH (15-17/09). Distanza minima nel calo: +10,5 % BTC, +8,8 % ETH. `buz_vola` ETH 12-33 dal 04/10 (regime off): un calo lento abbassa l'ATR. - TP01: blend TSMOM 30/90/180 g = 1,0 su entrambi; tp_frac 0,51 BTC / 0,46 ETH solo per vol-targeting (0,20 / vol 30 g 39-43 %). `long_only=True`. - Aritmetica `src/live/book.py` r.262: `net = 0,5·E·(0,75·tp_frac + 0,25·skh_sign)` → con skh_sign −1 il libro resta net long finché tp_frac > 1/3. Non documentato. - `CLAUDE.md` r.193-196: protezione SKH01 misurata su finestre con giorni ≤ −5 % (8/8 dal 2022); le 2 finestre perse sono «TP01 long dentro un trend non ancora girato». È il caso 25/09→08/10. ## Da misurare 1. **Peso SKH01** 25 → 37,5 % (CLAUDE.md r.199-201: 12/12 episodi, maxDD 12,1 % vs 9,4 %; gate `weights_tilt_null` fallito in-sample; cache segnali ferma al 25/07). Rifare con cache aggiornata, e aggiungere griglia 25/30/37,5/50. 2. **TP01 long-short** (`HEADLINE_LS_1H`, trend_portfolio.py r.49-52, Sharpe ~1,0, scartata per DD). Rimisurare anche varianti: short solo con blend ≤ −1/3, short a dose ridotta. 3. **Scenario di prova**: cali lenti senza giorni ≤ −5 % (definire: es. −8 % in 10-20 g con ATR non in crescita), oltre ai crolli della misura r0909. Elencare le finestre storiche e il P&L del libro attuale vs varianti su ognuna. 4. Documentazione, comunque vada: in `CLAUDE.md` §1 e nel docstring di `src/live/book.py`, che lo short SKH01 non inverte il libro se tp_frac > 1/3, e che la misura 8/8 vale per crolli con giorni ≤ −5 %. ## Criterio di fatto Rapporto in `docs/` con, per ogni variante: CAGR, Sharpe, maxDD, P&L sulle finestre «calo lento» e sulle finestre di crollo, esito dei gate esistenti (`weights_tilt_null` e gli altri del §4), raccomandazione con banda. Nessuna modifica a `config/live.json` né al codice live in questa issue: l'accensione è una decisione separata di Adriano. NON TOCCARE: `config/live.json`, `execution_enabled`, cron del libro, `src/live/` (salvo docstring del punto 4). FONTI: `logs/cron_book.log`, `data/live/book_executions.jsonl` r.89-257, `data/live/trades.db`, `src/strategies/skyhook.py` r.164-181, `src/strategies/trend_portfolio.py` r.40-115, `src/portfolio/sleeves.py` r.239-289, `/opt/AI-OS/automations/TradingBook/data/live/ombra.jsonl`.
Adriano added the sviluppo label 2026-10-08 20:28:29 +00:00
Author
Owner

ESITO: richiesta — analisi del passo 1 (Opus 5.5, daitarn), 08/10/2026
RIF: gitea:Adriano/PythagorasGoal#41
COSA: piano di misura in copia isolata; nessun commit, ramo o worktree del repo vivo (issue prendi rifiuta il repo per regola).

Dove si lavora

  • Copia isolata: goldrake:~/lavoro/pg41-analisi = git archive bebfa63 + data/raw e data/_cache copiati il 08/10 20:3xZ (feed fino al 08/10). Non è un repo git.
  • Interprete: /opt/docker/PythagorasGoal/.venv/bin/python, lanciato con cwd nella copia e nice -n 19 (4 core, cron vivo al :47).
  • Script e uscite: ~/lavoro/pg41-analisi/out/. Mai scritture in /opt/docker/PythagorasGoal.
  • VERIFICATO: _tp01_returns() e _skyhook_returns() dalla copia → 2019-03-14…2026-10-08, 2766/2765 giorni, 1,9 s.

Lente (dichiarata, uguale a r0909)

Sleeve di ricerca canonici giornalieri, fee 0,10 % RT, funding non modellato, SKH01 marcato all'uscita. Libro = W_TP01·tp + W_SKH·skh (combinazione lineare: ignora il risparmio di fee del netting). HOLDOUT 2025-01-01 (src/portfolio/portfolio.py r.21).
⚠️ Il gate weights_tilt_null del 26/07 è fallito sulla condizione in-sample (pre-2025): dati nuovi cambiano solo l'hold-out, quindi la ricostruzione della cache intra-bin (r0726_skh_sigcache.py, ~17 min per tabella × 16 = ~4,5 h) da sola non può ribaltare (1). Si rifà solo se la lente canonica indica un cambio che valga la spesa.

Unità (un agente Sonnet ciascuna)

U1 — peso SKH01 (out/u1_pesi.py)

  • Griglia w_skh ∈ {0,00, 0,10, 0,20, 0,25, 0,30, 0,375, 0,50}, w_tp = 1 − w_skh.
  • Per ciascuna: CAGR, Sharpe, maxDD su FULL, IS (< 2025-01-01), HOLD (≥ 2025-01-01).
  • weights_tilt_null({tp,skh}, {0,75/0,25}, proposto) per 0,30 / 0,375 / 0,50, k_seen = 7 (griglia vista).
  • Controllo M23: 37,5/62,5 deve riprodurre maxDD 12,1 % vs 9,4 % (CLAUDE.md r.199); se non riproduce, si dichiara e si spiega.

U2 — TP01 long-short (out/u2_tp01_ls.py)

  • Varianti su barre 1d (come CANONICAL), solo long_only e lato short cambiano: lf (riferimento, bit-exact con _tp01_returns), ls_pieno (long_only=False), ls_tutti_neg (short solo con blend = −1, cioè 3/3 orizzonti negativi), ls_mezza (lato short × 0,5).
  • Nota: con 3 orizzonti il blend vale {−1, −1/3, 1/3, 1}, quindi «short con blend ≤ −1/3» coincide con ls_pieno.
  • Libro 75/25 con SKH01 per ogni variante; metriche FULL/IS/HOLD; maxDD; quota di giorni short.
  • Gate: cercare in CLAUDE.md §3-§4 il gate applicabile a un cambio di strategia e applicarlo; se non c'è, delta Sharpe IS e HOLD appaiati, dichiarando k_seen = 3.

U3 — cali lenti (out/u3_cali_lenti.py, dopo U1 e U2)

  • Definizioni scritte ORA, prima dei numeri:
    • indice = 50/50 BTC/ETH ribilanciato ogni giorno (indice_5050 di r0909);
    • calo lento = finestra di 20 giorni con indice cumulato ≤ −8 % e nessun giorno ≤ −5 %; finestre non sovrapposte, greedy dal peggiore, tutte quelle che passano;
    • sensibilità: soglia −12 %;
    • crolli = le 12 peggiori finestre di r0909 (riferimento).
  • Per finestra: indice, libro attuale, ogni colonna di U1 e U2. Riassunto: mediana, quante positive, peggiore. Riga di controllo sul caso vivo 25/09→08/10.

Contratto fra le unità

  • File out/serie_u1.parquet e out/serie_u2.parquet: DataFrame, indice giornaliero UTC tz-aware, valori = rendimento netto giornaliero del libro.
  • Colonne U1: libro_attuale, skh_w0.00, skh_w0.10, skh_w0.20, skh_w0.30, skh_w0.375, skh_w0.50.
  • Colonne U2: libro_attuale, ls_pieno, ls_tutti_neg, ls_mezza.
  • libro_attuale = 0,75·_tp01_returns() + 0,25·_skyhook_returns(), identico nei due file (U3 lo verifica con assert).
  • Ogni script stampa un rapporto testuale e salva out/rapporto_uN.txt.

Punto 4 dell'issue (documentazione)

Richiede un commit in PythagorasGoal: fuori da questa analisi, si chiede ad Adriano a fine misura.

NON TOCCARE: /opt/docker/PythagorasGoal/**, config/live.json, cron, scripts/live/, git di qualunque copia.
TEST: assert bit-exact lf = _tp01_returns(); assert libro_attuale uguale in U1 e U2; riproduzione M23 dei numeri di CLAUDE.md r.193-201.
PROSSIMO: U1 e U2 in parallelo, poi U3, poi revisione Fable, poi rapporto qui.

ESITO: richiesta — analisi del passo 1 (Opus 5.5, daitarn), 08/10/2026 RIF: gitea:Adriano/PythagorasGoal#41 COSA: piano di misura in copia isolata; nessun commit, ramo o worktree del repo vivo (`issue prendi` rifiuta il repo per regola). ## Dove si lavora - Copia isolata: `goldrake:~/lavoro/pg41-analisi` = `git archive bebfa63` + `data/raw` e `data/_cache` copiati il 08/10 20:3xZ (feed fino al 08/10). Non è un repo git. - Interprete: `/opt/docker/PythagorasGoal/.venv/bin/python`, lanciato con cwd nella copia e `nice -n 19` (4 core, cron vivo al :47). - Script e uscite: `~/lavoro/pg41-analisi/out/`. Mai scritture in `/opt/docker/PythagorasGoal`. - VERIFICATO: `_tp01_returns()` e `_skyhook_returns()` dalla copia → 2019-03-14…2026-10-08, 2766/2765 giorni, 1,9 s. ## Lente (dichiarata, uguale a r0909) Sleeve di ricerca canonici giornalieri, fee 0,10 % RT, funding non modellato, SKH01 marcato all'uscita. Libro = `W_TP01·tp + W_SKH·skh` (combinazione lineare: ignora il risparmio di fee del netting). HOLDOUT 2025-01-01 (`src/portfolio/portfolio.py` r.21). ⚠️ Il gate `weights_tilt_null` del 26/07 è fallito sulla condizione **in-sample** (pre-2025): dati nuovi cambiano solo l'hold-out, quindi la ricostruzione della cache intra-bin (`r0726_skh_sigcache.py`, ~17 min per tabella × 16 = ~4,5 h) da sola non può ribaltare (1). Si rifà solo se la lente canonica indica un cambio che valga la spesa. ## Unità (un agente Sonnet ciascuna) **U1 — peso SKH01** (`out/u1_pesi.py`) - Griglia w_skh ∈ {0,00, 0,10, 0,20, 0,25, 0,30, 0,375, 0,50}, w_tp = 1 − w_skh. - Per ciascuna: CAGR, Sharpe, maxDD su FULL, IS (< 2025-01-01), HOLD (≥ 2025-01-01). - `weights_tilt_null({tp,skh}, {0,75/0,25}, proposto)` per 0,30 / 0,375 / 0,50, `k_seen` = 7 (griglia vista). - Controllo M23: 37,5/62,5 deve riprodurre maxDD 12,1 % vs 9,4 % (CLAUDE.md r.199); se non riproduce, si dichiara e si spiega. **U2 — TP01 long-short** (`out/u2_tp01_ls.py`) - Varianti su barre 1d (come CANONICAL), solo `long_only` e lato short cambiano: `lf` (riferimento, bit-exact con `_tp01_returns`), `ls_pieno` (long_only=False), `ls_tutti_neg` (short solo con blend = −1, cioè 3/3 orizzonti negativi), `ls_mezza` (lato short × 0,5). - Nota: con 3 orizzonti il blend vale {−1, −1/3, 1/3, 1}, quindi «short con blend ≤ −1/3» coincide con `ls_pieno`. - Libro 75/25 con SKH01 per ogni variante; metriche FULL/IS/HOLD; maxDD; quota di giorni short. - Gate: cercare in CLAUDE.md §3-§4 il gate applicabile a un cambio di strategia e applicarlo; se non c'è, delta Sharpe IS e HOLD appaiati, dichiarando k_seen = 3. **U3 — cali lenti** (`out/u3_cali_lenti.py`, dopo U1 e U2) - Definizioni scritte ORA, prima dei numeri: - indice = 50/50 BTC/ETH ribilanciato ogni giorno (`indice_5050` di r0909); - calo lento = finestra di 20 giorni con indice cumulato ≤ −8 % e **nessun** giorno ≤ −5 %; finestre non sovrapposte, greedy dal peggiore, **tutte** quelle che passano; - sensibilità: soglia −12 %; - crolli = le 12 peggiori finestre di r0909 (riferimento). - Per finestra: indice, libro attuale, ogni colonna di U1 e U2. Riassunto: mediana, quante positive, peggiore. Riga di controllo sul caso vivo 25/09→08/10. ## Contratto fra le unità - File `out/serie_u1.parquet` e `out/serie_u2.parquet`: DataFrame, indice giornaliero UTC tz-aware, valori = rendimento netto giornaliero **del libro**. - Colonne U1: `libro_attuale`, `skh_w0.00`, `skh_w0.10`, `skh_w0.20`, `skh_w0.30`, `skh_w0.375`, `skh_w0.50`. - Colonne U2: `libro_attuale`, `ls_pieno`, `ls_tutti_neg`, `ls_mezza`. - `libro_attuale` = 0,75·`_tp01_returns()` + 0,25·`_skyhook_returns()`, identico nei due file (U3 lo verifica con assert). - Ogni script stampa un rapporto testuale e salva `out/rapporto_uN.txt`. ## Punto 4 dell'issue (documentazione) Richiede un commit in PythagorasGoal: fuori da questa analisi, si chiede ad Adriano a fine misura. NON TOCCARE: `/opt/docker/PythagorasGoal/**`, `config/live.json`, cron, `scripts/live/`, git di qualunque copia. TEST: assert bit-exact `lf` = `_tp01_returns()`; assert `libro_attuale` uguale in U1 e U2; riproduzione M23 dei numeri di CLAUDE.md r.193-201. PROSSIMO: U1 e U2 in parallelo, poi U3, poi revisione Fable, poi rapporto qui.
Author
Owner

ADDENDUM analisi (Adriano: «ricordati dello shadow»)

  • Casa del codice di ricerca e del rapporto: gitea:Adriano/TradingBook (stesso codice, toccabile), commit da worktree in goldrake:~/lavoro, mai dal working tree /opt/AI-OS/automations/TradingBook (P16: il cron dell ombra gira da li). Issue gemella su TradingBook al momento del commit.
  • Una variante che passa i gate NON va al vivo: prima forward-test in ombra (token Deribit sola lettura, #19). L ombra attuale serve al confronto vivo/ombra (confronta_giornata.py): una variante va in una seconda istanza d ombra o con confronto dichiarato, da decidere nel rapporto.
  • Il rapporto aggiunge per ogni variante: cosa avrebbe fatto l ombra dal 25/09 (posizioni giorno per giorno) contro il vivo.
ADDENDUM analisi (Adriano: «ricordati dello shadow») - Casa del codice di ricerca e del rapporto: gitea:Adriano/TradingBook (stesso codice, toccabile), commit da worktree in goldrake:~/lavoro, mai dal working tree /opt/AI-OS/automations/TradingBook (P16: il cron dell ombra gira da li). Issue gemella su TradingBook al momento del commit. - Una variante che passa i gate NON va al vivo: prima forward-test in ombra (token Deribit sola lettura, #19). L ombra attuale serve al confronto vivo/ombra (confronta_giornata.py): una variante va in una seconda istanza d ombra o con confronto dichiarato, da decidere nel rapporto. - Il rapporto aggiunge per ogni variante: cosa avrebbe fatto l ombra dal 25/09 (posizioni giorno per giorno) contro il vivo.
Author
Owner

ESITO: fatto, rivisto da Fable 5.1 (rilievi R1-R6 applicati) — misure di gitea:Adriano/PythagorasGoal#41, 08/10/2026
RIF: gitea:Adriano/PythagorasGoal#41 · analisi #41 (comment)
COSA: nei cali lenti nessuna variante protegge; TP01 long-short peggiora il libro ed è scartato; un peso SKH01 più alto non è giustificato (sulla lente intra-bin è dentro il plateau = rumore, e SKH01 è lo sleeve più sensibile alle fee e il meno affidabile al LOO). Nessun cambio raccomandato.

Copia di lavoro: goldrake:~/lavoro/pg41-analisi (export bebfa63 + data/raw, data/_cache del 08/10). Script e rapporti in out/. Ogni script è stato rilanciato da Opus dopo l'agente: uscite identiche (U1, U2 ricalcolati; U3 rilanciato senza cache, diff vuoto; U4 diff vuoto).
Lente principale: sleeve canonici giornalieri (r0909), fee 0,10 % RT, funding non modellato, SKH01 marcato all'uscita. IS < 2025-01-01, HOLD ≥ 2025-01-01.

U1 — peso SKH01, lente canonica (out/u1_pesi.py, out/rapporto_u1.txt)

w_skh FULL CAGR / Sh / maxDD IS Sh HOLD CAGR / Sh / maxDD
0,00 16,4 % / 1,31 / −14,3 % 1,49 4,7 % / 0,54 / −7,5 %
0,25 (vivo) 21,1 % / 1,80 / −9,4 % 1,91 12,7 % / 1,40 / −6,2 %
0,30 22,0 % / 1,85 / −9,3 % 1,94 14,3 % / 1,52 / −6,1 %
0,375 23,3 % / 1,89 / −9,6 % 1,96 16,8 % / 1,65 / −6,1 %
0,50 25,5 % / 1,87 / −10,7 % 1,90 21,0 % / 1,76 / −6,0 %
0,625 (info) 27,6 % / 1,78 / −12,1 % 1,79 25,2 % / 1,79 / −6,2 %
  • weights_tilt_null (k_seen 7): 0,30 PASSA (Δ IS +0,036, pctl 27,4); 0,375 PASSA (+0,052, 34,0); 0,50 FALLISCE (Δ IS −0,0047).
  • M23: riproduce CLAUDE.md r.199 (maxDD 9,42 % vs 12,11 %).
  • k_seen: la riga 0,625 è stata guardata sull'HOLD; con k_seen 8 la soglia va da 87,5 a 88,9, verdetto invariato.

U4 — stesso gate sulla lente intra-bin (path live), 8 offset (out/u4_gate_ancore.py)

  • Il rilancio di r0726_reeval_live_weight.py riproduce il 26/07: 0,25→0,35 Δ IS −0,0026, gate False. Ma r0726 calcola il gate sul solo offset 000.
  • Su tutti gli 8 offset (k_seen 9):
w gate passa Δ IS mediana [min, max] Δ HOLD mediana
0,30 7/8 +0,019 [−0,033, +0,079] +0,068
0,35 5/8 +0,023 [−0,076, +0,135] +0,121
0,375 5/8 +0,020 [−0,101, +0,155] +0,142
0,50 3/8 −0,034 +0,207
  • L'offset 540 è contrario su ogni w; lo 000 fallisce di poco a 0,35-0,375.
  • Verdetto principale di r0726 sulla stessa lente: plateau entro 0,05 di Sharpe [0,25-0,50], il peso vivo è dentro: cambiare sarebbe rumore (0,30 vale +0,021 FULL mediano). Sulla lente canonica invece 0,25 (Sh 1,80) sta fuori dal plateau (soglia 1,84): le due lenti si contraddicono, e la lente di decisione del progetto è l'intra-bin.
  • A 0,35-0,375 i 5/8 sono 6/8 sulla condizione Δ IS e 7/8 sulla pctl, falliscono su offset diversi; su off090, off540, off630 lo Sharpe HOLD non è monotono in w e il pctl boccia da solo (off630: pctl 92,2 e 98,0).
  • Limiti: la cache intra-bin finisce al 05/06-18/07/2026 secondo l'offset (HOLD 521-564 giorni contro 646); nella coda dell'HOLD il libro è TP01 al 100 % per 82-125 giorni identici fra tilt (Δ HOLD diluito, non distorto).

U2 — TP01 long-short (out/u2_tp01_ls.py)

libro 75/25 FULL Sh / maxDD ΔSh IS ΔSh HOLD gate iso-vol marginal_vs_tp01
lf (vivo) 1,80 / −9,4 % — — — —
ls_pieno 1,34 / −14,4 % −0,49 −0,30 FAIL NEUTRAL
ls_tutti_neg 1,34 / −12,6 % −0,46 −0,44 FAIL NEUTRAL
ls_mezza 1,61 / −11,5 % −0,21 −0,09 FAIL REDUNDANT
  • Conferma lo scarto del 23/08 (§42, r0823_tp01_ls.py). Short il 40-42 % dei giorni, turnover quasi doppio, funding non modellato (quindi sottostima del costo).
  • Caso vivo 25/09→08/10: blend +1 su tutti i giorni, le quattro varianti hanno lo stesso target. Un'ombra con TP01 long-short non avrebbe fatto niente di diverso.

U3 — cali lenti (out/u3_cali_lenti.py)

Definizione fissata prima dei numeri: 20 giorni, indice 50/50 ≤ −8 %, nessun giorno ≤ −5 %, finestre non sovrapposte. Ne escono 7 (2019-10, 2023-05, 2024-06, 2025-06, 2025-12, 2026-03, 2026-05); 2 a −12 %.

colonna lento −8 %: Δ mediana vs vivo, meglio in crolli (12): Δ mediana, meglio in
libro vivo mediana −1,5 %, 0/7 positive —
skh 0,30 +0,00 pt, 4/7 +0,49 pt, 12/12
skh 0,375 +0,01 pt, 4/7 +1,23 pt, 12/12
skh 0,50 +0,02 pt, 4/7 +2,48 pt, 12/12
ls_pieno +0,32 pt, 4/7 +2,91 pt, 11/12
ls_mezza +0,16 pt, 4/7 +1,45 pt, 11/12
  • 2 finestre lente su 7 sono la rampa di un crollo r0909 (2019-10-30→11-18 tocca il crollo dal 2019-11-05; 2026-05-11→05-30 quello dal 2026-05-17): i cali lenti «puri» sono 5. Il segno (Δ ≈ 0) non cambia.
  • Nei cali lenti storici TP01 era già quasi piatto (esposizione media 0,10 contro 0,15 sull'intera storia): il libro perde poco e c'è poco da proteggere. Con +3 giorni di finestra (marcatura all'uscita di SKH01) l'ordine non cambia.
  • Il caso vivo non è un calo lento per definizione: indice −2,8 % in 14 giorni, TP01 esposto 0,47 perché il trend è ancora su su 30/90/180 giorni. È la classe «TP01 long dentro un trend non ancora girato» (CLAUDE.md r.195), e nessuna variante misurata la tocca: SKH01 non era in posizione, TP01-LS ha lo stesso target.

Conclusioni

  1. TP01 long-short: scartato. Peggiora Sharpe e maxDD in tutte le varianti, fallisce i gate del progetto, e sul caso vivo non cambia nulla.
  2. Peso SKH01: nessun cambio. Il gate passa sulla lente canonica e in 7/8 offset a 0,30, ma sulla lente intra-bin (path live) 0,25-0,50 è un plateau e la differenza è rumore per la regola del progetto. Contro l'aumento pesano due misure già nel repo: SKH01 è ~4× più sensibile di TP01 alle fee (−0,69 % vs −0,09 % di CAGR per bps/lato; regola decisa: sopra 10 bps si rivede PRIMA il peso di SKH01, verso il basso) ed è lo sleeve meno affidabile al LOO de-luckato (+0,142 FULL, positivo nel 91 % contro +0,390/100 % di TP01). Il beneficio misurato sta nei crolli (12/12, +0,49 pt mediani a 0,30), non nei cali lenti (≈ 0).
  3. La domanda dell'issue ha risposta negativa: nessuna delle due leve protegge nel tipo di calo in corso. Una protezione lì richiederebbe un'uscita più rapida dal trend (es. orizzonte corto nel blend o stop sull'esposizione TP01): è un filone nuovo, da aprire come issue separata se Adriano lo vuole, con la metodologia §8.

Prossimi passi proposti (nessuno eseguito)

  • Filone nuovo, deciso da Adriano il 08/10: copertura in opzioni condizionata (put spread acceso solo con TP01 carico), criterio «si paga da sola sulla storia» + «taglia la coda». Issue separata su gitea:Adriano/TradingBook.
  • Documentazione (punto 4 dell'issue): scrivere in CLAUDE.md §1 e nel docstring di src/live/book.py che lo short SKH01 non inverte il libro se tp_frac > 1/3 e che la protezione misurata vale per i crolli, non per i cali lenti. Richiede un commit in PythagorasGoal: decide Adriano.
  • Codice di ricerca e rapporto: da committare in gitea:Adriano/TradingBook (worktree in goldrake:~/lavoro), con issue gemella.

MANCA: banda a 24 ancore per TP01-LS (non rifatta: già nota dal §42); funding non modellato; cause degli offset 540 e 630 non indagate.

ESITO: fatto, rivisto da Fable 5.1 (rilievi R1-R6 applicati) — misure di gitea:Adriano/PythagorasGoal#41, 08/10/2026 RIF: gitea:Adriano/PythagorasGoal#41 · analisi https://git.tielogic.xyz/Adriano/PythagorasGoal/issues/41#issuecomment-11746 COSA: nei cali lenti nessuna variante protegge; TP01 long-short peggiora il libro ed è scartato; un peso SKH01 più alto non è giustificato (sulla lente intra-bin è dentro il plateau = rumore, e SKH01 è lo sleeve più sensibile alle fee e il meno affidabile al LOO). Nessun cambio raccomandato. Copia di lavoro: `goldrake:~/lavoro/pg41-analisi` (export bebfa63 + `data/raw`, `data/_cache` del 08/10). Script e rapporti in `out/`. Ogni script è stato rilanciato da Opus dopo l'agente: uscite identiche (U1, U2 ricalcolati; U3 rilanciato senza cache, `diff` vuoto; U4 `diff` vuoto). Lente principale: sleeve canonici giornalieri (r0909), fee 0,10 % RT, funding non modellato, SKH01 marcato all'uscita. IS < 2025-01-01, HOLD ≥ 2025-01-01. ## U1 — peso SKH01, lente canonica (`out/u1_pesi.py`, `out/rapporto_u1.txt`) | w_skh | FULL CAGR / Sh / maxDD | IS Sh | HOLD CAGR / Sh / maxDD | |---|---|---|---| | 0,00 | 16,4 % / 1,31 / −14,3 % | 1,49 | 4,7 % / 0,54 / −7,5 % | | 0,25 (vivo) | 21,1 % / 1,80 / −9,4 % | 1,91 | 12,7 % / 1,40 / −6,2 % | | 0,30 | 22,0 % / 1,85 / −9,3 % | 1,94 | 14,3 % / 1,52 / −6,1 % | | 0,375 | 23,3 % / 1,89 / −9,6 % | 1,96 | 16,8 % / 1,65 / −6,1 % | | 0,50 | 25,5 % / 1,87 / −10,7 % | 1,90 | 21,0 % / 1,76 / −6,0 % | | 0,625 (info) | 27,6 % / 1,78 / −12,1 % | 1,79 | 25,2 % / 1,79 / −6,2 % | - `weights_tilt_null` (k_seen 7): 0,30 PASSA (Δ IS +0,036, pctl 27,4); 0,375 PASSA (+0,052, 34,0); 0,50 FALLISCE (Δ IS −0,0047). - M23: riproduce CLAUDE.md r.199 (maxDD 9,42 % vs 12,11 %). - k_seen: la riga 0,625 è stata guardata sull'HOLD; con k_seen 8 la soglia va da 87,5 a 88,9, verdetto invariato. ## U4 — stesso gate sulla lente intra-bin (path live), 8 offset (`out/u4_gate_ancore.py`) - Il rilancio di `r0726_reeval_live_weight.py` riproduce il 26/07: 0,25→0,35 Δ IS −0,0026, gate False. Ma r0726 calcola il gate sul solo offset 000. - Su tutti gli 8 offset (k_seen 9): | w | gate passa | Δ IS mediana [min, max] | Δ HOLD mediana | |---|---|---|---| | 0,30 | **7/8** | +0,019 [−0,033, +0,079] | +0,068 | | 0,35 | 5/8 | +0,023 [−0,076, +0,135] | +0,121 | | 0,375 | 5/8 | +0,020 [−0,101, +0,155] | +0,142 | | 0,50 | 3/8 | −0,034 | +0,207 | - L'offset 540 è contrario su ogni w; lo 000 fallisce di poco a 0,35-0,375. - Verdetto principale di r0726 sulla stessa lente: **plateau entro 0,05 di Sharpe [0,25-0,50], il peso vivo è dentro: cambiare sarebbe rumore** (0,30 vale +0,021 FULL mediano). Sulla lente canonica invece 0,25 (Sh 1,80) sta fuori dal plateau (soglia 1,84): le due lenti si contraddicono, e la lente di decisione del progetto è l'intra-bin. - A 0,35-0,375 i 5/8 sono 6/8 sulla condizione Δ IS e 7/8 sulla pctl, falliscono su offset diversi; su off090, off540, off630 lo Sharpe HOLD non è monotono in w e il pctl boccia da solo (off630: pctl 92,2 e 98,0). - Limiti: la cache intra-bin finisce al 05/06-18/07/2026 secondo l'offset (HOLD 521-564 giorni contro 646); nella coda dell'HOLD il libro è TP01 al 100 % per 82-125 giorni identici fra tilt (Δ HOLD diluito, non distorto). ## U2 — TP01 long-short (`out/u2_tp01_ls.py`) | libro 75/25 | FULL Sh / maxDD | ΔSh IS | ΔSh HOLD | gate iso-vol | marginal_vs_tp01 | |---|---|---|---|---|---| | lf (vivo) | 1,80 / −9,4 % | — | — | — | — | | ls_pieno | 1,34 / −14,4 % | −0,49 | −0,30 | FAIL | NEUTRAL | | ls_tutti_neg | 1,34 / −12,6 % | −0,46 | −0,44 | FAIL | NEUTRAL | | ls_mezza | 1,61 / −11,5 % | −0,21 | −0,09 | FAIL | REDUNDANT | - Conferma lo scarto del 23/08 (§42, `r0823_tp01_ls.py`). Short il 40-42 % dei giorni, turnover quasi doppio, funding non modellato (quindi sottostima del costo). - Caso vivo 25/09→08/10: blend +1 su tutti i giorni, le quattro varianti hanno lo stesso target. Un'ombra con TP01 long-short non avrebbe fatto niente di diverso. ## U3 — cali lenti (`out/u3_cali_lenti.py`) Definizione fissata prima dei numeri: 20 giorni, indice 50/50 ≤ −8 %, nessun giorno ≤ −5 %, finestre non sovrapposte. Ne escono 7 (2019-10, 2023-05, 2024-06, 2025-06, 2025-12, 2026-03, 2026-05); 2 a −12 %. | colonna | lento −8 %: Δ mediana vs vivo, meglio in | crolli (12): Δ mediana, meglio in | |---|---|---| | libro vivo | mediana −1,5 %, 0/7 positive | — | | skh 0,30 | +0,00 pt, 4/7 | +0,49 pt, 12/12 | | skh 0,375 | +0,01 pt, 4/7 | +1,23 pt, 12/12 | | skh 0,50 | +0,02 pt, 4/7 | +2,48 pt, 12/12 | | ls_pieno | +0,32 pt, 4/7 | +2,91 pt, 11/12 | | ls_mezza | +0,16 pt, 4/7 | +1,45 pt, 11/12 | - 2 finestre lente su 7 sono la rampa di un crollo r0909 (2019-10-30→11-18 tocca il crollo dal 2019-11-05; 2026-05-11→05-30 quello dal 2026-05-17): i cali lenti «puri» sono 5. Il segno (Δ ≈ 0) non cambia. - Nei cali lenti storici TP01 era già quasi piatto (esposizione media 0,10 contro 0,15 sull'intera storia): il libro perde poco e c'è poco da proteggere. Con +3 giorni di finestra (marcatura all'uscita di SKH01) l'ordine non cambia. - Il caso vivo non è un calo lento per definizione: indice −2,8 % in 14 giorni, TP01 esposto 0,47 perché il trend è ancora su su 30/90/180 giorni. È la classe «TP01 long dentro un trend non ancora girato» (CLAUDE.md r.195), e nessuna variante misurata la tocca: SKH01 non era in posizione, TP01-LS ha lo stesso target. ## Conclusioni 1. **TP01 long-short: scartato.** Peggiora Sharpe e maxDD in tutte le varianti, fallisce i gate del progetto, e sul caso vivo non cambia nulla. 2. **Peso SKH01: nessun cambio.** Il gate passa sulla lente canonica e in 7/8 offset a 0,30, ma sulla lente intra-bin (path live) 0,25-0,50 è un plateau e la differenza è rumore per la regola del progetto. Contro l'aumento pesano due misure già nel repo: SKH01 è ~4× più sensibile di TP01 alle fee (−0,69 % vs −0,09 % di CAGR per bps/lato; regola decisa: sopra 10 bps si rivede PRIMA il peso di SKH01, verso il basso) ed è lo sleeve meno affidabile al LOO de-luckato (+0,142 FULL, positivo nel 91 % contro +0,390/100 % di TP01). Il beneficio misurato sta nei crolli (12/12, +0,49 pt mediani a 0,30), non nei cali lenti (≈ 0). 3. **La domanda dell'issue ha risposta negativa:** nessuna delle due leve protegge nel tipo di calo in corso. Una protezione lì richiederebbe un'uscita più rapida dal trend (es. orizzonte corto nel blend o stop sull'esposizione TP01): è un filone nuovo, da aprire come issue separata se Adriano lo vuole, con la metodologia §8. ## Prossimi passi proposti (nessuno eseguito) - Filone nuovo, deciso da Adriano il 08/10: **copertura in opzioni condizionata** (put spread acceso solo con TP01 carico), criterio «si paga da sola sulla storia» + «taglia la coda». Issue separata su gitea:Adriano/TradingBook. - Documentazione (punto 4 dell'issue): scrivere in `CLAUDE.md` §1 e nel docstring di `src/live/book.py` che lo short SKH01 non inverte il libro se tp_frac > 1/3 e che la protezione misurata vale per i crolli, non per i cali lenti. Richiede un commit in PythagorasGoal: decide Adriano. - Codice di ricerca e rapporto: da committare in gitea:Adriano/TradingBook (worktree in goldrake:~/lavoro), con issue gemella. MANCA: banda a 24 ancore per TP01-LS (non rifatta: già nota dal §42); funding non modellato; cause degli offset 540 e 630 non indagate.
Author
Owner

ESITO: richiesta
RIF: gitea:Adriano/TradingBook#36 (chiusa)
COSA: il filone opzioni proposto al punto «Prossimi passi» è misurato e REFUTATO 0/36: put spread acceso con TP01 carico non protegge in modo distinguibile dal rumore; nel caso vivo l innesco economico non scatta. Rapporto: TradingBook scripts/research/opz36/RAPPORTO.md (main fa9c76c).
MANCA: punto 4 di questa issue (documentazione in CLAUDE.md e book.py di PythagorasGoal) — decide Adriano.

ESITO: richiesta RIF: gitea:Adriano/TradingBook#36 (chiusa) COSA: il filone opzioni proposto al punto «Prossimi passi» è misurato e REFUTATO 0/36: put spread acceso con TP01 carico non protegge in modo distinguibile dal rumore; nel caso vivo l innesco economico non scatta. Rapporto: TradingBook scripts/research/opz36/RAPPORTO.md (main fa9c76c). MANCA: punto 4 di questa issue (documentazione in CLAUDE.md e book.py di PythagorasGoal) — decide Adriano.
Author
Owner

ESITO: bloccato
RIF: gitea:Adriano/PythagorasGoal#41
COSA: decisione di Adriano del 09/10/2026: nessun cambio al libro (pesi, TP01, coperture). Equity 7.356 USDC alle 12:00Z, −2,4 % dal massimo del 05/10, dentro il peggior calo storico a 20 giorni (−4,8 %).
ATTESA: attesa:adriano — punto 4 (documentazione in CLAUDE.md e src/live/book.py di PythagorasGoal), richiede un commit nel repo che non si tocca senza il suo via.

ESITO: bloccato RIF: gitea:Adriano/PythagorasGoal#41 COSA: decisione di Adriano del 09/10/2026: nessun cambio al libro (pesi, TP01, coperture). Equity 7.356 USDC alle 12:00Z, −2,4 % dal massimo del 05/10, dentro il peggior calo storico a 20 giorni (−4,8 %). ATTESA: attesa:adriano — punto 4 (documentazione in CLAUDE.md e src/live/book.py di PythagorasGoal), richiede un commit nel repo che non si tocca senza il suo via.
Adriano added the attesa:adriano label 2026-10-09 12:06:16 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Adriano/PythagorasGoal#41