Files
PythagorasGoal/Old/docs/diary/2026-05-29-shape.md
T
Adriano Dal Pastro 14522262e6 chore(reset): v2.0.0 — storico certificato Deribit mainnet, ripartenza pulita
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>
2026-06-19 15:20:59 +00:00

5.1 KiB
Raw Blame History

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 , soprattutto su BTC, e vale come diversificatore quasi-scorrelato del MASTER. Da fare prima del live:

  1. Worker con retraining periodico (lo StrategyWorker attuale è a regola fissa; SH01 riallena il modello → serve un loop tipo legacy signal_engine).
  2. Validazione live-path (replay worker == backtest) come fatto per i pairs.
  3. Decidere il peso nel MASTER-esteso (cap, leva) col paper trader.