Files
PythagorasGoal/docs/diary/2026-06-20-alt-strategies-100agent-sweep.md
Adriano Dal Pastro 5ac4e16af8 research(alt): sweep 104 strategie alternative su Deribit (153 agenti) + marginal scorer
Ondata di ricerca onesta a largo spettro su BTC/ETH+DVOL certificati: 104 ipotesi
distinte (11 famiglie), un agente-finder per ipotesi, verifica avversariale a 3
scettici sui promettenti, sintesi (153 agenti totali). Esito: NIENTE di nuovo regge
-> conferma del soffitto strutturale ~1.3 BTC/ETH-direzionale; lo stack
TP01+XS01+VRP01 resta imbattuto.

- altlib.py: harness condiviso vettoriale leak-free (eval_weights/study_weights,
  fee-sweep, both-asset + hold-out 2025+). Riproduce i numeri canonici di TP01.
- MARGINAL SCORER (study_marginal/marginal_vs_tp01): Sharpe INCREMENTALE vs baseline
  TP01 (corr, blend uplift OOS, alpha residua) + jackknife OOS (clean-year +
  drop-best-month). earns_slot = abs!=FAIL & ADDS & robust_oos. Smaschera gli overlay
  su TSMOM con PASS assoluti fasulli (CMB04, VOL11, ...) e il falso positivo KAMA
  (ADDS ma muore al jackknife).
