research wave 1: 5 honest tracks on certified BTC/ETH + synthesis

- trackA trend, trackB ML, trackC mean-rev, trackD trend-portfolio, trackE xsec/ensemble
- VERDICT: Track D vol-targeted BTC+ETH trend portfolio is the one robust deployable
  earner (Sharpe 1.0-1.32, DD 13-19%, positive every year 2019-2026)
- mean-reversion confirmed dead on clean data; weak-but-real ML/trend residuals
- honest: EUR50/day on 2000 in 1-2y is not reachable (needs ~137k capital or ruinous DD)
This commit is contained in:
2026-06-19 19:14:53 +02:00
parent 6b9c469832
commit dc2b5697da
12 changed files with 2621 additions and 0 deletions
@@ -0,0 +1,63 @@
# 2026-06-19 — Sintesi ricerca post-reset (5 track) e verdetto
Prima ondata di ricerca sui dati **certificati** BTC/ETH (Deribit mainnet, ~2 bps vs
Coinbase USD), con harness onesto condiviso `src/backtest/harness.py` (ingresso eseguibile
a `close[i]`, fee 0.10% RT, exit intrabar TP/SL, OOS/per-anno). Branch
`strategy-research-2026-06`.
## I 5 track
| Track | Famiglia | Esito |
|-------|----------|-------|
| **A** | Trend/Momentum (TSMOM, Donchian, EMA, vol-scaled) | 5m/15m morti (fee); 1h = residuo reale ma celle singole non robuste |
| **B** | ML walk-forward (logistic/GBM su feature di forma) | edge debole ma REALE su BTC (+83% OOS, Sharpe 0.57), ~+0.58 €/d su 2000 |
| **C** | Mean-reversion / range (fade, RSI2, VWAP) | **MORTO** — negativo anche a fee=0. Conferma: la vecchia libreria fade era artefatto |
| **D** | **Trend portfolio vol-targeted BTC+ETH** | ✅ **DEPLOYABLE** — robusto, positivo ogni anno |
| **E** | Cross-sectional BTC↔ETH + ensemble | RV debole (muore a 1.5bps/gamba); ensemble dimezza il DD ma non alza il ritorno |
## Il vincitore: Track D — trend portfolio (l'unico che guadagna in modo robusto)
TSMOM multi-orizzonte (blend 1-3-6 mesi su barre 1h), **vol-targeting** (posizione ∝
1/vol realizzata, target 20% annuo), portafoglio **50/50 BTC+ETH**, fee 0.10% RT. Un solo
set di parametri per entrambi gli asset.
- **LONG-SHORT 50/50:** CAGR +14.2%, **Sharpe 1.00**, maxDD 18.9%, positivo ogni anno 2019-2026.
- **LONG-FLAT 50/50 (migliore risk-adj):** CAGR +15.9%, **Sharpe 1.32**, **maxDD 13.3%**.
- Robusto: plateau di Sharpe ~1.0 su griglia target-vol/leva/orizzonti; regge fee fino a 0.40% RT;
su entrambi gli asset; **non** è un picco fortunato (a differenza delle "star" di Track A).
- Tesi confermata: il valore del trend è **tagliare il drawdown** (B&H DD ~78% → trend DD ~13-19%)
con Sharpe ≥ B&H → si può scalare il rischio (target-vol) e diversificare BTC+ETH.
- Caveat onesto: l'edge è più forte 2018-21 (Sharpe 1.63) che 2022-26 (Sharpe 0.57). Dimensionare
sul regime recente.
## Il verdetto sul target €50/giorno
Una strategia che **guadagna** in modo robusto ESISTE (Track D). Ma il target "€50/giorno
medio partendo da 2000 in 1-2 anni" **non è raggiungibile onestamente**: sono ~2.5%/giorno.
La leva NON è la scorciatoia (alza il DD verso la rovina). La vera leva è **target-vol +
capitale + tempo**:
| target-vol | leva usata | CAGR | Sharpe | maxDD | €/giorno (2k) |
|-----------|-----------|------|--------|-------|---------------|
| 20% | 0.23x | +14% | 1.00 | 19% | +0.73 |
| 40% | 0.45x | +28% | 1.00 | 35% | +3.73 |
| 60% | 0.68x | +40% | 1.00 | 48% | +7.96 |
| 80% | 0.90x | +50% | 0.99 | 60% | +13.78 |
Per **€50/giorno steady-state** servono ~**137k di capitale** (config conservativa, DD~19%),
oppure DD da rovina. Partendo da 2000 a CAGR ~28% (target-vol 40%, DD 35%) il capitale che
genera €50/giorno arriva in ~10-13 anni, non in 1-2.
## Conclusione operativa
1. **Esiste un edge dispiegabile e onesto**: il trend portfolio vol-targeted (Track D).
È il primo risultato robusto post-reset.
2. **Non esiste alcuna scorciatoia** verso €50/giorno su 2000 in 1-2 anni con questi dati
(BTC/ETH 5m-1h). Il limite è strutturale: due asset, alta correlazione, fee.
3. Prossimi passi onesti se si vuole alzare il soffitto: (a) dimensionare Track D a un
target-vol/DD tollerabile e farlo girare in paper, (b) cercare edge di **magnitudine
diversa** (non più diversificazione di edge deboli) — il che richiede dati che oggi non
abbiamo certificati (universo più ampio, microstruttura, funding/opzioni backtestabili).
Script: `scripts/research/track{A,B,C,D,E}_*.py`. Diari di dettaglio: `2026-06-19-track*.md`.
+74
View File
@@ -0,0 +1,74 @@
# 2026-06-19 — Track A: Trend / Momentum su BTC & ETH (dati certificati)
Prima ricerca di strategie NUOVE post-reset (track A = trend/momentum). Tool:
`scripts/research/trackA_trend.py` (harness onesto `src/backtest/harness.py`, fee 0.10% RT,
IS/OOS 65/35, griglia su entrambi gli asset, fee sweep, stress leva). Run:
`uv run python scripts/research/trackA_trend.py`.
## Cosa è stato testato
- **TSMOM** (segno del ritorno N-barre, hold H) long/short e long-only.
- **EMA crossover** (fast/slow) come filtro di trend.
- **Donchian breakout** (entry ONESTO: breakout rilevato con `close[i]`, fill a `close[i]`).
- **Vol-scaled / regime-gated TSMOM** (momentum preso solo se |z| > gate, z = ritorno/vol).
- Griglia ampia su **BTC e ETH**, **1h / 15m / 5m**. 480 celle OOS totali.
Tutto entry-eseguibile: direzione e prezzo decisi con dati ≤ `close[i]`, fill a `close[i]`.
Nessun uso di `returns[i]` (che codifica `close[i+1]`). Hold approssimato come catena di
posizioni non sovrapposte di H barre (la fee si ammortizza su H barre — costo onesto).
## Risultati — la fotografia onesta
**Celle positive OOS per timeframe:**
| TF | celle positive / totali |
|----|----|
| **1h** | 39 / 160 |
| **15m** | **0 / 160** |
| **5m** | **0 / 160** |
**Trend intraday (5m/15m) è MORTO**: lo drag della fee (più trade = più 0.10% RT) annienta
qualsiasi segnale. Drawdown 80-99%, Sharpe da 0.6 a 2.2. Niente da salvare.
**Su 1h** c'è qualche cella positiva, ma il contesto la ridimensiona:
- La finestra **OOS è un singolo regime**: il taglio 65% cade a **set/dic 2023**, quindi
l'OOS è ~2023→2026 (in gran parte toro 2024). Tutto il 2018-2022 (orso 2018, crash 2020,
toro 2021, orso 2022) è IN-SAMPLE. "Positivo OOS" qui ≈ "il trend ha fatto soldi nel toro 2024".
- **Benchmark buy & hold sulla stessa finestra OOS**: BTC **+134%**, ETH **21%**.
- Tutte le `TSMOM_LONG` e metà delle celle BTC fanno **MENO** del B&H → è **beta**, non edge.
- Le poche che battono il B&H lo fanno **solo su ETH** (dove il B&H era negativo): catturano
anche i ribassi. Quello è timing reale — ma vedi sotto.
**Le "star":** VOLSCALED_TSMOM BTC 1h (N=20,H=48,vw=100,z=0.5) = +367% OOS, Sh 0.91, DD 32%,
€/d(2k) +2.56; ETH 1h (N=20,H=48,vw=50,z=1.0) = +197% OOS, Sh 0.60. **MA sono celle fortunate:**
i vicini di griglia crollano (stesso N/H, vw=50 invece di 100 → +21% invece di +367%; z=1.0 → +34%).
Non è un altopiano robusto, è un picco isolato. E il P&L è concentrato nel 2024 (+110% su BTC),
con 2025/2026 deboli o negativi per molte celle.
**Consistenza cross-asset (un edge vero regge su ENTRAMBI):** su 480 celle, solo **2** sono
positive OOS su BTC *e* ETH:
- `TSMOM_LONG 1h N=200 H=48` → ma è long-only ≈ beta (fa meno del B&H su BTC).
- `DONCHIAN 1h N=200 H=12` → l'unico candidato "vero" simmetrico, ma **marginale**:
OOS BTC +9% / ETH +15%, **Sharpe 0.15-0.19**, troppo debole per dispiegarlo.
**Fee sweep / leva:** le star reggono lo sweep 0.0005-0.002 (è 1h, poche operazioni), e lo Sharpe
è invariante alla leva (come deve) — ma la leva 3x porta i DD a 75-91% e affonda le celle marginali.
## Verdetto
**Nessun edge trend/momentum dispiegabile, onestamente, su BTC/ETH oggi.**
- 5m/15m: morti per fee. Chiuso.
- 1h: esiste un **residuo di segnale trend** (le celle che battono il B&H negativo di ETH non sono
solo beta), ma è (a) testato su **un solo regime OOS** (toro 2023-2026), (b) **non robusto** di
griglia (picchi isolati), (c) sull'unica cella simmetrica robusta-su-entrambi (Donchian N=200)
**troppo debole** (Sharpe ~0.17). Sharpe netti ~0.3-0.9 nel caso migliore = sotto la soglia per
rischiare capitale reale.
Conferma la lezione del reset (il superstite storico era trend-following, non mean-reversion): il
trend è la direzione *meno sbagliata*, ma sui dati certi non basta a fare un edge. Coerente con
Track C (mean-reversion = artefatto).
## Prossimi passi possibili (non ancora edge)
- Walk-forward multi-regime (non un singolo taglio 65/35) per stressare Donchian-1h-N200 su orso 2018/2022.
- Trend 1h **con filtro di volatilità/regime più ricco** o portafoglio BTC+ETH per diversificare il
rischio di regime — ma solo se emerge robustezza di griglia, non altri picchi fortunati.
- Restare scettici: finché un trend non è positivo su griglia + su entrambi gli asset + su ≥2 regimi
OOS, **non si dispiega**.
+93
View File
@@ -0,0 +1,93 @@
# 2026-06-19 — Track B: ML / feature-prediction su BTC & ETH (walk-forward onesto)
Esperimento di ricerca sulla direzione **machine-learning** post-reset, su dati Deribit
mainnet certificati (solo BTC/ETH). Tool: `scripts/research/trackB_ml.py` (runnable
`uv run python scripts/research/trackB_ml.py`). Tutto netto fee, strict walk-forward,
held-out tail mai usato per scegliere i config.
## Metodologia (anti look-ahead — la lezione della v2.0.0)
- **Feature** (21): ritorni multi-lag (1/2/3/6/12/24), geometria candela (body/upper/lower
shadow su range, range normalizzato, body lag-1), momentum48 + accelerazione, RSI14,
estensione ATR-normalizzata vs EMA24, vol realizzata 24/72 + ratio, posizione del close
nel range 24/72, z-score del volume. **Tutte backward** (note solo a `close[i]`).
- **Label**: segno del ritorno forward su H barre, `sign(close[i+H]/close[i])`.
- **Strict walk-forward**: per predire il blocco che inizia a `b`, si addestra
scaler+modello SOLO su indici `< b-H` (gap di H → label completamente realizzata nel
passato), finestra rolling delle ultime W barre. Retrain ogni K=250 barre. Mai fit sul
futuro. **Nessun leakage** (verificato: la label più recente del train usa `close[b-1]`).
- **Esecuzione**: entry a `close[i]` nella direzione predetta, hold fino a H barre
(no TP/SL); il no-overlap dell'harness distanzia i trade ≥ H barre.
- **Modello**: `LogisticRegression(class_weight='balanced')`. Soglia di probabilità per
filtrare i segnali deboli (long se p>0.5+thr, short se p<0.5-thr, altrimenti flat).
- **Selezione su DEV** (primo 75%), **conferma una volta sola** sull'held-out tail (ultimo 25%).
- Griglia: W∈{4000,8000,16000}, H∈{6,12,24,48}, thr∈{0,0.03,0.06,0.10}, BTC & ETH, 1h.
Fee-sweep 0.05/0.10/0.15/0.20% RT. Turnover/time-in-market sempre riportati.
## Risultato — esiste un segnale, ma è debole e a basso turnover
**Pattern netto e robusto della griglia**: la positività compare SOLO nelle celle a basso
turnover → **W grande (16000) + H lungo (24) + soglia alta (0.10)**. Tutto ciò che gira
veloce (thr basso, H corto, e soprattutto il **15m**) **muore sulle fee**.
- **15m**: 0/12 celle positive in dev (la migliore 47%, le altre 99%). Stesso win-rate
5256% del 1h, ma il turnover lo polverizza. Conferma di prim'ordine: l'edge per-trade è
minuscolo, sopravvive solo se si tradano poche barre.
- **1h, dev**: 19/96 celle net-positive con Sharpe>0. Famiglie threshold-robuste:
`BTC W16000 H12`, `BTC W8000 H12`, `BTC W16000 H24`, più ETH W16000 H12/H48 marginali.
### Held-out tail (2024→2026, mai toccato in sviluppo)
| config | trades | wr% | net% | Sharpe | DD% | mkt% | €/g(2k) | long% | B&H tail |
|---|---|---|---|---|---|---|---|---|---|
| **BTC W16000 H24 thr0.10** | 333 | 52.9 | **+83.7** | 0.57 | 23 | 12 | **+0.58** | 44 | +3.9% |
| BTC W16000 H12 thr0.10 | 382 | 53.4 | +37.6 | 0.35 | 25 | 7 | +0.26 | 54 | +3.9% |
| ETH W16000 H12 thr0.10 | 364 | 57.7 | +23.7 | 0.24 | 35 | 7 | +0.18 | 68 | 38.4% |
| ETH W16000 H48 thr0.06 | 215 | 55.3 | 13.3 | 0.08 | 64 | 16 | 0.10 | 67 | 38.4% |
**Non è solo beta.** Il B&H sul tail è +3.9% (BTC) e 38.4% (ETH), eppure le celle migliori
fanno +37…+84% (BTC) con **long ~4454%** (bilanciato long/short), e ETH +23.7% **mentre ETH
scendeva 38%** (short corretti). Quindi c'è segnale direzionale genuino, non cattura di trend
rialzista. Payoff asimmetrico: ~53% WR ma avgWin>avgLoss (BTC: +2.04% vs 1.63%).
### Fee-sweep (held-out)
- `BTC W16000 H12 thr0.10`: 0.05%→+66.6 | **0.10%→+37.6** | 0.15%→+13.7 | 0.20%→−6.1.
Sopravvive fino a ~0.15% RT, poi muore. Margine sottile.
- `BTC W8000 H12 thr0.06`: positivo solo a 0.05%, già 35% a 0.10%. Fragile.
- ETH e le celle a turnover medio: muoiono tra 0.10 e 0.15%.
### Stabilità per-anno (full walk-forward, BTC W16000 H24 thr0.10)
`+11% (2020) / +188% (2021) / +14% (2022) / 38% (2023) / +13% (2024) / +75% (2025) / +7% (2026)`,
CAGR full ~22%, ma **DD 56%** e fortissima concentrazione su 2021/2025 con un 2023 a 38%.
## Verdetto onesto — NON deployabile verso l'obiettivo
1. **L'edge è reale ma minuscolo.** A differenza della vecchia libreria (artefatto puro), qui
il segnale sopravvive a strict walk-forward, a fee 0.10% RT e batte il B&H sul tail. È un
risultato genuino e va registrato: la direzione ML **non è morta**.
2. **Ma è incompatibile col target.** €/giorno su €2000 = +0.26…+0.58 baseline (anche la stima
rosea full-WF CAGR 22% → ~€13/g). Il target è **€50/g** → siamo ~100x sotto.
3. **Fragilità**: vive solo a basso turnover (thr alto, H lungo, W grande), DD 2356%,
ritorni concentrati in pochi anni con un anno a 38%, e l'edge si assottiglia già a
0.15% RT. Un singolo cambio di regime lo annulla.
4. **ETH ≠ "specialmente buono"** (contrariamente all'indizio dello shape-ML precedente): qui
ETH è più sottile e più rumoroso di BTC sull'held-out; l'unico merito è aver shortato
correttamente il drawdown 2024-25.
**Conclusione**: la logistic-regression walk-forward su feature di forma+momentum trova un
debole edge **momentum direzionale a basso turnover** su BTC (più tenue su ETH), onesto e
netto-fee, ma **troppo piccolo, troppo concentrato e troppo fee-sensibile** per essere
deployato standalone. Al massimo un **componente** di un futuro ensemble, e solo nelle
configurazioni a bassissimo turnover. Nessun config raggiunge, neanche lontanamente, i €50/g.
## Prossimi passi possibili (non eseguiti)
- Provare **predizione di magnitudine/asimmetria** (large-up vs large-down) e position-sizing
proporzionale alla confidenza, invece del semplice segno.
- **GradientBoosting / feature non lineari** (flag `--gbm` predisposto) — ma attenzione
all'overfit; il rischio è di "trovare" edge che il walk-forward onesto non conferma.
- **Ensemble** del segnale ML a basso turnover con un filtro di regime (vol/trend) per tagliare
il 2023. Ma serve dimostrare che il filtro non è scelto col senno di poi.
- Restare scettici: finché €/g resta ~100x sotto target, l'ML da solo NON è la risposta.
+70
View File
@@ -0,0 +1,70 @@
# 2026-06-19 — Track C: mean-reversion / range re-examination (HONEST) → DEAD
Obiettivo: stabilire rigorosamente se **un qualunque** edge di mean-reversion / range a
breve orizzonte sopravvive su BTC/ETH **certificati** (Deribit mainnet) con **ingresso
eseguibile onesto**, oppure confermarne definitivamente la morte. Entrambi gli esiti sono
validi; nessun risultato forzato.
Tool: `scripts/research/trackC_meanrev.py` (self-contained, runnable), sopra l'harness
onesto `src/backtest/harness.py` (direzione+prezzo decisi con dati ≤ `close[i]`, fill a
`close[i]`, exit intrabar TP/SL da `i+1`, fee netto). Universo: BTC/ETH × {1h,15m,5m}.
## Cosa è stato testato (5 famiglie, ingresso onesto)
- **ZFADE** — Bollinger/z-score fade: `z(close,lookback)`thr → long, ≥ +thr → short.
TP al mean mobile o a `tp_atr·ATR`; SL a `sl_atr·ATR`. **Entry a close[i]**, NON al tocco
della banda (era proprio quello l'artefatto storico).
- **RSI2** — RSI(2) oversold/overbought (+ variante con filtro trend SMA200).
- **RETREV** — return reversal: fade del rendimento cumulato estremo (|z| > thr·σ).
- **VWAP** — reversione sulla distanza dal VWAP rolling (in unità di σ della distanza).
- **SESSION** — autocorrelazione next-bar per ora UTC (descrittivo).
Metodologia applicata: OOS 65/35, griglia parametri su **entrambi** gli asset, fee-sweep
{0, 0.5, 1.0, 1.5, 2.0} bps RT, cross-check liquidità (flat-bar O=H=L=C) e time-in-market.
## Sanity liquidità
Flat-bar O=H=L=C: BTC/ETH 1h ≈ 0.01%, 15m 0.090.14%. Book vivo → l'eventuale edge NON
potrebbe nascondersi in barre ferme (a differenza degli alt archiviati). Confermato pulito.
## Risultati — tutto negativo, su ogni asse
**PASS 1 (screen 1h, fee 0.10% RT):** ogni famiglia OOS negativa su entrambi gli asset.
Es. ZFADE z2/mean: BTC OOS 85%, ETH OOS 83%. RSI2 10/90: BTC 92%, ETH 96%.
RETREV/VWAP idem. Win-rate spesso "alto" (RSI2 ~63%, VWAP ~64%) ma **perde lo stesso**
le poche perdite sono enormi, la reversione non paga il rischio + fee.
**PASS 2 (griglia 1h):** ZFADE **0/18** celle con OOS>0 su entrambi; RSI2 **0/36**. La
cella meno-peggio (ZFADE lookback20 z3) resta BTC 40% / ETH 33% OOS. Nessun sopravvissuto.
**PASS 3 (fee-sweep, incl. fee=0 GROSS):** il colpo decisivo. **Anche a fee=0** (lordo)
la z-fade è negativa: BTC full 74% / OOS 46%, ETH full 98% / OOS 48%. Quindi non è
"morte da fee": **la direzione stessa della fade è sbagliata** sul feed pulito. Salendo le
fee degrada monotòno fino a 100%.
**PASS 4 (timeframe 5m/15m/1h):** più veloce = peggio. A 5m full 100% su entrambi
(41.889 / 38.660 trade), €/giorno su 2000 ≈ 0.70/0.75. Coerente con "molte operazioni =
morte per fee", ma il PASS 3 mostra che il problema è a monte: niente edge nemmeno lordo.
**PASS 5 (sessione UTC):** esiste una **debole** autocorrelazione negativa next-bar in
poche ore (BTC 13h 0.166, 2h 0.154, 21h 0.129; ETH 13h 0.152, 4h 0.117), e una
positiva alle 03h UTC (BTC +0.158, ETH +0.202 = ora "trending"). Struttura reale ma
debolissima (|ρ|≤0.17): non sopravvive a fee + dimensionamento del rischio (lo conferma il
fatto che tutte le versioni *tradate* perdono anche lorde).
## Verdetto
**Nessuna** configurazione MR produce OOS netto>0 su entrambi BTC ed ETH a fee baseline.
Più forte: **a fee zero la fade è già negativa** → l'edge MR storico (+201%/+1238% "OOS")
era un **artefatto del feed contaminato** (wick fantasma testnet + entry su estremi mai
scambiati), non una proprietà del mercato. Sul dato certificato, con ingresso eseguibile,
la mean-reversion a breve orizzonte **non è un edge**: è morta sia lorda che netta.
Coerente con la tesi del reset (`2026-06-19-deribit-history.md`, §3): FADE morto ogni anno.
Track C chiusa come direzione di alpha. La debole struttura intraday-by-hour (PASS 5) è
annotata ma non azionabile da sola; semmai un *filtro* futuro, non una strategia.
## Artefatti
- `scripts/research/trackC_meanrev.py` — riproducibile: `uv run python
scripts/research/trackC_meanrev.py [--quick]` (~40s quick, ~3min full).
+96
View File
@@ -0,0 +1,96 @@
# 2026-06-19 — Track D: Robust walk-forward TREND PORTFOLIO (BTC+ETH), vol-targeted + leverage
Follow-up to Track A. Thesis under test: trend-following's real value in crypto is **drawdown
reduction** vs buy & hold (it sidesteps crashes), and that lower DD lets you apply **leverage** and
**diversify** BTC+ETH into a deployable, risk-adjusted *earning* system — even if each single signal
has modest Sharpe. Tool: `scripts/research/trackD_trendport.py` (run
`uv run python scripts/research/trackD_trendport.py`).
## Method (honest, no look-ahead)
Equity built directly from a **target-position series** (the harness's documented "build your own
equity" path), NOT per-trade chaining:
- `target[i]` decided with data **≤ close[i]**; **held during the next bar** (close[i]→close[i+1]).
- `pnl[t] = target[t-1]·r[t]`, `r[t]=close[t]/close[t-1]-1` — positions **shifted +1 bar** ⇒ no leakage.
- Fees on **turnover**: `0.05%/side·|target[t-1]-target[t-2]|` (0.10% RT baseline; swept 0.100.40% RT).
- **Vol-targeting** (main lever): `target = direction · (target_vol / realized_vol)`, clipped to the
leverage cap. `realized_vol` = annualized rolling std of past bar returns (30d window), ≤ close[i].
- **Portfolio** = 50/50 BTC+ETH net-return series, rebalanced each bar on common timestamps.
Leakage sanity check passed: an *oracle* target using next-bar sign explodes (10^119×) — proving the
engine holds `target[i-1]` over bar `i` — while our signals (TSMOM blend, MA-slope, Donchian) only use
`close[i]` and earlier. Zero-position equity = exactly 1.0.
## What was tested
TSMOM multi-horizon blend (1/3/6-month-equiv on 1h bars), MA-slope (EMA200 slope), Donchian breakout
with trailing channel stop — each vol-targeted, long-short **and** long-flat, per-asset and combined.
Grid: target-vol × leverage-cap × horizon-set; explicit EARLY(2018-21)/LATE(2022-26) split;
fee & leverage sweep; full per-year 2018-2026.
## Results — the honest picture
**1) The thesis holds: massive DD reduction, and diversification helps.**
| Strategy (50/50 port, tvol20%, LS) | CAGR | Sharpe | maxDD | volA |
|---|---|---|---|---|
| **B&H 50/50** | +48% | 0.92 | **77.8%** | 70% |
| TSMOM 1-3-6m blend | +14.2% | **1.00** | **18.9%** | 14% |
| MA-slope | +14.1% | 0.79 | 21.9% | 19% |
| Donchian-trailing | +14.7% | 0.89 | 17.7% | 17% |
Trend cuts maxDD from ~78% to ~18% while keeping a Sharpe **above** buy&hold (1.00 vs 0.92). The
portfolio Sharpe (1.00) **beats both sleeves** (BTC 0.95, ETH 0.75) — diversification works as claimed.
The **long-flat** variant is even cleaner: Sharpe **1.32**, maxDD **13.3%** (no short funding/borrow risk).
**2) It is genuinely robust (not a lucky cell).**
- *Per-year (headline LS):* every full year **positive** 2019-2025 (+19/+36/+19/+6/+2/+14/+4%) and 2026 +8%.
- *Grid:* Sharpe ≈1.00 across **all** target-vol (10-40%) × leverage caps — flat plateau (vol-targeting
just scales). DD scales ~linearly with target-vol (10%→DD10%, 40%→DD35%).
- *Horizon-set:* every subset (1m/3m/6m/1-3m/3-6m/1-2-4m/2-4-8m) is **positive**; Sharpe 0.37→1.39.
Shorter horizons (1m, 1-2-4m) score best (Sharpe 1.34-1.39) — a real plateau, not one combo.
- *Fee:* survives to 0.40% RT (Sharpe 1.00→0.39, still positive at 4× baseline fee).
**3) The honest caveat — most of the edge is the EARLY regime.**
Walk-forward split, same param set both assets:
- **EARLY 2018-2021:** CAGR +26%, Sharpe **1.63**, DD 18%.
- **LATE 2022-2026:** CAGR +7.3%, Sharpe **0.57**, DD 19%.
The signal is real and still net-positive every late year, but its quality **halved** post-2021
(crypto vol compressed, trends choppier). This is the same warning Track A raised, now quantified: the
edge is strongest 2019-2021 and merely *modest* in the 2022-26 regime.
**4) Leverage is a red herring; target-vol is the real dial — and it costs DD linearly.**
At tvol=20% on 60-80% crypto vol, positions stay **sub-1x** (avg gross 0.23×): the leverage cap
**never binds**. To deploy real leverage you raise target-vol; Sharpe stays ~1.0, DD scales:
| target_vol | avg gross | CAGR | Sharpe | maxDD |
|---|---|---|---|---|
| 20% | 0.23× | +14% | 1.00 | 19% |
| 40% | 0.45× | +28% | 1.00 | 35% |
| 60% | 0.68× | +40% | 1.00 | 48% |
| 80% | 0.90× | +50% | 1.00 | 60% |
| 100% | 1.12× | +58% | 0.99 | 69% |
## Verdict — is this a deployable earning system?
**Yes as a risk-adjusted system; NO as a fast path to €50/day on €2000.**
- This is the **first post-reset config that is genuinely robust**: Sharpe ~1.0 (long-flat 1.3),
positive every year 2018-2026, robust across grid/horizon/fee, on both assets, on certified data,
with honest no-look-ahead accounting. It is a real, deployable trend portfolio and a clear
improvement over Track A's lucky single cells. The thesis (DD reduction → leverageable, diversifiable)
is **confirmed**.
- **But the earnings are modest.** Headline (tvol20%, 2x cap, LS): CAGR **+14.2%**, DD 19% ⇒ steady-state
**~€0.73/day on €2000**. To average **€50/day at this CAGR you need ~€137k capital**, not €2000.
- **Leverage can't close the gap cheaply.** Pushing target-vol to 80% gives CAGR ~50% (DD **60%**) — and
at €2000, 50%/yr is still only ~€2.7/day in steady state. Reaching €50/day in 1-2 years from €2000
would require both heavy leverage (DD 60-70%, near-ruin) **and** lucky path — not a sane plan.
- **Regime risk:** the edge is much weaker post-2021 (Sharpe 0.57 LATE). Deploy sized for the LATE
regime, not the EARLY one.
**Recommendation:** treat this as the **core risk engine** (compounding ~14%/yr at DD<20%, or
long-flat ~16%/yr at DD 13%), deployable now at low size to validate live execution. It grows €2000,
but to *€50/day* the lever is **capital + time**, not leverage. Realistic near-term: ~€0.7-1.5/day on
€2000; €50/day needs ~€70-140k or a second uncorrelated edge stacked on top.
## Deliverable
`scripts/research/trackD_trendport.py` — self-contained, prints B&H benchmark, broad scan, grid
robustness, horizon robustness, walk-forward early/late, fee+leverage sweep, headline config per-year,
and the path-to-€50/day table. Reusable building blocks (vol-targeting, target→equity, portfolio).
@@ -0,0 +1,140 @@
# 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).