Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
8.4 KiB
PythagorasGoal
Sistema di riconoscimento pattern frattali e predizione per il trading di criptovalute (BTC, ETH), ispirato al framework teorico di Serleto & Malanga (Pythagoras Trading Prediction).
Obiettivo
Partendo da un capitale iniziale di €1.000, raggiungere un profitto medio di €50 al giorno entro 6–8 mesi, tramite strategie algoritmiche che combinano analisi frattale, squeeze di volatilità e machine learning.
Risultati
Oltre 35 strategie testate su dati storici 2018–2026 (BTC e ETH, timeframe 15m / 1h, fee 0.2% round-trip, leva 3x, posizione 15%). Le migliori:
| Codice | Strategia | Mercato | Accuracy | Trades | Max DD | Robustezza |
|---|---|---|---|---|---|---|
| MT01 | Squeeze + MTF Momentum | BTC 15m | 82.7% | 503 | 5.9% | ✅ 9/9 anni |
| MT01 | Squeeze + MTF Momentum | ETH 15m | 81.2% | 404 | 2.9% | ✅ 9/9 anni |
| PD01 | Price-Volume Divergence | ETH 15m | 80.9% | 465 | 2.3% | ✅ 9/9 anni |
| PD01 | Price-Volume Divergence | BTC 15m | 80.6% | 578 | 2.7% | ✅ 9/9 anni |
| CM01 | Cross-Market Momentum | ETH 15m | 80.6% | 433 | 2.2% | ✅ 9/9 anni |
| AD01 | Adaptive Squeeze | BTC 15m | 79.9% | 1364 | 9.9% | ✅ 9/9 anni |
| SQ02 | Antifake + Volume | BTC 15m | 79.7% | 1250 | 6.5% | ✅ 9/9 anni |
La famiglia squeeze (compressione → espansione di volatilità) è il nucleo comune. Le migliori varianti aggiungono un filtro indipendente: conferma del trend su timeframe superiore (MT01), trend del volume al breakout (PD01), momentum dell'asset correlato (CM01), o soglia di squeeze adattiva al regime di volatilità (AD01). Tutte mantengono accuracy ≥67% in ogni singolo anno dal 2018, con i drawdown più contenuti (2-3%) su ETH.
Come funziona
Volatility Squeeze Breakout
Il meccanismo centrale sfrutta i cicli naturali di compressione ed espansione della volatilità:
- Compressione — le Bollinger Bands entrano dentro i Keltner Channel (il prezzo si muove sempre meno, accumulando "energia").
- Breakout — le bande escono dal canale. Un impulso direzionale parte.
- Filtri — anti-fakeout (scarta breakout con retrace >60%) + volume confirmation (breakout >1.3× media).
- ML opzionale — un modello GradientBoosting (GBM), addestrato walk-forward su feature strutturali, conferma la direzione e filtra i segnali deboli.
Filtri di conferma indipendenti
Le varianti più recenti aggiungono un singolo filtro di conferma al breakout, ciascuno motivato da una dinamica di mercato reale (non da ottimizzazione dei parametri):
- MT01 — Multi-timeframe momentum. Entra solo se la EMA su timeframe orario conferma il trend nella direzione del breakout. Filtra i breakout controtendenza.
- PD01 — Price-volume divergence. Richiede che il volume sia in crescita al momento del breakout, non solo elevato: un breakout su volume calante è debole e viene scartato.
- CM01 — Cross-market momentum. Entra solo se l'asset correlato (BTC ↔ ETH) mostra momentum nella stessa direzione nelle ultime barre.
- AD01 — Adaptive squeeze. La soglia di squeeze si adatta al regime di volatilità: più selettiva nei mercati agitati, più permissiva in quelli calmi.
Feature ML (44 dimensioni)
- Rapporti body/shadow normalizzati su finestre multiple (12, 24, 48 candele)
- Momentum, volatilità, skewness, kurtosis dei rendimenti logaritmici
- Autocorrelazione lag-1 e profilo volumetrico
- Durata della fase di squeeze e rapporto di espansione Keltner
- Posizione del prezzo rispetto al range recente e ATR normalizzato
Struttura progetto
PythagorasGoal/
├── src/
│ ├── data/ # Download e gestione dati (Cerbero MCP + Binance)
│ ├── fractal/ # Indicatori frattali: Hurst, Higuchi FD, self-similarity
│ ├── backtest/ # Motore di backtesting con fee e metriche
│ ├── strategies/ # Classe base Strategy ABC + indicatori condivisi
│ │ ├── base.py # Strategy, Signal, BacktestResult, YearlyStats
│ │ └── indicators.py # keltner_ratio, detect_squeezes, ema, atr, rv, corr
│ └── live/ # Paper trading live su Deribit testnet
│ ├── multi_runner.py # Orchestratore multi-strategia
│ ├── strategy_worker.py # Worker indipendente con stato persistente
│ ├── strategy_loader.py # Import dinamico classi Strategy
│ ├── cerbero_client.py # Client HTTP per Cerbero MCP
│ ├── signal_engine.py # Squeeze + ML real-time (per ML01)
│ └── telegram_notifier.py
├── scripts/
│ ├── strategies/ # Strategie attive (SQ01-SQ04, ML01, MT01, PD01, CM01, AD01)
│ ├── waste/ # Strategie scartate (W01-W28)
│ └── analysis/ # Script di confronto e report
├── strategies.yml # Config multi-strategy paper trader
├── data/
│ └── raw/ # Parquet OHLCV (gitignored, ~70 MB)
├── docs/
│ ├── diary/ # Diario di ricerca giornaliero
│ └── specs/ # Specifiche di design
├── Dockerfile
├── docker-compose.yml
└── pyproject.toml
Strategie attive
Tutte le strategie estendono src.strategies.base.Strategy con interfaccia comune: generate_signals() → backtest() → report().
| Codice | Script | Tipo | Descrizione |
|---|---|---|---|
| SQ01 | SQ01_squeeze_base.py |
Regole | Squeeze breakout puro |
| SQ02 | SQ02_squeeze_antifake_vol.py |
Regole | Squeeze + antifakeout + volume confirm |
| SQ03 | SQ03_squeeze_all_filters.py |
Regole | Squeeze + filtri selezionabili (9 preset) |
| SQ04 | SQ04_squeeze_ultimate.py |
Regole | Combo incrementali con correlazione/trend |
| ML01 | ML01_squeeze_gbm.py |
ML | Squeeze + GBM walk-forward |
| MT01 | MT01_squeeze_mtf_momentum.py |
Regole | Squeeze 15m + conferma trend EMA 1h (max accuracy) |
| PD01 | PD01_price_volume_divergence.py |
Regole | Squeeze + trend del volume al breakout (DD minimo) |
| CM01 | CM01_cross_market_momentum.py |
Regole | Squeeze + momentum dell'asset correlato (BTC ↔ ETH) |
| AD01 | AD01_adaptive_squeeze.py |
Regole | Squeeze con soglia adattiva al regime di volatilità |
Per eseguire il backtest di una strategia:
uv run python scripts/strategies/MT01_squeeze_mtf_momentum.py
Per il confronto completo per anno e mercato:
uv run python scripts/analysis/yearly_market_report.py
Paper Trading Live
Il multi-strategy runner esegue N strategie in parallelo su dati live da Cerbero MCP, ognuna con €1000 USDC virtuali indipendenti.
Avvio
# Locale
uv run python -m src.live.multi_runner
# Docker
docker compose up -d
Configurazione
Le strategie attive sono definite in strategies.yml:
defaults:
capital: 1000
position_size: 0.15
leverage: 3
strategies:
- name: SQ02_antifake_vol
asset: BTC
tf: 15m
enabled: true
Per aggiungere una strategia: nuova riga in strategies.yml, poi docker compose restart. Lo storico delle strategie esistenti rimane intatto.
Persistenza
Ogni strategia ha la sua directory in data/paper_trades/:
data/paper_trades/
SQ02_antifake_vol__BTC__15m/
trades.jsonl # Storico trade append-only
status.json # Stato corrente (resume al restart)
Notifiche Telegram per ogni trade (richiede TELEGRAM_BOT_TOKEN e TELEGRAM_CHAT_ID in .env).
Setup
# Clona e installa
git clone <repo-url> && cd PythagorasGoal
uv sync
# Scarica dati storici (~70 MB)
uv run python -m src.data.downloader
# Backtest strategia migliore
uv run python scripts/strategies/MT01_squeeze_mtf_momentum.py
# Paper trading live
uv run python -m src.live.multi_runner
Requisiti
- Python ≥ 3.11
- uv come package manager
- Accesso a Cerbero MCP (
cerbero-mcp.tielogic.xyz) per dati Deribit live - Docker (opzionale, per deploy su VPS)
Dati
| Asset | Timeframe | Candele | Copertura |
|---|---|---|---|
| BTC | 5m / 15m / 1h | 883K / 294K / 74K | 2018-01 → oggi |
| ETH | 5m / 15m / 1h | 882K / 294K / 74K | 2018-01 → oggi |
Fonte primaria: Deribit perpetual via Cerbero MCP. Fallback: Binance spot via ccxt. Formato: Apache Parquet.
Riferimenti
- Serleto, L. & Malanga, C. — Pythagoras Trading Prediction (2024)
- Serleto, L. & Malanga, C. — Libro dei Frattali (2024)
Licenza
Uso privato. Non destinato alla distribuzione.