- runs/*.py (104) script riproducibili per ipotesi; wf_altstrat.js workflow.
- Verdetto: 0 candidati deployabili; 2 LEAD fragili (VOL08, STA05_LS) da forward-monitor.
- test_marginal_scorer.py blocca baseline + invarianti. Suite: 32 verde.

Diario: docs/diary/2026-06-20-alt-strategies-100agent-sweep.md

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-20 19:50:39 +00:00

168 lines
12 KiB
Markdown
Raw Permalink 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.
# Sweep "strategie alternative su Deribit" — 104 ipotesi, 153 agenti (2026-06-20)
## Cosa
Ondata di ricerca onesta richiesta esplicitamente con >=100 agenti: **studiare strategie di
trading ALTERNATIVE** a TP01/XS01/VRP01 sull'universo certificato Deribit (**BTC/ETH** OHLCV +
**DVOL**). Catalogo di **104 ipotesi distinte** su 11 famiglie, **un agente-finder per ipotesi**,
poi **verifica avversariale a 3 scettici** per ogni finding promettente, poi sintesi. Totale
**153 agenti**, ~5.86M token, ~2h (workflow `scripts/research/alt/wf_altstrat.js`,
run `wf_0f3659fc-809`).
Famiglie: BRK (breakout/canali), TRD (trend non-TSMOM), MRV (mean-reversion gated), VOL (DVOL +
vol realizzata, Deribit-specific), XAS (cross-asset BTC/ETH: ratio/lead-lag/cointegrazione/RS),
SEA (stagionalità/ora-del-giorno), RSK (overlay difensivi), OPT (strutture opzioni modellate su
DVOL), MIC (microstruttura/candele), STA (ML walk-forward), CMB (combinazioni/filtri).
## Harness condiviso (nuovo, validato)
`scripts/research/alt/altlib.py` — libreria di valutazione ONESTA e **vettoriale** usata da tutti
gli agenti, così il no-look-ahead è strutturalmente impossibile:
- `eval_weights(df, target)`: posizione decisa con dati `<= close[i]`, **tenuta durante la barra
i+1** (lo shift lo fa la libreria), fee su turnover, **fee-sweep** 0.000.30% RT incorporato.
- `study_weights/study_signals`: ogni ipotesi girata su **entrambi gli asset** + **HOLD-OUT 2025+**
+ per-anno, con verdetto conservativo PASS/WEAK/FAIL (richiede min-asset full>=0.5 **e** hold>=0.2
**e** sopravvivenza fee).
- DVOL allineato **causalmente** (`merge_asof` backward), storia dal 2021-03.
- **Calibrazione:** la replica TSMOM riproduce i numeri noti leak-free di TP01 (BTC full 1.12 /
hold 0.31, DD 77%→23%); buy&hold correttamente FALLISCE l'hold-out (full 0.79, hold 0.37).
104 script riproducibili in `scripts/research/alt/runs/`.
## Esito — NIENTE di nuovo batte o diversifica lo stack esistente
Su 104 ipotesi: **16 promettenti**, **1 sola sopravvissuta** alla verifica avversariale (STA05),
e anch'essa **ridondante/non deployabile**. È il risultato pulito e atteso per un progetto al suo
**soffitto strutturale BTC/ETH-direzionale ~1.3** (già documentato). Lo stack
**TP01 (55%) + XS01 (25%) + VRP01 (20%) resta imbattuto** da questa ondata.
Il segnale ricorrente: decine di trend-follower prendono **FULL Sharpe alto (~1.01.3)** ma
**HOLD-OUT 2025 negativo** (Supertrend, ADX-EMA, Heikin-Ashi, Turtle, SMA200-regime,
Donchian+Chandelier, Kalman, OBV, body-ratio, ...): è **trend-beta del toro**, non alpha, e si
rompe nell'hold-out. I PASS apparenti erano quasi tutti **(a)** singola cella fortunata
sull'hold-out, oppure **(b)** TP01/TSMOM con un overlay attaccato sopra.
### L'unico sopravvissuto: STA05 — EWMA-cross ensemble vote (LEAD, non sleeve)
Voto d'insieme su 13 coppie EMA (fast {5,10,20,40} × slow {40,80,120,200}, fast<slow),
posizione = voto medio firmato, vol-target 20%/cap 2x, 1d. Verifica: **leak-free** (perturbazione
barre future = 0), **plateau** di parametri, **non** fortuna di un singolo anno (jackknife
drop-one-year 0.550.96), sopravvive fee a 0.30% RT. Ho rieseguito il **blend test** raccomandato
(50/50 BTC+ETH, mia stessa griglia di TP01, fee 0.10% RT):
| variante | FULL Sh | DD | HOLD Sh | corr→TP01 (full/hold) |
|---|---|---|---|---|
| TP01 (canonico, controllo) | **+1.30** | 14.3% | +0.31 | — |
| STA05 long-only | +1.24 | 16.3% | +0.21 | **0.93 / 0.94** → ridondante |
| STA05 **long-short** | +0.87 | 28.6% | **+0.86** | **0.71 / 0.53** |
Blend TP01+STA05_LS: `0.75·TP01 + 0.25·LS`**FULL 1.24, HOLD 0.31→0.59, DD 16.1%**;
`0.50/0.50` → FULL 1.13, **HOLD 0.75**, DD 18.8%.
**Lettura onesta (più precisa della sintesi del workflow, che lo aveva liquidato come "dominato
su ogni asse"):** la versione **long-only** è ridondante con TP01 (corr 0.94). La versione
**long-short** invece è solo moderatamente correlata (**0.53 nell'hold-out**) e **migliora
davvero l'hold-out del blend** (0.31→0.59 a peso 25%), al costo di un po' di FULL Sharpe
(1.30→1.24) e DD (14%→16%). MA: l'hold-out è **solo 536 giorni** (include lo stub 2026 corto) →
classica trappola "bello OOS ma OOS breve", e standalone ha DD 28.6%. **Verdetto: LEAD da
monitorare forward, NON deploy, NON sleeve confermato.** Da rivalutare quando l'hold-out cresce.
## Famiglie confermate MORTE / ridondanti (negativi onesti)
- **BRK** breakout (Donchian/Keltner/Bollinger/ORB/NR7/inside-bar): ogni variante rompe l'hold-out
BTC; l'unico PASS (BRK04) è cella singola overfit con maxDD 63%.
- **TRD** trend non-TSMOM: tutto trend-beta del toro ridondante con TP01; i 4 PASS (TRD02/07/08/10)
sono fortuna di singola cella sull'hold-out, dominati dal TSMOM.
- **MRV** mean-reversion: la crypto **tende, non torna**; molti negativi anche a fee zero, **0 PASS**
→ conferma su dati certi la lezione v2.0.0 ("il fade è artefatto").
- **VOL** gate/overlay DVOL su TSMOM: ogni overlay (VOL03/04/08/09/11) è **peso morto netto-negativo**;
la parte robusta è sempre TP01 nudo, la componente DVOL/EWMA aggiunge anti-valore.
- **XAS** spread BTC/ETH (ratio/lead-lag/cointegrazione/RS/dual-mom): gli spread **tendono non
revertono** (negativi a fee zero); le "rotazioni" PASS (XAS03/04/09) sono TP01 travestito con
selezione fortunata sull'hold-out.
- **SEA** stagionalità: fee-killed a 1h, artefatti di regime a 1d, nessun hold-out cross-asset.
- **RSK** overlay di rischio (circuit breaker/kill-switch/DD-scaling/inverse-vol RP): o seguono il
prezzo (buy&hold travestito) o aggiungono frizione senza proteggere dove serve.
- **MIC** micro-pattern candele: hold-out crolla cross-asset; l'unico "survivor" MIC05 è l'artefatto
di **un singolo evento** (short del crash 2026-01-29 su ~13 trade).
- **STA** ML su feature di prezzo (Ridge/Logistic/RF/Kalman/SGD/AR1/k-means): nessun potere
predittivo OOS; l'unico PASS (STA05) è l'ensemble di trend = TP01.
- **CMB** combinazioni: ogni combo è TP01 più un filtro che distrugge valore.
- **OPT** strutture opzioni (modellate su DVOL ATM, niente skew): code severe (ETH maxDD 96% su
iron condor), **lead-only** al meglio → conferma la regola VRP01 "niente short-vol da modello in
deploy". Numeri tipo OPT02/OPT04 hold-out 2.4/1.96 sono artefatto del premio modellato + asset
asimmetrico (ETH fallisce) → giustamente NON promettenti.
## Lezioni metodologiche (azionabili)
1. **L'harness deve premiare lo Sharpe MARGINALE vs un baseline TP01, non lo Sharpe ASSOLUTO.**
`study_weights` valuta lo Sharpe assoluto: così ogni overlay-su-TSMOM **eredita** lo Sharpe di
trend di TP01 e prende un PASS fasullo (VOL03/04/08/09/11, CMB04/06). Per la prossima ondata:
valutare il **contributo incrementale** rispetto a TP01 nudo, così gli overlay non possono
ereditare un PASS.
2. **Prima di gradare PASS, esigere (a) un PLATEAU di parametri (non una cella isolata) e (b) un
jackknife drop-one-month / drop-best-day sull'hold-out.** Questi due check da soli hanno ucciso
**13 dei 14** falsi positivi in verifica avversariale.
3. La verifica avversariale a 3 scettici con angoli diversi (leak / overfit-robustezza /
plausibilità-economica-vs-TP01) ha funzionato: ha distinto i 15 falsi positivi dall'1 robusto.
## Raccomandazione
**Non aggiungere nulla di questa ondata al portafoglio live.** Lo spazio
**BTC/ETH-direzionale single-asset è esaurito**: ogni PASS era hold-out-fitting o un overlay su TP01.
Redirigere il budget di ricerca verso **meccanismi davvero diversi** dove il soffitto non morde:
espandere/monitorare forward **XS01** (cross-sectional sui 51 alt Hyperliquid certificati — l'unico
che abbia mai battuto il soffitto) e **VRP01 reale** (quando cerbero-bite cattura skew live + uno
stress). Tenere **STA05_LS** in lista LEAD per il forward-monitor dell'hold-out.
Artefatti: `scripts/research/alt/altlib.py`, `scripts/research/alt/runs/*.py` (104),
`scripts/research/alt/wf_altstrat.js`, verifica blend `/tmp/verify_sta05.py`.
## Follow-up — MARGINAL SCORER implementato (non più solo raccomandazione)
La lezione #1 ("valutare lo Sharpe MARGINALE vs baseline TP01, non assoluto") è ora **codice**
in `altlib.py`:
- `tp01_baseline_daily()` — TP01 CANONICAL 50/50 BTC+ETH, rendimenti netti giornalieri (cache).
Riproduce il canonico (full 1.30 / hold 0.31) — bloccato da test.
- `marginal_vs_tp01(cand_daily)` — corr a TP01 (full/hold), **uplift del blend** (Sharpe di
TP01+w·cand meno TP01, full & hold-out, w∈{0.25,0.5}), **beta a TP01 + alpha residua** (parte
ortogonale al trend), e un **verdetto**: ADDS / REDUNDANT / DILUTES / NEUTRAL.
- `study_marginal(name, target_fn)` — valuta un candidato **sia** in assoluto (`study_weights`)
**sia** marginale; `earns_slot = (abs_grade != FAIL) AND (marginal_verdict == ADDS)`.
- Convenzione pulita `target_fn(df, asset)` (via `_call_target`) per le strategie DVOL/cross-asset
— niente più inferenza-asset hacky (il VOL03 dell'agente la sbagliava, usava DVOL BTC anche per ETH).
- Demo riproducibile `scripts/research/alt/marginal_demo.py` + test `tests/test_marginal_scorer.py`.
**Dimostrazione (la prova che il fix discrimina):**
| candidato | assoluto | marginale | earns_slot |
|---|---|---|---|
| TP01-itself (sanity) | WEAK | REDUNDANT (corr 1.0, uplift 0) | False |
| **STA05 long-short** (il lead) | PASS | **ADDS** (corr-hold 0.53, blend-hold +0.29) | **True** |
| STA05 long-only | WEAK | REDUNDANT (corr 0.93/0.94) | False |
| VOL03 DVOL-gated TSMOM (overlay) | WEAK | NEUTRAL (corr 0.93, uplift triviale) | False |
| **CMB04 momentum+low-vol (overlay)** | **PASS** | **NEUTRAL** (corr 0.94) | False |
Il punto chiave è l'ultima riga: **CMB04 prendeva un PASS assoluto col vecchio harness, ma il
marginal scorer lo declassa correttamente** — il suo "Sharpe 1.0" è trend di TP01 ereditato al 94%,
non alpha nuovo. Regola operativa d'ora in poi: una nuova strategia direzionale BTC/ETH si giudica su
`study_marginal` (earns_slot), non sullo Sharpe assoluto.
## "Resta qualche candidato?" — gate marginale + jackknife su TUTTI i contendenti forti
Passati i 7 promettenti più forti non-ancora-marginal-testati (`marginal_remaining.py`):
Vortex/Hull (FAIL nella ricostruzione pulita), VOL11 kill-switch (corr 0.94 → REDUNDANT), XAS03/09
rotazioni (NEUTRAL, anzi RS-rotation **diluisce** l'hold-out 0.20), **TRD07 KAMA** e **VOL08**
(entrambi marginale=ADDS). Ma il marginal-point-estimate **può essere ingannato da un singolo mese**:
ho aggiunto al gate il **jackknife OOS** (`robust_oos` = uplift positivo nell'anno OOS pulito 2025
**e** sopravvive al drop-best-month). Risultato:
| candidato | clean-2025 uplift | drop-best-month | robust_oos | earns_slot |
|---|---|---|---|---|
| TRD07 KAMA | +0.089 | **0.034** | False | **False** (era ADDS!) |
| VOL08 RV-term | +0.158 | +0.034 | True | **True** |
| STA05 long-short | +0.039 | +0.131 | True | True (ma 2025 ~0, il grosso è lo stub 2026) |
**KAMA è il falso-positivo istruttivo:** ingannava il marginal scorer (uplift +0.056) ma muore al
jackknife (0.034 togliendo il mese migliore) → il gate rinforzato (`earns_slot` ora esige
`robust_oos`) lo uccide correttamente. Codificata così la lezione #2 in `marginal_vs_tp01`.
### Verdetto finale: NESSUN candidato deployabile
Dopo il gate più severo (abs≠FAIL + marginale=ADDS + jackknife OOS), i 104 collassano a **2 LEAD
fragili**: **VOL08** (overlay term-structure di vol realizzata) e **STA05_LS** (ensemble EMA
long-short). Entrambi sono **famiglia-trend su BTC/ETH** (non un meccanismo nuovo), moderatamente
correlati a TP01 (0.530.61 hold-out), con uplift piccolo e concentrato su un OOS di ~1.5 anni →
**forward-monitor, NON sleeve.** E sono correlati tra loro (entrambi trend) → di fatto **un solo
tema**: "una costruzione di trend-timing alternativa, modestamente decorrelata a TP01 nel 2025-26".
La diversificazione vera resta fuori dallo spazio direzionale single-asset (→ XS01 / opzioni reali).