Files
PythagorasGoal/docs/diary/2026-06-19-trackC-meanrev.md
Adriano Dal Pastro d152941360 integra(TP01): merge ricerca branch strategy-research-2026-06 (squash) — strategia vincente + harness + track A-E
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>
2026-06-19 18:55:04 +00:00

4.1 KiB
Raw Permalink Blame History

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).