Reset del progetto su fondamenta verificate dopo la scoperta che l'intera libreria "validata OOS" era artefatto di feed contaminato (print fantasma del feed Cerbero TESTNET + storico Binance/USDT). - Storico ricostruito da Deribit MAINNET (ccxt pubblico, tokenless) e CERTIFICATO (certify_feed.py): BTC/ETH puliti su TUTTA la storia (mediana 2-6 bps vs Coinbase USD), integrita' OHLC + coerenza resample (maxΔ 0.00) + cross-venue OK. Alt esclusi (illiquidi/divergenti: LTC/DOGE 50-82% barre flat; XRP/BNB non certificabili). - Verdetto sul feed pulito: FADE / PAIRS / XS01 / TSM01 morti (ogni portafoglio Sharpe -2.3..-3.0, DD ~40%); solo SH01 e frammenti HONEST con segnale residuo, da ri-validare in isolamento. - Cleanup "restart pulito": strategie, stack live (src/live, src/portfolio, runner/executor, yml, docker), ~100 script ricerca/gate, waste/games/ portfolios, dati non certificati + cache e 60+ diari -> archiviati in Old/ (preservati, non cancellati). Diario consolidato in un unico documento. - Skeleton ricerca tenuto: Strategy ABC + indicatori + src/fractal + src/backtest/engine + load_data; tool dati certificati (rebuild_history, certify_feed, audit_feed, multi_source_check). - Universo dati ATTIVO: solo BTC/ETH (5m/15m/1h); guardrail fisico (load_data su alt -> FileNotFoundError). Esecuzione DISABILITATA, conto flat. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
5.1 KiB
Diario — 2026-05-29 — Pattern del segnale per FORMA (analog/shape forecasting)
Obiettivo
Verificare se la forma del segnale (la morfologia recente del prezzo) permette di
prevedere l'andamento successivo, e ricavarne edge verso il target €1000 → €50/giorno.
Esplorazione onesta (no look-ahead, netto fee, OOS) con agenti paralleli, ognuno su
una famiglia di forma indipendente, tutti sullo stesso harness shape (scripts/analysis/ shape_lab.py, che riusa l'engine netto-fee+OOS di explore_lab.py). Branch shape_patterns.
Harness
shape_lab.py — analog forecasting causale: a ogni barra i si guarda la forma recente
W (closes z-normalizzati fino a close[i]), si cercano nel passato le K finestre più
simili il cui esito a H barre era già noto prima di i (KDTree ricostruito ogni
rebuild barre → niente O(N²)), si prevede la direzione = segno del rendimento medio degli
analoghi. No-look-ahead verificato (perturbare il futuro non cambia la forma a i,
max diff 0.0). Baseline forma grezza: marginale e muore sulle fee (W24H12K50: FULL
+112% / OOS +48% ma a 0.20% RT → −72%; troppi trade, exp 74%, win 49.5%).
Famiglie esplorate (5) ed esito onesto
| Famiglia | Esito | Note |
|---|---|---|
| Analog kNN (forma grezza, selettività) | ❌ RUMORE | Solo BTC-overfit, non robusto ≥2 asset |
| Encoding candele (UP/DOWN/DOJI + body/shadow) | ❌ RUMORE | Hit-rate condizionale ~50%, segno incoerente fra asset |
| DTW + template geometrici (M/W, testa-spalle, V, U) | ❌ RUMORE | DTW peggiora l'euclidea; template overfit (FULL ok, OOS crolla) |
| PIP / pivot / zig-zag (geometria svolte) | ❌ RUMORE | 0/48 config robuste; le rotture S/R rientrano (riconferma MR) |
| Feature-vector + ML walk-forward | ✅ EDGE REALE | LogisticRegression sulla forma, fee-robusto |
4 famiglie su 5 sono rumore: riconfermano che la forma grezza non contiene edge direzionale eseguibile e che l'unico edge "classico" resta la mean-reversion (fade/pairs).
L'edge: SH01 — Shape-ML
Una LogisticRegression legge 17 feature di forma (body/shadow ratio, rendimenti,
pendenza/curvatura del path, posizione di max/min, RSI, estensione) e predice il segno del
rendimento a H barre. Walk-forward rigoroso: scaler+modello fittati solo sul passato
con esito noto, poi predicono il blocco corrente; si entra a close[i] se la probabilità
≥ soglia. Causalità verificata con check espliciti (feature e predizioni invarianti al
futuro). Il GradientBoosting dà edge equivalente ma è ~60× più lento → si usa il logit.
A differenza della famiglia squeeze (che moriva anche a fee zero), questo edge sopravvive a fee 0.20% RT. Win-rate ~50% → l'edge è nell'asimmetria (quando indovina la direzione i moti sono più grandi), non nella frequenza.
Validazione dura (config W24 H12 th0.58, netto fee, leva 3x, pos 0.15, OOS 30%)
- Multi-asset expanding: robusti BTC (FULL +219% / OOS +42% / Sharpe 2.72 / DD 23% / 8-9 anni+ / accOOS 56%), ETH (+80% / +144% / Sharpe 1.21, più volatile), ADA (+707% / +57% / Sharpe 3.22). Scartati LTC/SOL/XRP (perdono netti).
- Walk-forward rolling (train fisso 2 anni): regge solo BTC (+166% / +96% / Sharpe 2.05). L'edge si appoggia in parte alla memoria lunga → BTC è il più solido.
- Stress leva 2x + slippage doppio (0.20% RT): BTC OK (+40% / +17% / Sharpe 1.24), ETH marginale (+7% / +73% / Sharpe 0.37).
- Griglia (W,H,thresh) su BTC: 5/27 celle robuste, su una cresta stretta (W24, H8-12), non altopiano largo → rischio overfit moderato. Per prudenza si sceglie la config robusta sul maggior numero di test (W24 H12 th0.58), non il PnL massimo (W24 H8 rende di più ma accOOS ~49% = più drift che segnale).
Il valore vero: diversificatore di portafoglio
Correlazione daily col MASTER +0.08 (quasi scorrelato). Aggiungere lo sleeve shape (BTC+ETH) al MASTER migliora l'OOS: Sharpe 4.33 → 5.10, DD 4.7% → 4.2% (FULL: Sharpe 4.23 → 4.37, DD 5.2% → 4.3%). Non è un motore standalone (per-asset troppo stretto fuori da BTC), ma un free-lunch da aggiungere al paniere.
Artefatti
scripts/analysis/shape_lab.py— harness analog/forma causale.scripts/analysis/shape_{analog,candle,template,pivot,ml}_research.py— le 5 ricerche.scripts/analysis/shape_ml_validate.py— validazione dura del candidato ML.scripts/strategies/SH01_shape_ml.py— la strategia (Strategy + run() riproducibile).- Aggiunta a
MODULE_MAP(caricabile per backtest).
Conclusione e prossimi passi
La forma del segnale non predice in modo grezzo (4/5 famiglie rumore), ma un modello lineare sulle feature di forma in walk-forward onesto sì, soprattutto su BTC, e vale come diversificatore quasi-scorrelato del MASTER. Da fare prima del live:
- Worker con retraining periodico (lo StrategyWorker attuale è a regola fissa; SH01 riallena il modello → serve un loop tipo legacy signal_engine).
- Validazione live-path (replay worker == backtest) come fatto per i pairs.
- Decidere il peso nel MASTER-esteso (cap, leva) col paper trader.