Trading Bot IA : Claude analyse les marches pour moi


Disclaimer : Ce projet est purement experimental et educatif. Ce n’est pas un conseil en investissement. Les marches financiers sont risques et ce bot est un exercice technique, pas un outil a suivre. Ne tradez jamais de l’argent que vous ne pouvez pas vous permettre de perdre.

L’idee

Apres avoir construit un agent IA capable de diagnostiquer des incidents Kubernetes, je me suis pose une question : est-ce que le meme pattern (collecte de donnees → analyse IA → decision → action) pourrait s’appliquer au trading ?

Le but n’est pas de devenir riche — c’est de voir si une IA peut prendre des decisions structurees a partir de donnees reelles, avec un vrai risk management, et tout ca deploye sur mon homelab.

Vue d’ensemble : le cycle de vie d’un trade

Toutes les heures, le bot execute ce pipeline pour chaque asset (BTC, ETH) :

1. DONNEES      → Binance API : 289 bougies de 15min (3 jours)
2. INDICATEURS  → Go calcule RSI, MACD, BB, ATR
3. SENTIMENT    → Grok (xAI) cherche le sentiment sur X/Twitter
4. CLAUDE IA    → Claude Sonnet 4.6 decide : Buy / Hold / Sell
5. RISK CHECK   → Le risk manager verifie les regles
6. EXECUTION    → Ordre LIMIT sur Binance → OCO (SL + TP)
7. FILL TRACK   → Polling toutes les 30s pour detecter le fill
                    Toutes les 1H


              ┌─────────────────────┐
              │   Binance API       │
              │   289 bougies 15min │
              └─────────┬───────────┘

           ┌────────────┼────────────┐
           ▼            ▼            ▼
     ┌──────────┐ ┌──────────┐ ┌──────────┐
     │ RSI/MACD │ │ BB / ATR │ │   Grok   │
     │   Go     │ │   Go     │ │ Sentiment│
     └────┬─────┘ └────┬─────┘ └────┬─────┘
          │             │            │
          └─────────────┼────────────┘

              ┌─────────────────────┐
              │   Claude Sonnet 4.6 │
              │   Buy / Hold / Sell │
              └─────────┬───────────┘

              ┌─────────────────────┐
              │   Risk Manager      │
              │   8 verifications   │
              └─────────┬───────────┘

              ┌─────────────────────┐
              │   Binance Execution │
              │   LIMIT → OCO      │
              └─────────────────────┘

Voyons chaque etape en detail.

Etape 1 — Recuperation des donnees

Le signal engine appelle l’API Binance pour recuperer l’historique recent :

GetHistoricalData(asset, "15 mins", "3 D")
  • 289 bougies de 15 minutes — soit 3 jours complets de donnees
  • Chaque bougie = OHLCV (Open, High, Low, Close, Volume)
  • Les prix sont en EUR (BTCEUR, ETHEUR) — pas USDT, car compte europeen soumis a MiCA

Pourquoi 15 minutes sur 3 jours ? C’est un bon compromis : assez de donnees pour que les indicateurs techniques soient fiables, sans noyer l’IA dans trop de bruit.

Etape 2 — Indicateurs techniques

A partir des 289 bougies, Go calcule 4 indicateurs. Chacun produit un score de -100 a +100.

RSI (Relative Strength Index) — rsi.go

Le RSI mesure la vitesse des mouvements de prix sur 14 periodes :

  • RSI < 35 = OVERSOLD (survendu → signal d’achat potentiel)
  • RSI > 65 = OVERBOUGHT (surachete → signal de vente potentiel)
  • Utilise le lissage de Wilder (meme methode que TradingView)

C’est l’indicateur le plus intuitif : si tout le monde vend et que le prix chute trop vite, il y a souvent un rebond.

MACD (Moving Average Convergence Divergence) — macd.go

Le MACD detecte les changements de momentum :

MACD = EMA(12) - EMA(26)
Signal = EMA(9 du MACD)
Histogramme = MACD - Signal
  • Histogramme positif = momentum haussier
  • Histogramme negatif = momentum baissier
  • La direction compte plus que la valeur absolue — passer de -50 a -30 = amelioration
  • Normalise par tanh(valeur/stddev) pour obtenir un score -100..+100

Bollinger Bands — bollinger.go

Les bandes de Bollinger mesurent la position du prix par rapport a sa volatilite :

Bande superieure = SMA(20) + 2 × σ
Bande inferieure = SMA(20) - 2 × σ
BB% = position du prix entre les bandes
  • BB% < 20% (pres de la bande basse) = potentiel haussier
  • BB% > 80% (pres de la bande haute) = potentiel baissier
  • Le prix “rebondit” souvent entre les bandes

