87af03955c
Dal branch parallelo strategy-research-calendar (continuazione della linea TP01). Porta su main il record di ricerca + la fondazione del lead opzioni (NIENTE blob dati, niente codice in conflitto): - Tracks F/G/H/I (seasonality/calendar, prior-levels, volume-vol, momentum-reversal): tutti NEGATIVI/spurii -> confermano il soffitto Sharpe ~1.3 su BTC/ETH direzionale (calendar = buy&hold travestito; mean-reversion morta anche a fee 0). Diari + script. - trackD_lookahead_audit.py: audit anti-look-ahead (stesso esito del nostro fix >=12h). - eval-crypto-backtest-options.md: valutazione strategia esterna crypto_backtest. Cross-valida TP01 (il loro sleeve spot 12h ~ TP01: due ricerche indipendenti, stessa conclusione). Identifica il LEAD: sleeve income OPZIONI (vendita put settimanali delta-0.28, VRP IV>RV), scorrelato ~0.22 al trend -> via per superare il soffitto ~1.3. - options_real_quote_check.py + cerbero-bite-mainnet-verified.md: VERIFICATO su QUOTE REALI Deribit mainnet (cerbero-bite/MCP = mainnet, bit-identico a ccxt.deribit). Premio reale (BID, con skew) = 1.29x il modellato -> il backtest SOTTOSTIMA il premio; il rischio vero e' la CODA (short-vol) + liquidita' di roll in stress, non la magnitudine. NB: lo sleeve opzioni e' un LEAD, NON deployato: prezzato da modello (BS su DVOL) + 1 snapshot in regime calmo. Serve validazione real-chain multi-regime + stress crash + paper su testnet prima di aggiungerlo al portafoglio. Portafoglio attivo invariato: TP01 70% + XS01 30%. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
86 lines
4.6 KiB
Markdown
86 lines
4.6 KiB
Markdown
# Track G — Prior-period level breakouts / range (BTC & ETH, calendar-anchored)
|
||
|
||
**Data:** 2026-06-19 · **Script:** `scripts/research/trackG_prior_levels.py`
|
||
**Harness:** `src/backtest/harness.py` (honest, entry decided at `close[i]`, fill `close[i]`).
|
||
|
||
## Domanda
|
||
|
||
Esistono edge net-positivi OOS, robusti su BTC **e** ETH, definiti rispetto a un **periodo
|
||
calendario precedente** (giorno/settimana/opening-range)? E soprattutto: i breakout di livello
|
||
**continuano** (trend) o **rientrano** (fade)?
|
||
|
||
## No look-ahead (garanzie)
|
||
|
||
- Livelli prior-day/week costruiti aggregando a barre giornaliere/settimanali (UTC) e poi
|
||
**`shift(1)`** sul frame del periodo *chiuso*: il periodo corrente vede solo il precedente
|
||
totalmente chiuso. Mai "oggi"/"questa settimana" nel livello.
|
||
- Opening-range usato **solo** sulle barre dopo la chiusura della finestra di apertura.
|
||
- Direzione + prezzo decisi a `close[i]`, fill a `close[i]`. Mai entry sul livello esatto intrabar.
|
||
- Bug iniziale corretto: mismatch tz-aware vs tz-naive nel mapping dei livelli (dava 0 trade).
|
||
|
||
## Risultati (1h, fee 0.10% RT, leva 1x, OOS 65/35)
|
||
|
||
### Continuation vs FADE — il verdetto è netto
|
||
|
||
| Regola (PD = prior-day) | BTC OOS | ETH OOS | Sharpe OOS |
|
||
|---|---|---|---|
|
||
| **PD-high CONT (long su rottura max ieri)** | **+25%** | **+16%** | +0.5 / +0.3 |
|
||
| PD-high FADE | **−68%** | **−68%** | −1.6 / −1.2 |
|
||
| PD-low CONT (short su rottura min ieri) | −33% | −60% | −0.5 / −0.8 |
|
||
| PD-low FADE | −36% | −8% | −0.6 / +0.1 |
|
||
|
||
- **I breakout CONTINUANO, non rientrano.** Il lato FADE è robustamente **negativo** su entrambi
|
||
gli asset (sia high che low), su prior-day, prior-week e opening-range. Conferma diretta della
|
||
tesi del reset: la mean-reversion / fade è morta su dati certificati.
|
||
- **Asimmetria long-only:** funziona solo la rottura del **massimo** (long), non quella del
|
||
**minimo** (short). Cioè non è un edge di breakout *simmetrico/direzione-neutro*: è cattura del
|
||
**drift/trend rialzista** del cripto. La PD-low-cont (short sui breakdown) perde perché in questo
|
||
campione il cripto sale.
|
||
|
||
### Grid robustness (PASS 6) — survivor = OOS>0 su ENTRAMBI
|
||
|
||
- **PD-high CONT: 3/3 celle** (buffer 0/0.1%/0.3%) positive OOS su BTC **e** ETH → robusto al buffer.
|
||
- PD-high fade, PD-low cont/fade, OR-fade: **0 survivor**.
|
||
- **OR-cont:** positiva solo su ETH, negativa su BTC su tutte le finestre (3/6/8/12h) → artefatto
|
||
mono-asset, scartato dalla regola "entrambi".
|
||
|
||
### Anchor-hour sweep (PASS 5) — non è un'ora fortunata
|
||
|
||
PD-high cont positiva su **21/24** ore UTC (BTC) e **20/24** (ETH). Non dipende da un singolo
|
||
anchor → coerente con un edge reale (ma vedi sotto: è beta di trend).
|
||
|
||
### Fee sweep + per-anno (PD-high cont, full sample)
|
||
|
||
```
|
||
BTC RT%: 0.00→+571 0.05→+289 0.10→+126 0.15→ +31 0.20→ −24 (OOS: +84/+52/+25/+3/−15)
|
||
ETH RT%: 0.00→+1754 0.05→+1012 0.10→+567 0.15→+299 0.20→+139 (OOS: +67/+39/+16/−3/−19)
|
||
BTC per-anno: 2019 +39 2020 +104 2021 +7 2022 −42 2023 +24 2024 +27 2025 −16 2026 +3
|
||
ETH per-anno: 2020 +164 2021 +160 2022 +7 2023 +1 2024 +12 2025 −4 2026 +7
|
||
Sharpe full: BTC +0.48 (maxDD 55%, €/d 2k +0.88) · ETH +0.86 (maxDD 34%, €/d 2k +4.27)
|
||
```
|
||
|
||
- **Fee-fragile:** alla baseline 0.10% RT sopravvive (OOS +25/+16%), ma muore già a ~0.15-0.20% RT.
|
||
Margine di fee sottile (≈1.5x baseline e l'edge sparisce su OOS). ~1000-1100 trade in 8 anni.
|
||
- **Drawdown enormi** (BTC 55%) e anni negativi (2022 −42% BTC, 2025 −16%).
|
||
|
||
## Verdetto
|
||
|
||
- **Sì, esiste un edge net-positivo OOS su entrambi gli asset:** *PD-high continuation* (long
|
||
quando `close` supera il massimo di ieri, exit a fine giornata UTC). Robusto al buffer e
|
||
all'anchor-hour. **MA non è deployabile come miglioramento:**
|
||
1. È **long-only drift capture**, non un breakout simmetrico (il lato short fallisce) → è una
|
||
versione **più debole e ridondante** del Trend Portfolio TP01 (Sharpe 0.48-0.86 vs 1.32).
|
||
2. **Fee-fragile** (muore a ~1.5x la fee baseline) e con **drawdown** molto peggiori.
|
||
- **Il contributo scientifico vero è la conferma della direzione:** sui dati certificati i
|
||
breakout di livello-calendario **CONTINUANO**; il fade è morto (negativo robusto su PD/PW/OR,
|
||
entrambi gli asset). Nessuna sorpresa mean-reversion nascosta nei livelli giornalieri/settimanali.
|
||
- **Niente di nuovo da mettere in produzione.** TP01 resta la strategia vincente; i breakout
|
||
prior-period non aggiungono Sharpe (stessa beta di trend, peggio eseguita).
|
||
|
||
## Come riprodurre
|
||
|
||
```bash
|
||
uv run python scripts/research/trackG_prior_levels.py # full (1h + 15m, ~25s)
|
||
uv run python scripts/research/trackG_prior_levels.py --quick # 1h only
|
||
```
|