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>
This commit is contained in:
@@ -0,0 +1,84 @@
|
||||
# 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:
|
||||
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.
|
||||
Reference in New Issue
Block a user