ATR (Average True Range) — atr.go

L’ATR mesure la volatilite reelle du marche :

True Range = max(High-Low, |High-PrevClose|, |Low-PrevClose|)
ATR = moyenne lissee sur 14 periodes

L’ATR ne donne pas de signal d’achat/vente — il dimensionne les stops :

  • Stop-loss = ATR x 1.5 (distance minimale pour ne pas se faire sortir par le bruit)
  • Take-profit = ATR x 3.0 (ratio risque/recompense de 1:2)

C’est un ajout recent et important : au lieu de stops fixes (2.5%), le bot s’adapte a la volatilite du moment.

Etape 3 — Sentiment via Grok

Le bot utilise l’API xAI (Grok) pour capter le sentiment du marche en temps reel :

  • Modele : grok-4-1-fast-non-reasoning
  • Outil : x_search — recherche en temps reel sur X/Twitter
  • Prompt : “Analyze current social media sentiment for BTC/ETH crypto trading”

Grok retourne :

  • Direction : Bullish / Bearish / Neutral
  • Score : -1.0 a +1.0
  • Raison : texte explicatif
{
  "sentiment": "Bearish",
  "score": -0.45,
  "reason": "Fear after recent correction, multiple accounts discussing potential further downside"
}

Si Grok echoue (rate limit 429, timeout, etc.) → sentiment = Neutral (0.0). Le bot ne bloque jamais sur un echec de sentiment.

Le sentiment est un input parmi d’autres pour Claude — pas une decision directe. Son poids dans la decision finale est volontairement bas (0.15).

Etape 4 — Claude IA decide

C’est le cerveau du systeme. Claude Sonnet 4.6 recoit un prompt structure avec toutes les donnees :

Asset: BTC (CRYPTO, BINANCE, EUR) — LongOnly
Price: 84200.00 | Equity: 88.83€ | Open positions: 0/2

Technical Indicators (15-min candles, 3-day window):
  RSI(14):         42.50 → neutral
  RSI score:       50.0 / 100
  MACD histogram:  -12.3 → negative
  MACD score:      -30.5 / 100
  BB%:             35.2% → middle range
  BB score:        29.6 / 100
  ATR(14):         450.20 (0.53% of price)
  Technical score: 16.4 (signal threshold: ±30)

Sentiment (xAI Grok / X real-time):
  Bearish (score: -0.45) | "Fear after recent correction"

Le system prompt de Claude

Claude joue le role d’un quant trader avec 15 ans d’experience. Ses regles :

  • Analyser RSI + MACD + BB ensemble — un seul indicateur faible ne bloque pas un trade
  • Sentiment bearish a des extremes RSI = signal CONTRARIAN (la foule a souvent tort aux extremes)
  • Direction du MACD > valeur absolue
  • ATR = volatilite actuelle → utiliser pour evaluer si les stops sont raisonnables
  • LongOnly = jamais de Sell a decouvert, seulement Buy ou Hold
  • PATIENCE : peu de trades a haute conviction > beaucoup de trades marginaux

La reponse

Claude retourne du JSON structure :

{
  "signal": "Buy",
  "score": 62,
  "reasoning": "RSI strongly oversold with MACD histogram improving, BB% near lower band suggests reversal potential. Bearish sentiment at RSI extreme is contrarian bullish."
}

Fallback mecanique

Si l’API Claude echoue, le bot bascule automatiquement sur une formule mecanique :

score = (RSI × poids + MACD × poids + BB × poids + sentiment × poids) / totalPoids

Ca ne sera jamais aussi bon que Claude, mais ca evite que le bot soit completement aveugle en cas de panne API.

Etape 5 — Risk Manager

Avant d’executer un trade, 8 verifications doivent passer :

#CheckDetail
1Bot arrete ?Si drawdown max atteint → tout est bloque
2Signal = Hold ?Claude dit Hold → pas de trade
3Max positions ?Maximum 2 positions simultanees
4Deja une position ?Pas de doublons sur le meme asset
5LongOnly ?BTC/ETH = pas de short (spot only)
6Drawdown globalEquity baisse de >10% du high watermark → bot arrete
7Daily loss limitPerdu >5% dans la journee → pause jusqu’a demain
8Cooldown15min apres une perte + 1h par asset entre les trades

Position sizing

Le bot risque 5% de l’equity par trade :

Quantite = (Equity × 5%) / Prix
Exemple : 88.83€ × 5% = 4.44€ → 4.44 / 84200 = 0.0000527 BTC

Stop-loss et take-profit dynamiques

Au lieu de pourcentages fixes, les stops s’adaptent a la volatilite via l’ATR :

