From 7eb0f67956bc1d35de950dea806c801bb36615c9 Mon Sep 17 00:00:00 2001 From: Adriano Dal Pastro Date: Tue, 23 Jun 2026 16:41:52 +0000 Subject: [PATCH] feat(dashboard): show SKH01 sleeve in 4-sleeve portfolio view MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit active_sleeves() already feeds the per-sleeve table & combined metrics, so SKH01 appears automatically. Manual touch-ups: title/docstring -> +SKH01; position label is now sleeve-aware (the None fallback used to mislabel every pos-fn-less sleeve as XS01's "book 19 gambe" — now XS01/SKH01/VRP01 get correct labels); footer note adds SKH01 (quasi-orthogonal @25%, FULL Sharpe 1.68->2.13, DD 14->8%, research/forward-monitor). Co-Authored-By: Claude Opus 4.8 (1M context) --- src/live/dashboard.py | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) diff --git a/src/live/dashboard.py b/src/live/dashboard.py index 1803147..a913e48 100644 --- a/src/live/dashboard.py +++ b/src/live/dashboard.py @@ -1,4 +1,4 @@ -"""DASHBOARD web del portafoglio attivo (TP01 + XS01) — monitoraggio PAPER, stdlib only. +"""DASHBOARD web del portafoglio attivo (TP01 + XS01 + VRP01 + SKH01) — monitoraggio PAPER, stdlib only. Mostra: metriche (FULL/HOLD Sharpe, DD, CAGR), per-sleeve, posizioni correnti, equity (backtest + paper forward da scripts/live/paper_portfolio.py), ultima data dato. Nessuna auth -> solo rete @@ -87,7 +87,19 @@ def html(): yrs = "".join(f"{y}: {v['ret']*100:+.0f}%" for y, v in sorted(d["yearly"].items())) pos = "" for sl, p in d["positions"].items(): - pos += f"{sl}{'flat (in cash)' if p == {'BTC': 0.0, 'ETH': 0.0} else (p if p is not None else 'stat-mode (book 19 gambe)')}" + if p == {'BTC': 0.0, 'ETH': 0.0}: + ptxt = 'flat (in cash)' + elif p is not None: + ptxt = str(p) + elif 'XS01' in sl: + ptxt = 'stat-mode (book 19 gambe)' + elif 'SKH' in sl: + ptxt = 'forward-monitor (segnale dual-TF, no pos-fn)' + elif 'VRP' in sl: + ptxt = 'stat-mode (book opzioni settimanale)' + else: + ptxt = 'n/d' + pos += f"{sl}{ptxt}" pp = d["paper"] if pp: days = (pd.Timestamp(pp["last"]) - pd.Timestamp(pp["start"])).days @@ -186,7 +198,7 @@ th{{color:#8a93a0;font-weight:500}}.y{{display:inline-block;background:#161b22;b .warn{{color:#f1c40f;font-size:12px}} .section{{font-size:15px;font-weight:700;letter-spacing:.06em;text-transform:uppercase;margin:34px 0 14px;padding:10px 14px;border-radius:9px;background:#12181f;border-left:5px solid #2ecc71;color:#d7dee6}} .section.live{{border-left-color:#e74c3c;background:#1c1316;color:#f0c4c4}} -

PythagorasGoal — Portafoglio attivo (TP01 + XS01 + VRP01)

+

PythagorasGoal — Portafoglio attivo (TP01 + XS01 + VRP01 + SKH01)

monitor · v{d['version']} · ultimo dato {d['last_data']} · esecuzione REALE non attiva (solo micro-test)
PAPER — simulato (backtest + forward virtuale)
@@ -216,7 +228,7 @@ th{{color:#8a93a0;font-weight:500}}.y{{display:inline-block;background:#161b22;b
Shadow TP01 (cosa farebbe ORA sul conto reale, nessun ordine inviato):
{shadow_html}

Trades REALI eseguiti su Deribit

{live_trows}
data/ora UTCstrum.diramountprezzofee USDC
-

⚠️ Paper/monitor. XS01 e' STAT-MODE (book a 19 gambe market-neutral, non eseguibile a €2k, storia ~2.5 anni). VRP01 = lead short-vol MODELLATO (non deploy pieno). TP01 e' l'unico deployable pieno: lo "Shadow live" mostra cosa farebbe sul mainnet, ma NON invia ordini.

+

⚠️ Paper/monitor. XS01 e' STAT-MODE (book a 19 gambe market-neutral, non eseguibile a €2k, storia ~2.5 anni). VRP01 = lead short-vol MODELLATO (non deploy pieno). SKH01 (Skyhook dual-TF regime+breakout, BTC/ETH) = diversificatore quasi-ortogonale (corr ~0.09) aggiunto @25%: alza il FULL Sharpe del portafoglio 1.68→2.13 e dimezza il DD (14→8%) — RESEARCH/forward-monitor (book a 230m, causalita' verificata su harness ma costi reali e codice d'esecuzione da validare prima del deploy). TP01 e' l'unico deployable pieno: lo "Shadow live" mostra cosa farebbe sul mainnet, ma NON invia ordini.

"""