# 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
```
