Files
PythagorasGoal/docs/diary/2026-05-29-shape.md
T
Adriano 2596687679 feat(shape): SH01 Shape-ML validato come diversificatore + doc
Validazione dura del solo edge sopravvissuto alla ricerca shape (ML walk-forward
LogisticRegression sulle feature di forma). SH01 config W24 H12 th0.58:
- BTC robusto ovunque (expanding +219%/OOS+42% Sharpe2.72 8-9anni; rolling2y
  +166%/+96%; stress leva2x+slippage OK), ETH/ADA solo expanding, LTC/SOL/XRP no.
- Griglia 5/27 robuste su cresta W24/H8-12 -> overfit moderato, config conservativa.
- Free-lunch: corr +0.08 col MASTER, aggiungerlo migliora OOS (Sharpe 4.33->5.10,
  DD 4.7->4.2%). Diversificatore, non motore standalone. Regge fee 0.20% RT.

SH01 come Strategy (in MODULE_MAP) + run() riproducibile. shape_ml_research esteso
con walk-forward rolling (train_window). Live richiede worker con retraining.
Diario 2026-05-29-shape.md, CLAUDE.md famiglia SHAPE-ML.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-29 12:31:26 +02: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.