| # SAC Crypto Trading Agent — BTC/USDT |
|
|
| Agent de trading crypto basé sur **Soft Actor-Critic (SAC)** entraîné sur les données historiques BTC/USDT. |
|
|
| ## 📊 Résultats (Backtest sur données de test) |
|
|
| | Métrique | SAC Agent | Buy & Hold | |
| |----------|-----------|------------| |
| | Rendement Total | **-4.57%** | -17.26% | |
| | Sharpe Ratio | **-0.024** | -0.117 | |
| | Max Drawdown | **29.54%** | 48.49% | |
| | Portfolio Final | **$95,431** | $82,736 | |
|
|
| **L'agent surperforme le Buy & Hold de +12.7 points de pourcentage** pendant une période baissière (déc 2024 - avr 2026), avec un drawdown maximal réduit de moitié. |
|
|
| ## 🏗️ Architecture |
|
|
| - **Algorithme** : SAC (Soft Actor-Critic) via Stable Baselines 3 |
| - **Environnement** : Gymnasium custom, inspiré de FinRL-Meta |
| - **State** : balance normalisée + prix z-score + holdings + indicateurs techniques (MACD, RSI, CCI, DX, SMA, Bollinger Bands) |
| - **Action** : espace continu [-1, 1] (vente maximale → achat maximal) |
| - **Reward** : ΔPortfolio × scaling factor |
|
|
| ## 📈 Recette d'entraînement |
|
|
| Basée sur [FinRL-Meta](https://arxiv.org/abs/2304.13174) et [FinRL-Contest](https://arxiv.org/abs/2501.10709). |
|
|
| | Paramètre | Valeur | |
| |-----------|--------| |
| | Dataset | [linxy/CryptoCoin](https://hf.co/datasets/linxy/CryptoCoin) (Binance OHLCV) | |
| | Symbole | BTCUSDT daily | |
| | Training timesteps | 200,000 | |
| | Learning rate | 3e-4 | |
| | Batch size | 64 | |
| | Buffer size | 100,000 | |
| | Network | MLP [64, 32] | |
| | Gamma | 0.99 | |
| | Tau | 0.005 | |
| | Entropy coeff | auto | |
| | Commission | 0.1% | |
| | Capital initial | $100,000 | |
|
|
| ## 📅 Périodes |
|
|
| - **Train** : 17 août 2017 → 12 sept 2023 (2218 jours) |
| - **Validation** : 13 sept 2023 → 30 déc 2024 (475 jours) |
| - **Test** : 31 déc 2024 → 28 avr 2026 (476 jours) |
|
|
| ## 🚀 Utilisation |
|
|
| ```python |
| from stable_baselines3 import SAC |
| from stable_baselines3.common.vec_env import DummyVecEnv, VecNormalize |
| import pickle |
| |
| # Charger le modèle |
| model = SAC.load("sac_crypto_final") |
| |
| # Charger le normalisateur |
| # vec_normalize = VecNormalize.load("vec_normalize.pkl", venv) |
| |
| # Prédire une action |
| action, _ = model.predict(observation, deterministic=True) |
| # action > 0 → acheter, action < 0 → vendre |
| ``` |
|
|
| ## 📚 Références |
|
|
| 1. FinRL-Meta: A Universe of Near-Real Market Environments (arXiv:2304.13174) |
| 2. FinRL-Contest: Ensemble Methods for FinRL (arXiv:2501.10709) |
| 3. SAC: Soft Actor-Critic (arXiv:1801.01290, Haarnoja et al.) |
|
|
| ## ⚠️ Disclaimer |
|
|
| Ce modèle est fourni à des fins de recherche et d'éducation uniquement. Il ne constitue pas un conseil financier. Les performances passées ne garantissent pas les résultats futurs. Le trading de crypto-monnaies comporte des risques significatifs de perte en capital. |
|
|