Dashboard Grafana : monitorer mon bot de trading en temps reel
Apres avoir construit le bot de trading IA, il me fallait un moyen de tout surveiller sans ouvrir les logs. Le bot expose deja des metriques Prometheus sur :9090/metrics — il ne restait plus qu’a construire le dashboard Grafana.
22 panels, 6 rows, tout ce qu’il faut pour suivre le bot en un coup d’oeil.
Architecture des metriques
Le bot Go expose des metriques Prometheus natives :
tradingbot_equity_euros → equity totale du compte
tradingbot_pnl_realized_euros → P&L des trades fermes
tradingbot_pnl_unrealized_euros → P&L des positions ouvertes
tradingbot_win_rate → pourcentage de trades gagnants
tradingbot_open_positions → nombre de positions ouvertes
tradingbot_drawdown_percent → drawdown actuel en %
tradingbot_last_signal → dernier signal Claude (1=BUY, 0=HOLD, -1=SELL)
tradingbot_signal_score → score de conviction Claude (-100 a +100)
tradingbot_sentiment_score → sentiment Grok (-1.0 a +1.0)
tradingbot_rsi → RSI(14) par asset
tradingbot_macd_histogram → histogramme MACD par asset
tradingbot_bb_pct → Bollinger Band % par asset
tradingbot_atr → ATR(14) par asset
tradingbot_trades_total → compteur de trades par asset/action
tradingbot_position_pnl_euros → P&L par position ouverte
Prometheus scrape ces metriques a chaque cycle. Grafana les interroge pour construire le dashboard.
Organisation du dashboard
Le dashboard est structure en 6 rows, du plus haut niveau au plus detaille :
┌─────────────────────────────────────────────────────────┐
│ Row 1 — Vue d'ensemble rapide (6 stats) │
│ Equity | P&L | Win Rate | Positions | Drawdown | Signal│
├─────────────────────────────────────────────────────────┤
│ Row 2 — Stats secondaires (6 panels) │
│ BTC Sent | ETH Sent | ETH Sig | BTC Score | ETH Score │
├─────────────────────────────────────────────────────────┤
│ Row 3 — Graphes temporels (2 panels larges) │
│ Equity Over Time | P&L Over Time │
├─────────────────────────────────────────────────────────┤
│ Row 4 — Score & Sentiment (2 panels larges) │
│ Claude Score BTC vs ETH | Sentiment Over Time │
├─────────────────────────────────────────────────────────┤
│ Row 5 — Indicateurs techniques (4 panels) │
│ RSI | MACD Histogram | Bollinger % | ATR │
├─────────────────────────────────────────────────────────┤
│ Row 6 — Risk & Activite (2 panels larges) │
│ Drawdown Over Time | Trades BTC & ETH │
└─────────────────────────────────────────────────────────┘
Row 1 — Vue d’ensemble rapide
Les 6 panels du haut donnent l’etat du bot en un coup d’oeil. Pas besoin de scroller, tout l’essentiel est la.
Equity
Le solde total du compte en EUR — cash + crypto valorisee. Synchronise depuis Binance a chaque cycle via GetAccountEquity.
Query : tradingbot_equity_euros
Les couleurs changent selon le niveau :
- Rouge : < 95€ (en perte significative)
- Jaune : 95-105€ (zone neutre)
- Vert : > 105€ (en profit)
Un mini-graphe sparkline montre la tendance recente directement dans le panel.
P&L Total
Le profit/perte combine : realized (trades fermes) + unrealized (positions ouvertes).
Query : tradingbot_pnl_realized_euros + tradingbot_pnl_unrealized_euros
Si j’ai gagne 3€ sur des trades fermes et que ma position ouverte est a +2€, ca affiche +5€. Rouge si negatif, vert si positif.
Win Rate
Pourcentage de trades gagnants parmi les trades fermes.
Query : tradingbot_win_rate
- Rouge : < 40% (ca va pas)
- Jaune : 40-55% (correct)
- Vert : > 55% (bon)
En trading quantitatif, un win rate de 50-60% avec un bon ratio risk/reward (1:2 dans notre cas) est deja tres bon.
Positions ouvertes
Combien de positions sont actuellement ouvertes (0, 1 ou 2 max).
Query : tradingbot_open_positions
- Vert : 0-1 position
- Jaune : 2 positions (maximum atteint)
- Rouge : 3+ (ne devrait jamais arriver)
Drawdown (gauge)
Le drawdown actuel affiche sous forme de jauge. C’est le pourcentage de baisse depuis le plus haut (High Water Mark).
Query : tradingbot_drawdown_percent
Formule : (HighWaterMark - Equity) / HighWaterMark
Si l’equity a touche 115€ puis est redescendue a 110€, le drawdown est ~4.3%.
- Vert : < 5%
- Jaune : 5-9%
- Rouge : > 9% (le bot s’arrete a 10%)
C’est le panel le plus important pour le risk management — si cette jauge est dans le rouge, il faut investiguer.
BTC Signal
Le dernier signal de Claude pour BTC, affiche en texte : BUY, HOLD ou SELL.
Query : tradingbot_last_signal{asset="BTC"}
Mappings : 1 → BUY (vert) | 0 → HOLD (jaune) | -1 → SELL (rouge)
Row 2 — Stats secondaires
Sentiment BTC & ETH
Le score de sentiment Grok pour chaque asset, de -1.0 (tres bearish) a +1.0 (tres bullish). C’est le resultat de l’analyse temps reel des posts sur X/Twitter.
Query : tradingbot_sentiment_score{asset="BTC"}
Query : tradingbot_sentiment_score{asset="ETH"}
- Rouge : < -0.2 (bearish)
- Jaune : -0.2 a +0.2 (neutre)
- Vert : > +0.2 (bullish)
Signal ETH
Meme logique que BTC Signal — affiche BUY/HOLD/SELL pour ETH.
Scores Claude (BTC & ETH)
Le score de conviction de Claude, de -100 a +100. C’est la “force” de la decision :
Query : tradingbot_signal_score{asset="BTC"}
Query : tradingbot_signal_score{asset="ETH"}
- Score > +30 → tendance Buy
- Score entre -30 et +30 → Hold
- Score < -30 → tendance Sell
Par exemple : 41.2 = “Buy modere”, 85 = “Buy forte conviction”, -15 = “Hold, legere tendance bearish”.
P&L par Position
Le profit/perte non-realise de chaque position ouverte, separement. Si ETH est a +0.50€ et BTC a -0.20€, les deux barres s’affichent.
Query : tradingbot_position_pnl_euros
Label : {{asset}}
Row 3 — Graphes temporels principaux
C’est ici qu’on commence a voir l’evolution dans le temps.
Equity Over Time
La courbe d’evolution du capital. Ligne bleue avec remplissage en degrade. Le tableau en bas affiche la derniere valeur, le max et le min sur la periode selectionnee.
Query : tradingbot_equity_euros
Periode par defaut : 6h
C’est le graphe principal — si la courbe monte, le bot gagne. Simple.
P&L Over Time
3 courbes superposees :
- Realized P&L — profits/pertes des trades fermes (acquis)
- Unrealized P&L — profits/pertes des positions ouvertes (virtuel)
- Total — somme des deux
Queries :
tradingbot_pnl_realized_euros
tradingbot_pnl_unrealized_euros
tradingbot_pnl_realized_euros + tradingbot_pnl_unrealized_euros
Le realized P&L ne descend jamais (sauf si un trade est cloture en perte). L’unrealized fluctue en temps reel avec le prix du marche.
Row 4 — Score & Sentiment dans le temps
Claude Score (BTC vs ETH)
Les courbes du score Claude pour BTC et ETH au fil du temps. Deux lignes horizontales en pointilles marquent les seuils a +30 et -30.
Queries :
tradingbot_signal_score{asset="BTC"}
tradingbot_signal_score{asset="ETH"}
Range : -100 a +100
Quand la courbe depasse +30, Claude dit Buy. En dessous de -30, Sell. Entre les deux, c’est Hold. On peut voir les moments ou Claude hesite (score qui oscille autour de 0) vs les moments de forte conviction (score a 70+).
Sentiment Over Time
L’evolution du sentiment Grok pour BTC et ETH. De -1.0 a +1.0.
Query : tradingbot_sentiment_score{asset=~"BTC|ETH"}
On peut voir les correlations entre sentiment et score Claude — parfois ils sont alignes (consensus), parfois opposes (signal contrarian).
Row 5 — Indicateurs techniques
4 panels pour les 4 indicateurs calcules par le bot Go.
RSI (BTC & ETH)
Le RSI(14) en temps reel. Deux lignes pointillees a 35 (oversold) et 65 (overbought).
Queries :
tradingbot_rsi{asset="BTC"}
tradingbot_rsi{asset="ETH"}
Range : 0 a 100
En dessous de 35, l’asset est potentiellement survendu (opportunite d’achat). Au-dessus de 65, potentiellement surachete. Le RSI est l’indicateur le plus intuitif du dashboard.
MACD Histogram
L’histogramme MACD affiche en barres — orange pour BTC, bleu pour ETH.
Queries :
tradingbot_macd_histogram{asset="BTC"}
tradingbot_macd_histogram{asset="ETH"}
Style : barres
Quand les barres sont positives et croissantes → momentum haussier. Negatives et decroissantes → momentum baissier. La direction compte plus que la valeur absolue — c’est une regle que Claude connait dans son prompt.
Bollinger Band %
La position du prix dans les bandes de Bollinger, en pourcentage.
Queries :
tradingbot_bb_pct{asset="BTC"}
tradingbot_bb_pct{asset="ETH"}
Range : 0 a 100
Seuil rouge : 80%
- 0% = prix au niveau de la bande basse (zone d’achat potentiel)
- 50% = au milieu (neutre)
- 100% = bande haute (zone de vente potentiel)
Le prix peut sortir des bandes (>100% ou <0%), ce qui est souvent un signal fort.
ATR (Volatility)
L’Average True Range — la volatilite en EUR. BTC et ETH sont sur des axes differents car les echelles sont tres differentes.
Queries :
tradingbot_atr{asset="BTC"} → axe gauche
tradingbot_atr{asset="ETH"} → axe droit
Un ATR BTC de ~229€ signifie que le prix bouge d’environ 229€ par bougie de 15 min. C’est cette valeur qui dimensionne les stops dynamiques :
- Stop-loss = ATR x 1.5
- Take-profit = ATR x 3.0
Quand l’ATR monte, les stops s’elargissent automatiquement. Quand il baisse, ils se resserrent.
Row 6 — Drawdown & Activite
Drawdown Over Time
La courbe du drawdown avec deux seuils en pointilles :
- 5% (jaune) — zone d’attention
- 9% (rouge) — zone de danger
Query : tradingbot_drawdown_percent
Si le drawdown touche 10%, le bot s’arrete automatiquement (flag “stopped” dans le risk manager). Idealement cette courbe reste proche de 0%.
Trades (BTC & ETH)
Le nombre de trades executes par heure, en barres empilees par asset et action.
Query : sum by (asset, action) (increase(tradingbot_trades_total{asset=~"BTC|ETH"}[1h]))
On voit “BTC BUY”, “ETH BUY”, etc. Le tableau en bas montre le total. Avec le cycle a 1h et la strategie patience de Claude, il devrait y avoir peu de barres — c’est voulu. Moins de trades = plus de conviction par trade.
Ce que le dashboard m’a appris
La patience de Claude est visible. Sur le graphe des scores, on voit clairement que Claude reste souvent entre -30 et +30 (Hold). Les pics au-dessus de +30 sont rares — et c’est exactement ce qu’on veut. Le prompt “peu de trades a haute conviction” fonctionne.
Le drawdown est plus parlant qu’un P&L. Le P&L total peut etre positif mais cacher un drawdown important en cours de route. La jauge et la courbe de drawdown donnent une bien meilleure idee du risque reel.
L’ATR explique beaucoup. Quand l’ATR monte (forte volatilite), on comprend pourquoi les stops sont plus larges et pourquoi le bot est plus prudent. Quand l’ATR baisse, les trades sont plus serres.
Le sentiment flat = pas de donnees. Quand les credits xAI sont epuises, le sentiment tombe a 0 pour les deux assets. Le dashboard le montre clairement — c’est un rappel visuel qu’il manque un input au bot.
La stack technique
Le tout tourne sur le meme cluster K8s :
Trading Bot (Go) → expose :9090/metrics
↓
Prometheus (scrape toutes les 15s)
↓
Grafana (dashboard tradingbot-v3)
Pas de base de donnees supplementaire, pas d’exporter externe. Les metriques Prometheus natives du bot suffisent pour tout le dashboard. C’est l’avantage d’avoir une stack LGTM deja en place — ajouter un nouveau dashboard prend 30 minutes, pas 3 jours.
Rappel : ce projet est un exercice technique. Ce n’est en aucun cas un conseil financier ou un exemple a suivre.
Article precedent : Trading Bot IA : Claude analyse les marches pour moi