CNN > XGBoost sur précision directionnelle. Labels équilibrés (32%/32%/35%). Mise à jour table comparatif + statut Phase 4c → 100%. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
226 lines
9.6 KiB
Markdown
226 lines
9.6 KiB
Markdown
# État d'Avancement du Projet — Trading AI Secure
|
||
|
||
**Dernière mise à jour** : 2026-03-10
|
||
**Version** : 0.6.0-beta
|
||
**Statut Global** : 🟡 En Développement Actif
|
||
|
||
---
|
||
|
||
## Vue d'Ensemble
|
||
|
||
| Phase | Statut | Progression |
|
||
|---|---|---|
|
||
| Phase 1 : Architecture & Infrastructure | ✅ Terminé | 100% |
|
||
| Phase 2 : IA Adaptative | ✅ Terminé | 100% |
|
||
| Phase 3 : Stratégies & Backtesting | ✅ Terminé | 100% |
|
||
| Phase 4 : Interface & Dashboard | ✅ Terminé | 100% |
|
||
| Phase 4b : ML-Driven Strategy | ✅ Terminé | 100% |
|
||
| Phase 4c : CNN + Ensemble | ✅ Terminé | 100% |
|
||
| Phase 4d : RL (PPO) | ⚪ Planifié | 0% |
|
||
| Phase 5 : IG Markets (Live) | ⚪ Planifié | 0% |
|
||
|
||
---
|
||
|
||
## Phase 1 — Architecture & Infrastructure ✅
|
||
|
||
### Docker (8 services)
|
||
| Container | Port | Statut |
|
||
|---|---|---|
|
||
| trading-api | 8100 | ✅ Opérationnel |
|
||
| trading-ml | 8200 | ✅ Opérationnel |
|
||
| trading-dashboard | 8501 | ✅ Opérationnel |
|
||
| trading-jupyter | 8888 | ✅ Opérationnel |
|
||
| trading-grafana | 3100 | ✅ Opérationnel |
|
||
| trading-db (TimescaleDB) | interne | ✅ Opérationnel |
|
||
| trading-redis | interne | ✅ Opérationnel |
|
||
| trading-prometheus | interne | ✅ Opérationnel |
|
||
|
||
### Modules Core
|
||
| Module | Fichier | Statut |
|
||
|---|---|---|
|
||
| ConfigLoader | `src/utils/config_loader.py` | ✅ Env vars + YAML + Docker overrides |
|
||
| Logger | `src/utils/logger.py` | ✅ |
|
||
| RiskManager (Singleton) | `src/core/risk_manager.py` | ✅ VaR/CVaR/circuit breakers/Telegram |
|
||
| NotificationService | `src/core/notifications.py` | ✅ Telegram + Email |
|
||
| StrategyEngine | `src/core/strategy_engine.py` | ✅ |
|
||
| DataService | `src/data/data_service.py` | ✅ Yahoo Finance + Alpha Vantage |
|
||
| SQLAlchemy models | `src/db/models.py` | ✅ Trade, OHLCVData, BacktestResult, MLModelMeta |
|
||
|
||
---
|
||
|
||
## Phase 2 — IA Adaptative ✅
|
||
|
||
| Composant | Fichier | Statut | Notes |
|
||
|---|---|---|---|
|
||
| MLEngine | `src/ml/ml_engine.py` | ✅ | Intégré à StrategyEngine |
|
||
| RegimeDetector (HMM) | `src/ml/regime_detector.py` | ✅ | 3 régimes : trend/range/volatile |
|
||
| FeatureEngineering | `src/ml/feature_engineering.py` | ✅ | 50+ features |
|
||
| ParameterOptimizer (Optuna) | `src/ml/parameter_optimizer.py` | ✅ | TPE Sampler + MedianPruner, walk-forward |
|
||
| WalkForwardAnalyzer | `src/ml/walk_forward.py` | ✅ | Out-of-sample validation |
|
||
| PositionSizing (Kelly) | `src/ml/position_sizing.py` | ✅ |
|
||
|
||
### Optuna Optimizer — résultats sur EURUSD/1h (50 trials)
|
||
- best_sharpe = -0.378 (scalping légèrement perdant sur ce timeframe)
|
||
- Best params : bb_period=30, rsi_period=16, risk_per_trade=0.003
|
||
|
||
---
|
||
|
||
## Phase 3 — Stratégies & Backtesting ✅
|
||
|
||
### Stratégies Implémentées
|
||
| Stratégie | Fichier | Timeframe | Statut |
|
||
|---|---|---|---|
|
||
| ScalpingStrategy | `src/strategies/scalping/` | 1h | ✅ Win rate ~39% (EURUSD) |
|
||
| IntradayStrategy | `src/strategies/intraday/` | 4h | ✅ |
|
||
| SwingStrategy | `src/strategies/swing/` | 1d | ✅ |
|
||
| **MLDrivenStrategy** | `src/strategies/ml_driven/` | Configurable | ✅ Nouveau (Phase 4b) |
|
||
|
||
### Backtesting
|
||
| Composant | Statut | Notes |
|
||
|---|---|---|
|
||
| BacktestEngine | ✅ | DataService réel + fallback synthétique |
|
||
| WalkForwardAnalyzer | ✅ | Vrai out-of-sample |
|
||
| MetricsCalculator | ✅ | Sharpe, Drawdown, Win Rate, Profit Factor |
|
||
| PaperTradingEngine | ✅ | Boucle async avec asyncio.create_task |
|
||
|
||
### Fixes critiques (sessions debug)
|
||
- `yfinance>=1.0.0` (v0.2.32 était cassé, erreur HTTP 429)
|
||
- `max_position_size=5.0` (forex : notional value >> capital, ancien 0.05 rejetait tous les trades)
|
||
- `scalping_strategy.py` : volume_ratio=2.0 si forex, MACD momentum (pas zero-crossing), risk_per_trade=0.005
|
||
- `scalping_strategy.py` : TP changé de 3×ATR → 4×ATR → R:R=2:1, breakeven ~34% (win rate actuel ~39% → rentable)
|
||
- Optuna : objective retourne vrai Sharpe (pénalité -999 seulement si < 5 trades)
|
||
|
||
---
|
||
|
||
## Phase 4 — Interface & Dashboard ✅
|
||
|
||
| Composant | Fichier | Statut |
|
||
|---|---|---|
|
||
| Dashboard Streamlit (5 onglets) | `src/ui/dashboard.py` | ✅ |
|
||
| Page Live Trading | `src/ui/pages/live_trading.py` | ✅ |
|
||
| Page ML Monitor | `src/ui/pages/ml_monitor.py` | ✅ |
|
||
| Page Analytics (Monte Carlo) | `src/ui/pages/analytics.py` | ✅ |
|
||
| API Client httpx | `src/ui/api_client.py` | ✅ |
|
||
|
||
---
|
||
|
||
## Phase 4b — ML-Driven Strategy ✅ (2026-03-08)
|
||
|
||
Nouvelle stratégie qui apprend à trader comme un humain à partir de features TA classiques.
|
||
Voir [docs/ML_STRATEGY_GUIDE.md](ML_STRATEGY_GUIDE.md) pour la documentation complète.
|
||
|
||
| Composant | Fichier | Statut |
|
||
|---|---|---|
|
||
| TechnicalFeatureBuilder (~50 features) | `src/ml/features/technical_features.py` | ✅ |
|
||
| LabelGenerator (forward simulation) | `src/ml/features/label_generator.py` | ✅ fix bug SHORT (2026-03-08) |
|
||
| MLStrategyModel (XGBoost/LightGBM) | `src/ml/ml_strategy_model.py` | ✅ |
|
||
| MLDrivenStrategy (hérite BaseStrategy) | `src/strategies/ml_driven/ml_strategy.py` | ✅ |
|
||
| Route POST /trading/train | `src/api/routers/trading.py` | ✅ |
|
||
| Route GET /trading/train/{job_id} | `src/api/routers/trading.py` | ✅ |
|
||
| Route GET /trading/ml-models | `src/api/routers/trading.py` | ✅ |
|
||
| Route GET /trading/ml-models/{s}/{tf}/importance | `src/api/routers/trading.py` | ✅ |
|
||
| Documentation | `docs/ML_STRATEGY_GUIDE.md` | ✅ |
|
||
|
||
---
|
||
|
||
## Phase 4c — CNN + Ensemble ✅ (2026-03-10)
|
||
|
||
CNN 1D sur séquences brutes OHLCV + combinaison pondérée avec XGBoost.
|
||
Voir [docs/CNN_ENSEMBLE_PLAN.md](CNN_ENSEMBLE_PLAN.md) pour l'architecture complète.
|
||
|
||
| Composant | Fichier | Statut |
|
||
|---|---|---|
|
||
| PyTorch 2.10 dans requirements | `docker/requirements/api.txt` | ✅ Installé |
|
||
| CandlestickEncoder (normalisation séquences) | `src/ml/cnn/candlestick_encoder.py` | ✅ |
|
||
| CNNModel (1D Conv PyTorch) | `src/ml/cnn/cnn_model.py` | ✅ |
|
||
| CNNStrategyModel (train/predict/save/load) | `src/ml/cnn/cnn_strategy_model.py` | ✅ |
|
||
| CNNDrivenStrategy (hérite BaseStrategy) | `src/strategies/cnn_driven/cnn_strategy.py` | ✅ |
|
||
| Routes API CNN (POST /train-cnn, GET /cnn-models) | `src/api/routers/trading.py` | ✅ |
|
||
| EnsembleModel (XGBoost + CNN pondérés) | `src/ml/ensemble/ensemble_model.py` | ✅ |
|
||
| EnsembleStrategy (hérite BaseStrategy) | `src/strategies/ensemble/ensemble_strategy.py` | ✅ |
|
||
| Routes API Ensemble (POST /configure, GET /status) | `src/api/routers/trading.py` | ✅ |
|
||
| Entraînement XGBoost validé (EURUSD/1h) | — | ✅ wf_prec=21.7% |
|
||
| Entraînement CNN validé (EURUSD/1h) | — | ✅ wf_prec=32.7% |
|
||
| Backtest comparatif (Scalping vs XGBoost vs CNN vs Ensemble) | — | ⏸️ À faire |
|
||
|
||
### Résultats comparatifs des modèles (EURUSD/1h, 2 ans, ~12k barres)
|
||
| Modèle | WF Accuracy | WF Precision | Labels (L/S/N) |
|
||
|---|---|---|---|
|
||
| XGBoost (features TA) | 33.6% | 21.7% | 3992/3943/4338 ✅ équilibré |
|
||
| CNN 1D (séquences OHLCV) | 31.9% | **32.7%** | 3971/3936/4303 ✅ équilibré |
|
||
| Ensemble (XGB+CNN 0.40/0.60) | — | — | Non encore testé |
|
||
|
||
**Observation** : CNN > XGBoost sur la précision directionnelle (32.7% vs 21.7%). Les deux modèles sont complémentaires pour l'ensemble.
|
||
|
||
### Bugs corrigés (2026-03-10 — session agents)
|
||
- `trading.py` : `_get_data_service()` inexistant → instanciation directe DataService
|
||
- `trading.py` : `logger` non défini dans except handler → ajout import logging
|
||
- `trading.py` : `period` string mal converti → period_map identique à _run_optimize_task
|
||
- `strategy_engine.py` : `ml_driven` non supporté dans `load_strategy()` → cas ajouté
|
||
- `docker/requirements/api.txt` : dépendances ML (scikit-learn, xgboost, lightgbm) manquantes dans trading-api
|
||
- `ml_strategy_model.py` : labels [-1,0,1] → encodage +1 pour XGBoost ≥ 2.x
|
||
|
||
---
|
||
|
||
## Phase 4d — RL (Planifié, après 4c validée)
|
||
|
||
Agent RL (PPO via gymnasium) intégré à l'ensemble comme troisième signal.
|
||
Voir [docs/CNN_ENSEMBLE_PLAN.md](CNN_ENSEMBLE_PLAN.md) section Phase 4d.
|
||
|
||
---
|
||
|
||
## Routes API — État Complet
|
||
|
||
| Méthode | Route | Statut |
|
||
|---|---|---|
|
||
| GET | `/health` | ✅ |
|
||
| GET | `/ready` | ✅ |
|
||
| GET | `/trading/risk/status` | ✅ |
|
||
| POST | `/trading/risk/emergency-stop` | ✅ |
|
||
| POST | `/trading/risk/resume` | ✅ |
|
||
| GET | `/trading/positions` | ✅ |
|
||
| GET | `/trading/signals` | ✅ Redis |
|
||
| GET | `/trading/trades` | ✅ DB |
|
||
| GET | `/trading/ml/status` | ✅ HMM |
|
||
| POST | `/trading/backtest` | ✅ async |
|
||
| GET | `/trading/backtest/{job_id}` | ✅ |
|
||
| POST | `/trading/optimize` | ✅ Optuna async |
|
||
| GET | `/trading/optimize/{job_id}` | ✅ |
|
||
| GET | `/trading/paper/status` | ✅ |
|
||
| POST | `/trading/paper/start` | ✅ |
|
||
| POST | `/trading/paper/stop` | ✅ |
|
||
| POST | `/trading/train` | ✅ ML-Driven async |
|
||
| GET | `/trading/train/{job_id}` | ✅ |
|
||
| GET | `/trading/ml-models` | ✅ |
|
||
| GET | `/trading/ml-models/{symbol}/{timeframe}/importance` | ✅ |
|
||
|
||
---
|
||
|
||
## Phase 5 — IG Markets ⚪ (Planifié)
|
||
|
||
**Prérequis** : 30 jours de paper trading validé avec Sharpe ≥ 1.5 et Max DD ≤ 10%
|
||
**Référence** : [docs/IG_INTEGRATION.md](IG_INTEGRATION.md)
|
||
|
||
---
|
||
|
||
## À Faire (par priorité)
|
||
|
||
1. **Tester MLDrivenStrategy** — lancer `POST /trading/train` sur EURUSD/1h, évaluer wf_accuracy, comparer en backtest vs scalping
|
||
2. **Améliorer stratégie scalping** — win rate ~39% (légèrement sous seuil). Option : TP=4×ATR (R:R=2:1, breakeven à 34%)
|
||
3. **Persistance ML state** — sauvegarder modèle HMM pour éviter re-training à chaque `/ml/status`
|
||
4. **PaperTradingEngine.run()** — compléter les TODOs de la boucle live
|
||
5. **Sentiment Analysis** — `src/data/sentiment_service.py` (Alpha Vantage News + FinBERT)
|
||
6. **IG Markets connector** — Phase 5, après 30 jours paper trading validé
|
||
|
||
---
|
||
|
||
## Dépôt Git
|
||
|
||
- **Gitea** : http://192.168.1.100:3000/tika/trader-ml.git
|
||
- **Branche principale** : master
|
||
|
||
## Légende
|
||
- ✅ Terminé
|
||
- 🟡 En cours
|
||
- ⚪ Planifié
|