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

Panel Grafana 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

Panel Grafana 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

Panel Grafana 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

Panel Grafana Positions

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

Panel Grafana 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

Panel Grafana 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

Panel Grafana ETH Signal

Meme logique que BTC Signal — affiche BUY/HOLD/SELL pour ETH.

Scores Claude (BTC & ETH)

Panel Grafana Scores Claude

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)

Claude Score BTC vs ETH Over Time

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

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, MACD, Bollinger et ATR

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