Files
trader-ml/docs/PROJECT_STATUS.md
Tika 6fd68af47a docs: Phase 4c terminée — résultats XGBoost (wf_prec=21.7%) et CNN (wf_prec=32.7%)
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>
2026-03-10 19:50:20 +00:00

226 lines
9.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# É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é