Système de trading algorithmique dual-asset (XAUUSD + BTCUSD) pour comptes FTMO. Reinforcement Learning (SAC + LSTM), news intelligence multi-LLM, et garde FTMO intégrée. Compatible Windows et macOS.
┌──────────────┐
News (RSS) ─────► │ Sentiment │ ─► current_signal.json
Macro feeds ─────► │ pipeline │ btc_signal.json
│ (Groq/Gemini │
│ FinBERT) │
└──────┬───────┘
│
▼
cTrader ─── ZMQ:7777 ───► Sillage bridge XAU ──┐
cTrader ─── ZMQ:7778 ───► Sillage bridge BTC ──┤── SAC RL model (PyTorch)
│ FTMO guard
│ Kelly + Decay engines
▼
state.json / btc_state.json
journal/, logs/
- Argent réel. Sillage a été conçu pour un compte FTMO $100K. Le code inclut une garde drawdown FTMO mais aucun système n'est infaillible. Vous êtes seul responsable de vos pertes.
- Aucune garantie. Les performances historiques (cf. plus bas) ne préjugent pas des performances futures. Validez toujours sur OOS avant de passer en live.
- Code as-is. Pas de support officiel. Le repo public est un partage technique, pas un produit fini.
- Ce qui est dans le repo (et ce qui n'y est pas)
- Prérequis
- Installation
- Configuration des API (
.env) - cTrader + cBot ZMQ
- Données historiques et modèles
- Premier lancement
- Monitoring
- Backtests OOS
- Re-entraînement hebdomadaire
- Personnaliser le LLM (votre IA)
- Garde FTMO et urgences
- Dépannage
- Architecture interne (référence)
- Licence
✅ Inclus
- Bridges Python (
kairos_bridge_v15.pyXAU,kairos_bridge_v15_btc.pyBTC) - Modèle SAC + environnement training (
vast_training/sac_v15_elite.py) - Pipeline news multi-source (
mistral_finetune/news_collector_v2.py,news_collector_btc.py) - Engines : Kelly sizing, Performance Decay, Portfolio Coordinator, Risk Budget
- Scripts de backtest OOS (XAU + BTC, "bridge-parity")
- Scripts de re-entraînement hebdomadaire
- Launchers
.bat(Windows) et.sh(macOS / Linux)
❌ Pas inclus (vous devrez les obtenir/générer)
.env: vos clés API (cf..env.example)- Modèles entraînés (
*.pt) : trop lourds pour GitHub (>100 MB chacun). Deux options :- Re-entraîner depuis zéro avec
scripts/monday_retrain.py --force(nécessite des données historiques + GPU recommandé) - Demander un transfert privé à l'auteur du repo
- Re-entraîner depuis zéro avec
- Données historiques (
tia/data/,tia/data_btc/) : parquets OHLC + features. À générer viascripts/update_data_btc.pyet équivalent XAU. - Le cBot cTrader (C#) : Sillage est un bridge Python ; il faut un cBot côté cTrader qui parle ZMQ. Voir section 5.
| Composant | Min | Recommandé |
|---|---|---|
| Python | 3.11 | 3.12 / 3.13 |
| RAM | 8 GB | 16 GB |
| GPU (training) | aucun (CPU lent) | NVIDIA 4 GB+ VRAM (Windows) ou Apple Silicon (Mac, MPS) |
| Espace disque | 5 GB | 20 GB (avec parquets historiques) |
| Compte | broker cTrader (FTMO ou autre) | FTMO $100K |
| OS | Windows 10/11 ou macOS 12+ | — |
cTrader : téléchargez depuis ctrader.com (Windows ou macOS). Sur Mac, le client desktop existe mais le support cBot peut être plus restreint que sur Windows — vérifiez avec votre broker.
git clone https://github.com/<votre-fork>/Sillage.git
cd SillagemacOS / Linux :
python3 -m venv .venv
source .venv/bin/activateWindows (PowerShell) :
python -m venv .venv
.venv\Scripts\Activate.ps1pip install --upgrade pip
pip install -r requirements.txtPyTorch + GPU : si vous avez une carte NVIDIA sur Windows et voulez CUDA, installez torch séparément AVANT le
pip install -r:pip install torch --index-url https://download.pytorch.org/whl/cu121Sur Apple Silicon, le
pip install torchstandard active automatiquement Metal/MPS.
Copiez le template :
cp .env.example .envPuis éditez .env et remplissez :
| Variable | Obligatoire ? | Comment l'obtenir |
|---|---|---|
TELEGRAM_BOT_TOKEN |
non (fortement recommandé) | Parlez à @BotFather sur Telegram, /newbot |
TELEGRAM_CHAT_ID |
non (idem) | Envoyez un message à votre bot, puis https://api.telegram.org/bot<TOKEN>/getUpdates |
GROQ_API_KEY |
recommandé (gratuit, rapide) | https://console.groq.com → API Keys |
GEMINI_API_KEY |
optionnel (fallback) | https://aistudio.google.com/app/apikey |
Si aucune clé LLM n'est fournie, le pipeline news bascule sur FinBERT local uniquement (suffisant mais moins riche). Sillage ne plantera pas.
⚠️ Ne committez jamais.env. Il est dans.gitignore.
Sillage n'est pas autonome : c'est le cerveau Python qui prend les décisions, mais c'est un cBot côté cTrader qui exécute les ordres. Le cBot et Sillage communiquent via ZMQ (TCP localhost).
| Asset | Port | Direction |
|---|---|---|
| XAUUSD | 7777 | cBot ↔ Python |
| BTCUSD | 7778 | cBot ↔ Python |
Un cBot qui parle au bridge doit :
- Ouvrir un socket ZMQ
REQ(ouREP) côté cTrader - Envoyer à chaque tick / nouvelle bougie : OHLC, spread, équité, positions ouvertes
- Recevoir les commandes du bridge :
BUY,SELL,CLOSE_ALL,MODIFY_SL, etc. - Exécuter ces commandes via l'API cTrader (
ExecuteMarketOrder,ClosePosition, etc.)
Le contrat de message est défini dans kairos_bridge_v15.py (recherchez recv_pyobj / send_pyobj). Le format pickle est utilisé.
📦 Le cBot C# n'est pas open-source dans ce repo. Si vous voulez l'utiliser tel quel, vous devez écrire le vôtre selon le contrat ZMQ ci-dessus, ou contacter l'auteur. Une stub cBot pourra être ajoutée dans une release future.
- Ajoutez la paire XAUUSD (chart M5) — attachez votre cBot, port 7777
- Ajoutez la paire BTCUSD (chart M15) — attachez votre cBot, port 7778
- Activez "Allow live trading" dans cTrader
- Lancez le bridge avant de démarrer le cBot
Sillage attend des parquets dans tia/data/ (XAU) et tia/data_btc/ (BTC), aux timeframes M5, M15, H1, H4, D1.
Pour BTC, un script de mise à jour existe :
python scripts/update_data_btc.pyPour XAU, vous devrez fournir vos propres parquets OHLC ou adapter scripts/update_data.py.
Vérifiez le format attendu en lisant les premières lignes de
vast_training/sac_v15_elite.py(fonctionbuild_features).
Les fichiers .pt (poids du réseau) sont gitignorés car >100 MB. Deux chemins :
A. Re-entraîner localement (long mais reproductible)
# XAU
python scripts/monday_retrain.py --force --dry-run # vérifier que tout charge
python scripts/monday_retrain.py --force # vrai retrain (~1-3 h sur GPU)
# BTC
python scripts/monday_retrain_btc.py --forceB. Récupérer un modèle pré-entraîné : ce n'est pas distribué publiquement. Si l'auteur met à disposition une release, vous trouverez les .pt dans GitHub Releases.
Sans modèle, le bridge crash au démarrage. Le check des fichiers est dans le launcher (launch_kairos_v15.bat / .sh).
- ✅
.envrempli - ✅
pip install -r requirements.txtOK - ✅ Modèles
.ptprésents dansmodels/sac_v15_elite/ - ✅ cTrader ouvert avec votre cBot attaché aux deux paires
- ✅ Backtest OOS validé (cf. section 9)
- ✅ Mode démo d'abord ! Pas de live tant que vous n'avez pas vu une session complète sans crash.
macOS / Linux :
chmod +x *.sh # première fois seulement
./LAUNCH_SILLAGE.sh # lance les deux moteurs (XAU + BTC)
# ou séparément :
./launch_sillage_xau.sh
./launch_sillage_btc.shWindows :
.\LAUNCH_KAIROS.bat # lance les deux moteurs
# ou séparément :
.\launch_kairos_v15.bat
.\launch_kairos_v15_btc.batLes noms
KAIROS/kairos_*dans les fichiers internes correspondent au nom de code historique. Ils n'affectent pas le fonctionnement et seront harmonisés progressivement versSillage.
- Stop propre : créez un fichier
standby.flagà la racine → le bridge ferme ses positions et s'arrête- macOS :
touch standby.flag - Windows :
echo. > standby.flag
- macOS :
- Reprendre : supprimez
standby.flag(rm/del) - Stop dur :
Ctrl+Cdans la fenêtre, ou fermer la fenêtre
| Fichier | Rôle |
|---|---|
logs/kairos_v15.log |
Bridge XAU |
logs/kairos_v15_btc.log |
Bridge BTC |
logs/crash_history.log |
Historique des crashs/restart |
Suivi temps réel :
macOS / Linux :
tail -f logs/kairos_v15_btc.logWindows (PowerShell) :
Get-Content logs\kairos_v15_btc.log -Wait -Tail 30Si vous avez configuré TELEGRAM_BOT_TOKEN + TELEGRAM_CHAT_ID, vous recevrez :
- 🟢 Démarrage / arrêt
- 📊 Heartbeat horaire (équité, P&L journalier)
- 💰 Chaque entrée / sortie de trade
⚠️ Alertes drawdown FTMO
Le bot répond aussi aux commandes /status, /positions, /equity (voir bridges pour la liste complète).
state.json(XAU) etbtc_state.json(BTC) : crash recovery. Ne jamais éditer à la main pendant que le bridge tourne.portfolio_state.json: coordination cross-asset.
Obligatoire avant tout déploiement.
# XAU — 306 derniers jours, OOS
python scripts/backtest_v15.py --no-ftmo --no-plot --sl-mode baseline
# BTC — bridge-parity (mirror le state machine du live)
python scripts/oos_backtest_btc_realistic.pyBaselines actuels (à battre pour valider une modif) :
- XAU : +$3,088 sur 275 trades, WR 68.4%, PF 1.29, DD 1.5%
- BTC : +$30,546, WR 59.5%, PF 1.35, DD 4.30%
Le modèle SAC dérive avec le temps. Sillage prévoit un retrain hebdo (~1 h GPU) :
python scripts/monday_retrain.py --force # XAU
python scripts/monday_retrain_btc.py --force # BTCAutomatisation :
- Windows : Task Scheduler → tâche hebdo Lundi 06:00 → action
monday_retrain.bat - macOS / Linux :
crontab -e→0 6 * * 1 cd /path/to/Sillage && ./monday_retrain.sh
Le script :
- Télécharge les nouvelles données
- Fait un fine-tune sur les 45 derniers jours
- Garde le meilleur seed (anti-overfit guard : refuse le déploiement si val_score ≤ 0)
- Backup l'ancien modèle dans
models/backup_champion/ - Notifie via Telegram
Sillage utilise un stack LLM modulaire. Par défaut :
- Groq (cloud, rapide, gratuit) — primaire
- Gemini (cloud, fallback)
- FinBERT (local, toujours actif pour le sentiment)
Dans mistral_finetune/news_collector_v2.py cherchez groq_model et modifiez :
groq_model = "llama-3.3-70b-versatile" # défaut
# alternatives : "mixtral-8x7b-32768", "llama-3.1-8b-instant", etc.Le code historique a un mode "Mistral local". Si vous tournez Ollama localement :
# dans news_collector_v2.py, remplacez l'appel Groq par :
import requests
def call_ollama(prompt):
r = requests.post("http://localhost:11434/api/generate",
json={"model": "mistral", "prompt": prompt, "stream": False})
return r.json()["response"]Ajoutez une nouvelle classe dans le pipeline (cf. la classe LLMClient existante) et chaînez-la avant Groq dans la fallback chain. Le contrat de retour est un dict avec les clés direction, strength, categories, etc. — voir current_signal.json pour le schéma.
💡 Le pipeline ne dépend d'aucun provider en dur ; tout passe par des clients abstraits dans
news_collector_*.py. Lisez ces fichiers pour comprendre l'agrégation et le tie-breaking.
Sillage embarque une garde FTMO stricte :
- Daily DD max : 4.5% (buffer 0.5% sous le 5% officiel)
- Total DD max : 9% (buffer 1% sous le 10%)
- Friday close : positions fermées d'office à 21h UTC le vendredi (pas de weekend hold)
- Floor d'équité : pas de nouveau trade si équité < $90,500
| Problème | Action |
|---|---|
| Stopper immédiatement | touch standby.flag (Mac) / echo. > standby.flag (Windows) |
| Reprendre | Supprimer standby.flag |
| FTMO locked, positions ouvertes | Fermer manuellement dans cTrader UI |
| Reset du flag FTMO après close manuel | Éditer state.json → "ftmo_locked": false (bridge arrêté) |
| Rollback modèle | Copier de models/backup_champion/ vers models/sac_v15_elite/ |
Vous n'avez pas de fichier .pt dans models/sac_v15_elite/. Voir section 6.2.
Une instance précédente du bridge tourne. Les launchers tuent normalement le process automatiquement. Manuellement :
- Mac :
lsof -i :7777puiskill -9 <PID> - Windows :
netstat -ano | findstr :7777puistaskkill /PID <PID> /F
Aucune des GROQ_API_KEY / GEMINI_API_KEY n'est dans .env. Le système fonctionne quand même (FinBERT seul) mais les signals news seront moins riches.
- Le cBot est-il attaché au bon symbole et au bon port ?
- Le bridge tourne-t-il avant le cBot ?
- Firewall : autoriser Python sur les ports 7777 / 7778 (localhost-only normalement OK).
GPU trop petit (T400 4GB). Soit ajouter du swap, soit retraîner sur CPU (--device cpu), soit utiliser une instance cloud (Vast.ai, Lambda Labs).
Lisez .claude/rules/debugging-playbook.md — diagnostic step-by-step pour les cas "won't trade" / "good WR but losing money" / "FTMO locked".
| Fichier | Rôle |
|---|---|
kairos_bridge_v15.py |
Engine XAU (port 7777, BUY-only, SL $100, risk 0.6%) |
kairos_bridge_v15_btc.py |
Engine BTC (port 7778, bi-directional, SL 2.5×ATR, risk 2.5%) |
vast_training/sac_v15_elite.py |
Réseau SAC (LSTM 256 + GRN 768) + env curriculum |
kelly_engine.py |
Half-Kelly per-confidence-bucket (asset-aware) |
performance_decay.py |
Anti-tilt 4 modes (OPTIMAL → CAUTION → DEFENSIVE → SURVIVAL) |
portfolio_coordinator.py |
Coordination cross-asset XAU+BTC via portfolio_state.json |
risk_budget.py |
Cap pire-cas à 40% du DD FTMO restant |
mistral_finetune/news_collector_v2.py |
Pipeline news XAU |
mistral_finetune/news_collector_btc.py |
Pipeline news BTC |
kairos_config.yaml |
Config (ports, FTMO, sessions) |
KAIROS.md |
Modlog complet + intelligence système |
.claude/rules/ |
Règles de safety / debugging / code-quality |
Voir .claude/rules/trading-safety.md. Les principales :
- Pas de SELL sur XAU (BUY-only mode, prouvé OOS)
- Risk max 0.6% XAU / 2.5% BTC
- Pas de
copy.deepcopy()sur modèles PyTorch (utiliserv.cpu().clone()) - Pas de reset LSTM pendant cooldown BTC
- Toujours backtest OOS avant déploiement
Ce repo est partagé pour usage personnel et éducatif. Pas de redistribution commerciale sans autorisation. Aucune garantie, ni de fonctionnement ni de profit. Trader des marchés à effet de levier comporte un risque de perte totale.
"Le sillage trahit le navire — pas le navire qui se trompe en suivant son sillage."