- data/paper_trades/ rimosso dal tracking (dati runtime, gitignored) - scripts/analysis/yearly_market_report.py: accuracy/trades/PnL per anno×mercato Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
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 30 strategie testate su dati storici 2018–2026 (BTC e ETH, timeframe 15m / 1h). Le migliori:
| Codice | Strategia | Accuracy | Trades | Max DD | €/giorno | Robustezza |
|---|---|---|---|---|---|---|
| SQ02 | Antifake+Vol BTC 15m | 79.7% | 1250 | 6.5% | €5.23 | ✅ 9/9 anni |
| ML01 | Squeeze+GBM BTC 15m | 79.1% | 1929 | 5.5% | €8.45 | ✅ 5/5 anni |
| SQ02 | Antifake+Vol ETH 15m | 78.6% | 942 | 3.4% | €4.33 | 8/9 anni |
| SQ02 | Antifake+Vol BTC 1h | 78.0% | 473 | 3.5% | €3.85 | ✅ 9/9 anni |
| SQ01 | Squeeze Base ETH 15m | 76.4% | 2948 | 6.2% | €10.31 | 9/9 anni |
| ML01 | Squeeze+GBM ETH 15m | 76.7% | 1210 | 4.2% | €11.12 | 5/5 anni |
La strategia più robusta (SQ02 BTC 15m) mantiene accuracy ≥73% ogni anno dal 2018 con Sharpe 5.01.
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.
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)
│ ├── waste/ # Strategie scartate (W01-W22)
│ └── 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 |
Per eseguire il backtest di una strategia:
uv run python scripts/strategies/SQ02_squeeze_antifake_vol.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/SQ02_squeeze_antifake_vol.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.