SL = Prix - ATR × 1.5    (minimum = prix × 3%)
TP = Prix + ATR × 3.0    (minimum = prix × 6%)
Ratio risque/recompense = 1:2

Exemple concret : Si BTC a 84 200€ avec un ATR de 450€ :

  • Stop-loss = 84 200 - 675 = 83 525€
  • Take-profit = 84 200 + 1 350 = 85 550€

Etape 6 — Execution

Quand le risk manager donne le feu vert :

  1. Ordre LIMIT avec un petit premium (+0.01%) pour un meilleur fill
  2. Si l’ordre LIMIT echoue → fallback en MARKET
  3. L’ordre est envoye a Binance via l’API REST

Etape 7 — Suivi des fills

Le bot poll Binance toutes les 30 secondes pour verifier si l’ordre est rempli.

Quand un ordre est FILLED :

  1. Evenement FillEvent envoye au risk manager
  2. Mise a jour : equity, positions ouvertes, PnL
  3. Etat persiste sur disque (PVC K8s)
  4. Placement automatique de l’OCO (One-Cancels-Other) = SL + TP combines
    • 3 tentatives avec backoff exponentiel (2s, 5s, 10s)
    • Si toutes echouent → log ERREUR “position UNPROTECTED”

Les ordres terminaux (cancelled, expired, rejected) sont nettoyes automatiquement.

Persistance de l’etat

Le fichier /data/risk-state.json sur le PVC Kubernetes contient tout l’etat du bot :

  • Capital initial, equity actuelle, high watermark
  • Positions ouvertes (symbol, quantite, cout moyen)
  • PnL realise, nombre de trades, win rate
  • Timestamps des dernieres pertes et trades par asset
  • Flag “stopped” si le drawdown max est atteint

L’ecriture est atomique : temp file → rename. Pas de corruption si le pod crash au milieu d’une ecriture.

Infrastructure

┌─────────────────────────────────────────────────┐
│  K8s Cluster (Talos, Dell R430)                 │
│                                                 │
│  trading-bot (Deployment, strategy: Recreate)   │
│  ├── Go binary                                  │
│  ├── PVC : /data/risk-state.json                │
│  └── Prometheus metrics :9090                   │
│                                                 │
│  Monitoring                                     │
│  ├── Prometheus (scrape /metrics)               │
│  └── Grafana (dashboard tradingbot-v3)          │
└─────────────────────────────────────────────────┘

Le bot est deploye en Recreate (pas RollingUpdate) — on ne veut jamais deux instances en parallele qui placeraient des ordres en double.

Prometheus scrape les metriques du bot (trades executes, PnL, positions ouvertes, erreurs API) et Grafana affiche le tout sur un dashboard dedie.

Les parametres actuels

ParametreValeur
Cycle1 heure
Risk par trade5% de l’equity
Stop-lossATR x 1.5 (min 3%)
Take-profitATR x 3.0 (min 6%)
Poids sentiment0.15
Seuil de signal±30
Max positions2 simultanees
OCO3 tentatives + retry
Cooldown post-perte15 min
Cooldown par asset1 heure
Daily loss limit5%
Drawdown max10%

Ce que j’ai appris

L’IA est forte pour synthetiser, pas pour predire. Claude ne predit pas le futur — il synthetise 4 indicateurs + le sentiment en une decision coherente, avec un raisonnement explicable. C’est deja enorme par rapport a une formule mecanique.

Le risk management est plus important que le signal. Meme avec le meilleur signal du monde, sans stops, sans limites de drawdown, sans position sizing — tu perds tout. Les 8 checks du risk manager sont la partie la plus importante du code.

L’ATR change tout. Passer de stops fixes (2.5%) a des stops dynamiques bases sur la volatilite a reduit les sorties prematurees. Le marche “respire” et les stops doivent respirer avec lui.

Le sentiment est du bruit, sauf aux extremes. Un sentiment bearish quand tout est neutre = rien. Un sentiment bearish quand le RSI est a 25 = signal contrarian interessant. D’ou le poids faible (0.15) mais present.

Et les resultats ?

C’est un projet experimental avec de tres petits montants. L’objectif n’a jamais ete de faire du profit — c’est d’apprendre comment fonctionne le pipeline complet : de la donnee brute a l’execution d’un ordre, en passant par l’analyse IA et le risk management.

Ce qui est interessant, c’est que le meme pattern architectural (collecte → analyse → decision → action → feedback) se retrouve dans beaucoup de systemes : incident management, trading, ou n’importe quel systeme de decision automatise.


Rappel : ce projet est un exercice technique et de curiosite. Ce n’est en aucun cas un conseil financier ou un exemple a suivre. Le trading comporte des risques de perte en capital.


Prochain article : a suivre…