d152941360
Integra il lavoro della linea di ricerca parallela (AdrianoDev), verificato indipendentemente
col mio gauntlet onesto (regge il hold-out 2025-26 su entrambi gli asset, plateau 1h/4h/1d):
- src/strategies/trend_portfolio.py TP01 (TSMOM 30/90/180 vol-target 20% lev2x long-flat, 50/50 BTC+ETH)
- src/backtest/harness.py harness onesto (load + backtest_signals no-leakage + OOS)
- scripts/research/track{A,B,C,D,E}_*.py + trackD_timing.py (le 5 track della ricerca)
- scripts/live/paper_trend.py paper trader forward-only di TP01 (no esecuzione reale)
- tests/test_trend_portfolio.py (5 test, passano) + 6 diari trackA-E + synthesis
- CLAUDE.md aggiornato con l'esito ricerca (TP01 vincente, mean-rev morto, onesta su €50/g)
Squash (non merge) per NON portare in git i ~68MB di data/_feed_backup/*.bak che il branch
aveva committato per errore: esclusi + data/_feed_backup/ e data/paper_trend/ ora gitignorati.
Storia granulare del branch conservata sul ref origin/strategy-research-2026-06.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
141 lines
8.1 KiB
Markdown
141 lines
8.1 KiB
Markdown
# 2026-06-19 — Track E: Cross-sectional BTC↔ETH relative-value + ENSEMBLE synthesis
|
||
|
||
Due parti, entrambe oneste e su dati Deribit-mainnet certificati (solo BTC/ETH). Tool:
|
||
`scripts/research/trackE_xsec_ensemble.py` (runnable, self-contained, riusa il walk-forward
|
||
ML di Track B e il Donchian di Track A). Harness onesto: direzione/posizione decise con dati
|
||
≤ `close[i]`, realizzo sul bar successivo (shift di 1 barra, niente look-ahead). Fee
|
||
turnover-based: `|Δpos|·fee_rt/2` **per gamba** (un flip +1↔−1 = un round-trip = 0.10% RT).
|
||
|
||
Run: `uv run python scripts/research/trackE_xsec_ensemble.py` (`--quick` salta lo sleeve ML;
|
||
`--no-cache` ricalcola la proba ML). Il proba ML viene cacheato (`.cache_trackE_*.npy`).
|
||
|
||
---
|
||
|
||
## PART 1 — Relative value (spread BTC↔ETH, 1h, market-neutral)
|
||
|
||
**Premessa strutturale.** BTC/ETH log-ret 1h sono correlati **0.84**. Con due soli asset
|
||
l'unica struttura tradabile è lo **spread**. E con due asset, *"long il più forte / short il
|
||
più debole"* (XS-momentum) è **algebraicamente identico** a *"trada il trend del ratio
|
||
ETH/BTC"* — infatti nel codice (A) e (B) producono numeri identici. Sono lo stesso edge.
|
||
|
||
**Lead-lag: nullo.** `corr(rB[i], rE[i+1]) = −0.018`, `corr(rE[i], rB[i+1]) = −0.007`,
|
||
autocorrelazioni −0.01..−0.02. Nessun potere predittivo cross-asset → lead-lag **non**
|
||
perseguito come sleeve (sarebbe rumore moltiplicato per le fee).
|
||
|
||
**(A/B) XS momentum / ratio trend (griglia N∈{24,72,168,336}, hold∈{6,24,72}):**
|
||
- Solo **4/12 celle** OOS net-positive, e sparse (N24/h24, N24/h72, N72/h72, N168/h24).
|
||
- Le celle FULL forti (N168/h24: +150% full, Sharpe 0.68, DD 27%) hanno **OOS debole**
|
||
(+11%, Sh 0.30). La migliore per OOS-Sharpe è N24/h24 (OOS Sh 0.31, OOS net +11%).
|
||
- **Fee sweep (N24/h24):** gross (0bp) FULL +356%/OOS +74% Sh 1.20 → a 1.0bp/gamba FULL +27%/
|
||
OOS +11% Sh 0.31 → **muore già a 1.5bp/gamba** (OOS −11%). Margine fee sottilissimo.
|
||
- **Per-anno** concentrato sui grandi movimenti del ratio 2020-2021 (e 2024), piatto/negativo
|
||
altrove (2022 −9%, 2023 −19%, 2025 −6%, 2026 −16%). Non è un altopiano: è un edge debole,
|
||
fee-sensibile, regime-dipendente.
|
||
|
||
**(C) Ratio mean-reversion (z-fade di log(ETH/BTC)):** negativa ovunque (es. lb168/zin2.0:
|
||
FULL −85%, OOS −44%, Sh −1.56). Coerente con Track C: anche sullo spread la MR a breve non è
|
||
un edge sul dato pulito.
|
||
|
||
**Verdetto PART 1:** esiste un **debole** edge di relative-value (XS-momentum ≡ ratio-trend),
|
||
net-positivo OOS solo in alcune celle, Sharpe OOS ~0.3, che **muore a ~1.5bp/gamba** ed è
|
||
concentrato in pochi anni. È **reale ma marginale** — degno di entrare in un ensemble come
|
||
sleeve diversificante, non come strategia standalone. La sua virtù: è **quasi scorrelato**
|
||
dagli edge direzionali (vedi sotto).
|
||
|
||
---
|
||
|
||
## PART 2 — Ensemble (3 sleeve residui in UN portafoglio)
|
||
|
||
Sleeve combinati (gross 1 ciascuno, equal-weight 1/N → gross totale ~1):
|
||
- **S1 = BTC-ML** (Track B, cella onesta a basso turnover W16000 H24 thr0.10, 1h).
|
||
- **S2 = BTC-Trend** (Track A, l'unica cella trend robusta cross-asset: Donchian N=200 H=12).
|
||
- **S3 = Relative-value** (PART 1, miglior cella OOS: XS-momentum N=24 hold=24).
|
||
|
||
**Finestra comune attiva** (dove tutti e 3 sono live, dopo il warmup ML): 2020-06 → 2026-06,
|
||
52.636 barre.
|
||
|
||
### Matrice di correlazione degli sleeve (ret per-barra, finestra comune)
|
||
|
||
| | S2_trend | S3_relval | S1_ml |
|
||
|----------|----------|-----------|--------|
|
||
| S2_trend | +1.000 | +0.010 | −0.063 |
|
||
| S3_relval| +0.010 | +1.000 | −0.010 |
|
||
| S1_ml | −0.063 | −0.010 | +1.000 |
|
||
|
||
→ **Sleeve quasi perfettamente scorrelati** (|ρ| ≤ 0.06). In teoria, terreno ideale per la
|
||
diversificazione.
|
||
|
||
### Per-sleeve (finestra comune, scala $ uguale)
|
||
|
||
| sleeve | net | Sharpe | maxDD | €/g(2k) |
|
||
|-----------|-------|--------|-------|---------|
|
||
| S2_trend | +5% | +0.15 | 34% | +0.04 |
|
||
| S3_relval | +8% | +0.16 | 41% | +0.07 |
|
||
| **S1_ml** | +382% | **+0.87** | 56% | +3.51 |
|
||
|
||
### Ensemble
|
||
|
||
| portafoglio | net | Sharpe | maxDD | CAGR | €/g(2k) |
|
||
|----------------------|-------|--------|-------|-------|---------|
|
||
| best single (S1_ml) | +382% | +0.87 | 56% | +30% | +3.51 |
|
||
| **EQUAL-WEIGHT 1/N** | +109% | **+0.83** | **30%** | +13% | +1.00 |
|
||
| inverse-vol (IS wts) | +76% | +0.70 | 29% | +10% | +0.69 |
|
||
| EQ-WEIGHT **OOS**(65/35)| +32% | **+1.02** | **12%** | +14% | +0.83 |
|
||
|
||
Per-anno equal-weight: 2020 +16%, 2021 +50%, 2022 +2%, **2023 −13%** (vs −38% dell'ML da
|
||
solo!), 2024 +18%, 2025 +19%, 2026 −3%. **Molto più liscio**, niente anno-catastrofe.
|
||
|
||
### La diversificazione aiuta? Sì sul rischio, NO sul rendimento risk-adjusted
|
||
|
||
- **Sharpe:** ensemble 0.83 vs best-single 0.87 → **non batte** il miglior sleeve singolo.
|
||
- **maxDD:** ensemble **30%** vs best-single 56% → **dimezzato**. E OOS 12% vs ML-solo molto
|
||
più profondo. Per-anno senza il −38% del 2023.
|
||
- **Risk-matched** (levare l'ensemble 1.84x per pareggiare il 56% DD dell'ML): €/g +2.23
|
||
contro €/g +3.51 dell'ML da solo → a pari drawdown l'ensemble rende **MENO** (ratio 0.64).
|
||
|
||
**Perché?** Gli sleeve sono scorrelati ma **enormemente diseguali** (Sharpe 0.87 vs 0.15 vs
|
||
0.16). L'equal-weight 1/N "annacqua" l'unico sleeve forte con due deboli: la matematica
|
||
della diversificazione alza lo Sharpe solo se gli sleeve sono di *qualità comparabile*. Qui
|
||
non lo sono, quindi 1/N non può superare il singolo migliore. Pesare verso l'ML (quality-
|
||
weighting) converge banalmente a "esegui solo l'ML" — e sarebbe in-sample.
|
||
|
||
**Il guadagno vero dell'ensemble è la ROBUSTEZZA, non il rendimento:** stesso Sharpe del
|
||
miglior sleeve a **metà del drawdown**, per-anno molto più stabile, niente dipendenza da un
|
||
singolo modello/regime (l'ML da solo concentra tutto in 2021/2025 con un −38% nel 2023). Per
|
||
chi deve *sopravvivere*, l'ensemble è preferibile; per chi massimizza il rendimento a pari
|
||
rischio, l'ML puro vince di un soffio.
|
||
|
||
---
|
||
|
||
## Verdetto onesto — è un motore da €50/giorno? NO.
|
||
|
||
1. **Relative-value:** edge debole, reale ma marginale (Sharpe OOS ~0.3), fee-sensibile
|
||
(muore a 1.5bp/gamba), concentrato 2020-2021/2024. Utile **solo** come sleeve scorrelato.
|
||
Lead-lag e ratio-MR: nulli/negativi.
|
||
2. **Ensemble:** gli sleeve sono **quasi scorrelati** (|ρ|≤0.06) — risultato genuino e bello.
|
||
L'ensemble equal-weight ottiene **Sharpe ~0.83 a metà del drawdown** del miglior sleeve e
|
||
un per-anno molto più liscio. **Ma NON alza il tetto risk-adjusted** (a pari DD rende meno
|
||
dell'ML puro) perché un solo sleeve domina.
|
||
3. **Distanza dal target:** ensemble **€1.00/giorno su €2000** (best single €3.51 ma a DD
|
||
56% e concentrato). Il target è **€50/giorno → ~50x sotto** (l'ML puro ~14x sotto ma con
|
||
rischio/concentrazione inaccettabili). Levare per colmare il gap moltiplica il drawdown
|
||
ben oltre il tollerabile (1.84x già porta al 51% DD per ~€2.2/g).
|
||
|
||
**Conclusione:** la sintesi di Track E conferma la fotografia dei track A/B/C — esistono
|
||
**edge residui deboli ma reali e scorrelati** su BTC/ETH. Combinarli in un ensemble **migliora
|
||
la robustezza** (DD dimezzato, per-anno stabile, niente single-point-of-failure) ma **non crea
|
||
rendimento dal nulla**: il sistema combinato rende ~€1/giorno su €2000, ~50x sotto l'obiettivo,
|
||
e non è un motore dispiegabile. Il miglior uso pratico dei risultati: se un giorno si tradasse,
|
||
l'ensemble equal-weight (ML + trend + relative-value) è la forma **più onesta e meno fragile**
|
||
del poco edge disponibile — ma serve un edge **di un'altra magnitudine** per avvicinare i €50/g.
|
||
|
||
## Prossimi passi possibili (non eseguiti)
|
||
- Cercare uno sleeve **di qualità comparabile all'ML** (Sharpe ≥0.5 indipendente) — solo
|
||
allora 1/N alzerebbe lo Sharpe oltre il singolo. Senza, l'ensemble resta solo "risk smoother".
|
||
- Relative-value su **timeframe diversi** del ratio (giornaliero?) o con **position sizing**
|
||
proporzionale alla forza del segnale, restando scettici sul fee-margin sottile.
|
||
- Non aumentare la leva per inseguire €50/g: il DD esplode prima del rendimento.
|
||
|
||
## Artefatti
|
||
- `scripts/research/trackE_xsec_ensemble.py` — riproducibile (`uv run ...`, ~8s con cache ML).
|