Guide Technique — Partie 2/3

Architecture de Monitoring : Séparation des Concerns et Gestion du Risque

Comment structurer le monitoring d'une stack de trading systématique pour détecter les anomalies avant qu'elles ne deviennent des pertes.

Architecture
Gestion du Risque
25 min
Intermédiaire
Monitoring Trading Stack
2/3

Série : Monitorer sa Stack de Trading

① Post-Mortems ② Architecture ③ Tooling

Introduction — L'Architecture de Monitoring

Dans la Partie 1, nous avons analysé les post-mortems les plus instructifs du trading systématique. Chaque incident partageait un point commun : le monitoring était soit absent, soit mal architecturé. Des logs existaient, des dashboards clignotaient, mais l'architecture globale ne permettait pas de détecter, comprendre et réagir à temps.

Cette deuxième partie est le cœur de la série. Nous allons construire, couche par couche, une architecture de monitoring robuste pour une stack de trading. Pas un produit spécifique, pas un outil particulier — une architecture, c'est-à-dire un ensemble de principes, de patterns et de décisions de design qui guident ensuite tous les choix techniques.

Pourquoi l'architecture compte plus que l'outil

Un piège fréquent : commencer par choisir un outil (Grafana, Datadog, Prometheus) puis essayer de faire rentrer son système dedans. C'est comme choisir la couleur de la façade avant de dessiner les plans de la maison. L'outil vient après l'architecture, jamais avant.

Une bonne architecture de monitoring repose sur trois piliers fondamentaux :

1. Observer
Collecter les bonnes données, au bon endroit, avec la bonne granularité. Sans observation, pas de diagnostic. C'est la fondation : logs structurés, métriques, traces distribuées.
2. Alerter
Transformer les observations en signaux actionnables. Pas « il se passe quelque chose » mais « voici exactement ce qui se passe, pourquoi c'est grave, et quoi faire ». L'art de l'alerte, c'est la précision.
3. Réagir
Avoir des runbooks, des circuit breakers, des kill switches. Quand l'alerte sonne, la réaction doit être immédiate et prédéfinie. Pas de panique, pas d'improvisation — un playbook testé.

Qu'est-ce que l'observabilité ?

Le terme « observabilité » (observability) vient de la théorie du contrôle. Un système est observable si, en analysant ses sorties (outputs), on peut déduire son état interne complet. En monitoring, cela signifie que vos métriques, logs et traces vous permettent de comprendre pourquoi le système se comporte d'une certaine façon — pas seulement ce qui se passe.

Les trois piliers de l'observabilité moderne sont :

  • Métriques — Valeurs numériques agrégées dans le temps (ex: CPU usage moyen sur 5 min). Elles répondent à « quoi ? »
  • Logs — Enregistrements discrets d'événements (ex: « ordre rejeté par le broker »). Ils répondent à « quand et où ? »
  • Traces — Parcours d'une requête à travers les services (ex: signal → risk check → execution). Elles répondent à « pourquoi ? »

Ensemble, ils forment un triangle qui permet de naviguer de « quelque chose ne va pas » à « voici la ligne de code responsable ».

Ce que vous allez apprendre

Ce guide couvre huit domaines essentiels, chacun dédié à un aspect critique de l'architecture de monitoring :

1
Séparation des concerns — Pourquoi trading, risque et monitoring doivent vivre dans des processus indépendants, et comment les connecter sans créer de couplage.
2
Les 4 couches — Infrastructure, Application, Business Logic, Marché. Chaque couche a ses propres métriques, ses propres seuils, et ses propres responsables.
3
Risque temps réel — Pre-trade checks, intra-trade monitoring, post-trade analysis, kill switches et drawdown budgeting.
4
Alerting intelligent — Niveaux d'escalation, déduplication, contextualisation, et comment éviter la fatigue d'alertes qui tue.

Que vous construisiez un système institutionnel gérant des milliards ou un bot retail sur un VPS à 10$/mois, les principes sont identiques. Seule l'échelle change.

Séparation des Concerns (SoC)

La Séparation des Concerns (Separation of Concerns, SoC) est le principe fondamental de toute architecture logicielle robuste. Dans le contexte du trading, elle prend une dimension critique : quand votre monitoring tourne dans le même processus que votre stratégie, un bug de monitoring peut crasher votre stratégie. Et inversement, une stratégie qui consomme 100% du CPU ne laisse rien au monitoring pour détecter le problème.

Les trois moteurs indépendants

Une stack de trading bien architecturée se compose de trois moteurs qui doivent tourner dans des processus séparés, idéalement sur des machines distinctes :

Trading Engine
Le cœur du système. Reçoit les données de marché, exécute la stratégie, envoie les ordres. Son unique responsabilité : trader. Il ne doit rien faire d'autre. Pas de calcul de risque complexe, pas de génération de dashboard, pas d'envoi d'emails.
Risk Engine
Le gardien. Vérifie chaque ordre avant qu'il ne parte, surveille les expositions en temps réel, applique les limites de drawdown. Il peut bloquer un ordre du Trading Engine. C'est le seul composant qui a un droit de véto sur le trading.
Monitoring Layer
L'observateur. Collecte les métriques des deux autres moteurs, les agrège, les visualise, déclenche les alertes. Il ne modifie jamais le comportement du trading — il observe et rapporte. Son crash ne doit pas impacter le trading.

Règle d'or de l'indépendance

Le crash du monitoring ne doit jamais arrêter le trading. Et le crash du trading ne doit jamais arrêter le monitoring. Ce sont deux avions différents — si l'un tombe, l'autre continue de voler pour rapporter ce qui s'est passé. Si votre trading et votre monitoring partagent le même processus, un seul OOM (Out Of Memory) suffit à tout faire tomber silencieusement.

Le flux de données — Comprendre le chemin critique

Comprendre le flux de données est essentiel pour savoir où placer vos points d'observation. Voici le chemin que suit chaque décision de trading, depuis la donnée de marché brute jusqu'à l'exécution sur l'exchange :

Les flèches pleines représentent le flux de trading (le chemin critique — celui qui doit être le plus rapide possible). Les flèches en pointillés représentent le flux de monitoring : chaque composant émet des métriques vers le Monitoring Layer, mais le Monitoring Layer n'émet jamais rien vers le flux de trading.

Unidirectionnalité du monitoring

C'est un principe fondamental que beaucoup de débutants violent : le flux de monitoring est strictement unidirectionnel. Les composants de trading émettent des événements vers le monitoring (push), ou le monitoring vient lire des métriques exposées (pull). Mais le monitoring ne doit jamais injecter de données dans le flux de trading.

La seule exception est le kill switch : un mécanisme d'urgence qui arrête tout le système. Mais même le kill switch agit par interruption (arrêter), pas par modification (changer le comportement). Nous en reparlerons en détail dans la section sur la gestion du risque.

Anti-patterns : le monitoring dans la boucle de trading

Voici les erreurs les plus fréquentes que nous observons dans les systèmes de trading, particulièrement chez les développeurs qui débutent en architecture :

Anti-pattern Risque Correction
Monitoring synchrone L'envoi de métriques bloque la boucle de trading. Si le serveur de métriques est lent ou indisponible, le trading est paralysé. Toujours émettre les métriques de manière asynchrone (fire-and-forget avec buffer local).
Logs dans le hot path L'écriture de logs I/O ralentit chaque tick. Sur une stratégie HFT, 1ms de latence ajoutée peut coûter des milliers de dollars par jour. Ring buffer en mémoire, flush asynchrone par batch. Logs structurés (JSON) au lieu de concaténations de chaînes.
Base de données partagée Le trading et le monitoring écrivent dans la même base. Un SELECT analytique lent du dashboard verrouille les tables que le trading utilise. Bases de données séparées. Le monitoring lit une réplique read-only ou un stream d'événements.
Monitoring = condition de trading « Si le monitoring détecte X, alors trade Y. » Le monitoring influence le trading → perte totale de la séparation des concerns. Le monitoring observe et alerte uniquement. Les décisions de trading restent dans le Strategy Engine, les décisions de risque dans le Risk Engine.
Single process Trading + Risk + Monitoring dans un seul binaire. Un OOM (Out Of Memory) du module de monitoring tue le trading. Processus séparés. Communication via message bus (Redis, NATS, ZeroMQ) ou fichiers partagés.

Communication inter-processus : les options

Si les trois moteurs sont des processus séparés, comment communiquent-ils ? Voici les patterns recommandés par ordre de complexité croissante :

Fichiers partagés
Le plus simple. Le trading écrit un fichier JSON/CSV avec ses positions, son P&L, son état. Le monitoring le lit périodiquement (toutes les 5-10 secondes). Latence : secondes. Parfait pour le retail.
Redis / Memcached
Stockage clé-valeur en mémoire. Le trading publie ses métriques dans Redis (Pub/Sub ou simple SET), le monitoring s'abonne ou interroge. Latence : millisecondes. Excellent compromis performance/simplicité.
Message Queue (NATS, ZMQ, Kafka)
Pub/sub haute performance. Chaque composant publie sur des topics dédiés. Le monitoring souscrit à tous les topics pertinents. Latence : microsecondes. Le standard institutionnel.
gRPC / Protocol Buffers
Communication typée et performante. Chaque service expose un endpoint /metrics. Le monitoring scrape périodiquement (modèle Prometheus). Latence : millisecondes. Excellent pour les architectures microservices.

Le choix pragmatique

Pour un système retail, Redis Pub/Sub est souvent le meilleur compromis. C'est simple à installer (une seule commande Docker), rapide (sub-milliseconde), et supporte aussi bien le push (le trading publie) que le pull (le monitoring interroge une clé). Pour un système institutionnel, NATS ou Kafka offrent des garanties de livraison et une scalabilité supérieures.

Mais ne sur-ingéniez pas : un fichier JSON lu toutes les 5 secondes par un cron fonctionne parfaitement pour un bot avec 10 positions. Commencez simple, complexifiez quand le besoin le justifie.

Exemple concret : un message de monitoring

Voici à quoi ressemble un message typé émis par le Trading Engine vers le Monitoring Layer, au format JSON structuré :

{
  "timestamp": "2026-02-27T14:30:05.123Z",
  "component": "trading_engine",
  "event_type": "order_sent",
  "correlation_id": "a1b2c3d4-5678-90ab-cdef-1234567890ab",
  "data": {
    "symbol": "AAPL",
    "side": "BUY",
    "quantity": 100,
    "order_type": "LIMIT",
    "price": 178.50,
    "strategy": "momentum_v3"
  },
  "metrics": {
    "queue_depth": 2,
    "open_positions": 5,
    "daily_pnl": 1250.00,
    "current_drawdown_pct": 0.3
  }
}

Chaque message contient un correlation_id qui permet de retracer tout le parcours de cette décision à travers le système. Le Risk Engine verra ce même ID quand il validera l'ordre. L'Execution Engine le verra quand il enverra l'ordre au broker. Et le monitoring les connecte tous pour reconstituer l'histoire complète.

Les 4 Couches du Monitoring

Le monitoring d'une stack de trading s'organise naturellement en quatre couches, de la plus basse (l'infrastructure physique) à la plus haute (le marché lui-même). Chaque couche a ses propres métriques, ses propres seuils, et ses propres responsables.

L'idée clé à retenir : un problème dans une couche basse se manifeste toujours dans les couches supérieures, mais avec un délai et une perte de contexte. Un problème réseau (Layer 1) apparait d'abord comme de la latence (Layer 2), puis comme du slippage (Layer 3), et finalement comme une perte inexplicable (Layer 4). Si vous ne monitorez que le P&L, vous détectez le problème trop tard pour agir.

La pyramide se lit de bas en haut. Plus on monte, plus les métriques sont « business » et moins elles sont « techniques ». Mais les couches basses sont les fondations — sans elles, rien au-dessus ne fonctionne.

Layer 1 — Infrastructure

La base de la pyramide. Même le meilleur algorithme ne peut rien si le serveur n'a plus de mémoire, si le réseau est saturé, ou si le disque est plein. Le monitoring d'infrastructure est le socle indispensable — souvent négligé par les traders qui pensent que seul le P&L compte.

CPU Usage
Seuil warning : 70%. Critique : 90%. Un trading engine à 95% CPU ne peut plus répondre aux événements de marché en temps voulu. Les spikes ponctuels sont normaux ; c'est l'utilisation soutenue qui compte. Fréquence de collecte : toutes les 10 secondes.
Mémoire (RAM)
Seuil warning : 75%. Critique : 90%. Surveillez aussi les memory leaks : une croissance linéaire de la RAM sur 24h est un signal d'alerte même si le seuil absolu n'est pas atteint. Un leak de 10 Mo/heure ne se voit pas en 1h mais crashe le système en 3 jours.
Disque I/O et Espace
Latence d'écriture et espace disponible. Les logs qui remplissent le disque sont un classique des pannes silencieuses. Seuil : < 20% espace libre = warning. La rotation automatique des logs est obligatoire, pas optionnelle.
Réseau / Latence
Mesurez le RTT (Round-Trip Time) vers le broker/exchange en continu. Les seuils dépendent de la stratégie. HFT : > 1ms = critique. Intraday : > 50ms = warning. Swing : > 500ms = warning. Surveillez aussi la perte de paquets : > 0.1% est déjà problématique.
Métrique Outil typique Fréquence Warning Critique
CPU %node_exporter / top10s> 70%> 90%
RAM %node_exporter10s> 75%> 90%
Disk freenode_exporter / df30s< 20%< 5%
Disk I/O latencyiostat / sar10s> 10ms> 50ms
Network RTT (broker)ping / TCP probe5s> 50ms> 200ms
Packet lossmtr / smokeping30s> 0.1%> 1%
DNS resolutiondig / DNS probe60s> 100msTimeout
Process countps / supervisord10sProcessus manquantTrading engine down

Layer 2 — Application

La couche application vérifie que vos composants logiciels fonctionnent correctement. Même si l'infrastructure est parfaitement saine, un bug logiciel, une dépendance cassée, une API qui change de format de réponse ou un WebSocket qui se déconnecte silencieusement peut paralyser le système.

Heartbeat
Chaque composant émet un signal de vie à intervalle régulier. Si le heartbeat manque, on sait immédiatement qu'un composant est tombé — même s'il n'a pas eu le temps d'émettre une erreur avant de mourir.
Order Flow
Nombre d'ordres envoyés vs confirmés. Temps entre soumission et confirmation (fill latency). Taux de rejet. Un pic de rejets peut signaler un problème d'API, de format, de permissions ou de rate limiting.
Execution Quality
Slippage moyen par trade. Écart entre le prix demandé et le prix obtenu. Sur 1000 trades, 2 bps de slippage systématique représentent un coût caché considérable qui érode votre alpha.
Connexions API
État des WebSockets, taux d'erreurs HTTP (4xx, 5xx), rate limits restants. Une connexion WebSocket qui se déconnecte toutes les 5 minutes indique un problème sous-jacent (timeout, payload size, auth).

Le pattern Heartbeat expliqué

Un heartbeat est un message simple (« je suis vivant ») envoyé à intervalle régulier par chaque composant. Le monitoring attend ce message et démarre un timer. Si le message n'arrive pas avant le timeout, le composant est considéré mort.

Un bon heartbeat inclut plus qu'un simple timestamp : il contient aussi l'état du composant (nombre d'ordres en attente, nombre de positions ouvertes, dernier prix vu, version du code). Cela permet de détecter un composant « zombie » — techniquement vivant (il envoie des heartbeats) mais fonctionnellement mort (il ne traite plus d'ordres, il est bloqué dans une boucle infinie).

Bonnes pratiques : heartbeat toutes les 5-10 secondes pour un système intraday, toutes les 30-60 secondes pour un système swing. Timeout = 3x l'intervalle. Si le heartbeat est toutes les 10s, alerter après 30s sans signal.

Métrique Description Fréquence Warning Critique
HeartbeatSignal de vie de chaque composant5-10s1 miss3 miss consécutifs
Order rejection rate% d'ordres rejetés par le brokerPar trade> 5%> 20%
Fill latencyTemps envoi → confirmationPar trade> 500ms> 2s
SlippageÉcart prix demandé vs obtenu (bps)Par trade> 5 bps> 20 bps
WebSocket reconnectionsNombre de reconnexions par heure1 min> 2/h> 10/h
API rate limit remaining% du quota API restantPar call< 30%< 10%
Queue depthOrdres en attente d'envoi1s> 10> 50
Error rateExceptions applicatives / minute1 min> 1/min> 10/min

Layer 3 — Business Logic

C'est la couche qui parle la langue du trader, pas celle de l'ingénieur. P&L, drawdown, exposition, taille des positions, concentration sectorielle. C'est ici que les décisions de risque se prennent et que les limites opérationnelles sont appliquées.

P&L Temps Réel
Profit & Loss réalisé et non réalisé, par stratégie, par instrument, par période. Le P&L doit être calculé indépendamment par le Risk Engine — ne faites jamais confiance au seul chiffre du Trading Engine.
Drawdown
Drawdown courant vs max drawdown historique vs limite de drawdown prédéfinie. Si le drawdown courant atteint 80% de la limite, l'alerte doit se déclencher avant qu'il ne soit trop tard pour agir.
Exposition Nette
Somme des positions longues moins les positions courtes (en notionnel). Un système market-neutral doit avoir une exposition nette proche de zéro. Tout dépassement significatif est une alerte de risque.
Position Sizing & Concentration
Taille de chaque position vs taille maximale autorisée. Concentration par secteur, par pays, par devise. Un portefeuille avec 80% sur un seul ticker est un problème de risque, pas de performance.
Métrique Formule Fréquence Warning Critique
P&L journalierΣ(unrealized + realized)1 min< -1% du capital< -2% du capital
Current drawdown(Peak - Current) / Peak1 min> 5%> 10%
Net exposureΣLong - ΣShort (notional)Par trade> 20% capital> 50% capital
Position concentrationMax position / Total capitalPar trade> 10%> 25%
Win rate (rolling 20)Wins / Total (20 derniers trades)Par trade< 40%< 25%
Sharpe ratio (rolling)(E[R] - Rf) / σ(R) × √252Journalier< 1.0< 0.5
Trade frequencyOrdres / période vs baseline1 min> 2x normal> 5x normal
Sector exposureMax sector / Total portfolioPar trade> 30%> 50%

Layer 4 — Marché

La couche la plus haute et la plus subtile. Ici, ce n'est pas votre système qui a un problème — c'est le marché qui a changé. Un regime shift, un flash crash, une évaporation de la liquidité, un gap overnight massif. Votre algorithme qui était profitable hier peut devenir catastrophique aujourd'hui si les conditions de marché ont fondamentalement changé.

Régime de Marché
Le VIX, la corrélation inter-actifs, le bid-ask spread moyen, le ratio put/call. Un passage de Risk-On à Risk-Off change radicalement le comportement des stratégies momentum et mean-reversion.
Volatilité
Volatilité réalisée vs implicite (VIX). Ratio VIX/VIX3M (structure par terme). Une inversion de la courbe de volatilité (backwardation) est un signal puissant de stress immédiat.
Liquidité
Bid-ask spread des instruments tradés, profondeur du carnet d'ordres, volume relatif (vs moyenne 20 jours). Une chute brutale de la liquidité précède souvent un mouvement violent et unidirectionnel.
Corrélations
Corrélation entre les actifs du portefeuille. En crise, « toutes les corrélations convergent vers 1 ». Si le beta de votre portefeuille vs le marché explose soudainement, la diversification ne vous protège plus.

Le danger spécifique du Layer 4

Les problèmes de Layer 4 sont les plus dangereux car ils sont les moins prévisibles et les plus difficiles à gérer algorithmiquement. Un changement de régime de marché peut invalider les hypothèses fondamentales de votre stratégie du jour au lendemain. C'est pourquoi le monitoring de marché n'est pas un luxe — c'est un stop-loss intellectuel. Il vous dit : « Les conditions dans lesquelles tu as backtesté ne sont plus réunies. Attention. »

Métrique Source Fréquence Signal d'alerte
VIX levelCBOETick / 1min> 25 = stress, > 35 = panique
VIX/VIX3M ratioCBOEJournalier> 1.0 = backwardation = stress court terme
SPY bid-ask spreadExchange dataTick> 2x normal = liquidité réduite
Volume ratioVolume / SMA(20)5 min> 3x = activité anormale
Cross-asset correlationRolling 20dJournalier> 0.8 = contagion entre actifs
ATR expansionATR(14) / ATR(14)[20d]Journalier> 1.5x = changement de régime vol
Overnight gapOpen - Previous CloseOpening> 2% = gap significatif
News sentiment shiftNLP / APIHoraireScore < -0.5 = négatif fort

Gestion du Risque en Temps Réel

La gestion du risque est la seule raison pour laquelle les systèmes de trading institutionnels survivent sur le long terme. Pas la qualité de l'alpha, pas la vitesse d'exécution, pas la sophistication du modèle — le risk management. Un système avec un alpha médiocre mais un excellent risk management sera profitable sur 10 ans. L'inverse ne survivra pas 6 mois.

Le risk management en trading systématique s'organise en trois phases temporelles : avant, pendant, et après le trade.

Phase 1 — Pre-Trade Checks

Avant qu'un ordre ne quitte votre système, il doit passer une série de vérifications automatiques. Ce sont des garde-fous qui empêchent les erreurs les plus coûteuses : les fat fingers, les dépassements de limites, et les ordres absurdes.

Check Description Seuil typique Action si violé
Order size La taille de l'ordre ne dépasse pas la limite maximale par instrument Max 5% du capital par position Rejet automatique + alerte
Fat finger Le prix de l'ordre est cohérent avec le prix actuel du marché Écart < 5% du mid price Rejet + alerte critique
Position limit La nouvelle position totale ne dépasse pas la limite de concentration Max 25% du capital par ticker Rejet
Notional limit L'exposition totale (gross) reste dans les limites autorisées Max 200% du capital (si leverage) Rejet + alerte
Drawdown gate Si le drawdown journalier dépasse le seuil, plus aucun nouvel ordre Drawdown > 2% = halt Halt trading + alerte critique
Order rate Nombre d'ordres par minute ne dépasse pas le seuil anti-emballement Max 60 ordres/min (retail) Throttle + alerte warning
Market hours Vérifier que le marché concerné est bien ouvert Heures d'ouverture exchange Rejet silencieux
Duplicate detection Pas de doublon (même ticker, direction, taille dans un intervalle court) Déduplication sur 1 seconde Rejet du doublon + log

Qu'est-ce qu'un « fat finger » ?

Un « fat finger » (doigt gras) est une erreur de saisie qui envoie un ordre avec un prix ou une quantité absurde. Exemple : acheter 10 000 actions au lieu de 100, ou vendre à 0.01$ au lieu de 100$. En trading algorithmique, l'équivalent est un bug qui génère des ordres aberrants.

Le pre-trade check de fat finger compare le prix de l'ordre au prix actuel du marché (mid price). Si l'écart dépasse un seuil (typiquement 5%), l'ordre est rejeté automatiquement et une alerte critique est envoyée.

Cas célèbre : en 2012, Knight Capital a perdu 440 millions de dollars en 45 minutes à cause d'un code de test déployé en production qui envoyait des ordres erratiques. Un simple pre-trade check sur le volume et la fréquence des ordres aurait évité la catastrophe complète.

Phase 2 — Intra-Trade Monitoring

Une fois l'ordre envoyé, le monitoring ne s'arrête pas — il s'intensifie. C'est pendant l'exécution que les problèmes les plus subtils et coûteux apparaissent : slippage excessif, fills partiels, ordres zombies en attente qui bloquent la queue.

Fill Time
Temps entre l'envoi de l'ordre et le fill complet. Un fill time anormalement long (p95 > 2x la médiane) peut indiquer un problème de liquidité, une dégradation de la connexion, ou un problème côté broker.
Slippage
Différence entre le prix attendu (au moment de la décision) et le prix obtenu (après fill). Un slippage négatif constant (> 3 bps en moyenne) signifie que votre sizing est trop gros pour la liquidité, ou que votre routing est sous-optimal.
Partial Fills
Ordres qui ne sont que partiellement exécutés. Un taux élevé de partial fills crée des positions asymétriques non désirées et complique la gestion du portefeuille. Cela indique un problème de liquidité ou un order type inadapté.
Queue Monitoring
Nombre d'ordres en attente dans la queue d'envoi. Si la queue grandit alors que les ordres ne partent pas, c'est un signe clair de problème de connexion, de rate limiting, ou de backpressure.

Phase 3 — Post-Trade Analysis

Après chaque trade et à la fin de chaque journée, une analyse automatique évalue la qualité de l'exécution et les performances. Ce n'est pas du monitoring temps réel — c'est de l'analyse batch qui alimente les améliorations continues du système.

P&L Attribution
Décomposer le P&L en composantes : alpha (qualité du signal), beta (exposition au marché), slippage, frais de transaction, coût de financement. Savoir exactement d'où vient le profit (ou la perte) est essentiel.
Execution Quality Score
Comparer chaque trade à des benchmarks : VWAP, Implementation Shortfall, Arrival Price. Chaque trade reçoit un score de qualité d'exécution de 0 à 100. Un score moyen < 70 = revoir la stratégie d'exécution.
Trade Journal Automatique
Chaque trade est enregistré avec son contexte complet : conditions de marché au moment de la décision, signal déclencheur, résultat final, temps de holding. Cela permet des post-mortems réguliers.
Risk-Adjusted Returns
Sharpe, Sortino, Calmar Ratios. Ces ratios normalisés permettent de comparer les performances ajustées du risque d'une période à l'autre et de détecter une dégradation progressive.

Le Kill Switch — Dernier Recours

Le kill switch est le mécanisme d'arrêt d'urgence de votre système de trading. Quand tout va mal — vraiment mal — le kill switch arrête tout immédiatement. C'est l'extincteur de la finance algorithmique.

Les 4 règles du Kill Switch

1. Indépendant — Le kill switch ne doit PAS être dans le même processus que le trading engine. Si le trading engine est en boucle infinie ou gelé, un kill switch interne ne fonctionnera jamais. Il doit vivre dans un processus séparé.

2. Multiples déclencheurs — Trois types : automatique (drawdown > X%), semi-automatique (un clic sur un dashboard ou un message Discord), et physique (un script shell exécutable depuis n'importe où, y compris votre téléphone).

3. Testé régulièrement — Un kill switch non testé est un kill switch qui ne fonctionne pas. Testez-le en production (avec de très petites positions) au moins une fois par mois. Vérifiez qu'il annule effectivement les ordres et ferme les positions.

4. Actions exhaustives et claires — Le kill switch ne se contente pas d'arrêter les nouveaux ordres. Il : (1) annule tous les ordres en attente, (2) peut optionnellement fermer toutes les positions ouvertes, (3) notifie toutes les parties prenantes, (4) log l'événement de manière immuable avec timestamp et raison.

Risk Budgeting & Drawdown Limits

Le risk budgeting est l'art d'allouer un « budget de risque » à chaque stratégie, chaque instrument, et chaque période temporelle. L'idée fondamentale : vous définissez à l'avance combien vous êtes prêt à perdre par jour, par semaine, par mois. Quand le budget est épuisé, le trading s'arrête automatiquement. Pas de négociation, pas de « juste un dernier trade ».

Période Drawdown Max Action automatique Reset
Par trade -1% du capital Stop loss automatique Prochain trade
Journalier -2% du capital Halt trading pour la journée entière Lendemain 9h30
Hebdomadaire -5% du capital Réduction du sizing de 50% la semaine suivante Lundi suivant
Mensuel -10% du capital Halt trading complet + review obligatoire Après review manuelle validée
Peak-to-trough -20% du peak Kill switch total + analyse complète de la stratégie Après refonte et re-backtest

Pourquoi des limites étagées ?

Les limites étagées (par trade, jour, semaine, mois) agissent comme des couches de défense successives — le modèle du Swiss Cheese (fromage suisse). Chaque couche a des trous (des scénarios qu'elle ne couvre pas), mais les trous ne s'alignent (presque) jamais.

Perdre 1% sur un trade, c'est normal et attendu. Perdre 2% sur la journée, c'est le signe qu'aujourd'hui n'est pas votre jour — mieux vaut s'arrêter et préserver le capital. Perdre 5% sur la semaine suggère un problème plus profond : conditions de marché défavorables, bug dans la stratégie, ou paramètres décalés.

La règle empirique : votre max drawdown en live sera typiquement 2-3x celui observé en backtest. Si votre backtest montre un max drawdown de 10%, calibrez vos limites pour tolérer 20-30% en réel.

Alerting et Escalation

Un système de monitoring sans alerting, c'est un détecteur de fumée sans sirène. L'alerting est le pont entre l'observation et l'action. Mais un alerting mal conçu est parfois pire que pas d'alerting du tout — il crée de l'alert fatigue, cette insensibilisation progressive aux alertes qui fait qu'on finit par ignorer même les vraies urgences.

Les 4 niveaux d'alerte

INFO
Notification informative, aucune action requise. Exemples : ouverture/fermeture du marché, début d'une session de trading, résumé journalier automatique. Canal : dashboard uniquement. Pas de notification push.
WARNING
Quelque chose dévie de la norme mais n'est pas encore critique. Action : surveiller dans les prochaines minutes/heures. Canal : Slack ou Discord + dashboard. Exemples : drawdown à 60% de la limite, CPU soutenu à 75%, slippage en hausse.
CRITICAL
Problème sérieux nécessitant une intervention immédiate. Action : quelqu'un doit regarder MAINTENANT. Canal : SMS + Slack/Discord urgent + potentiellement appel téléphonique. Exemples : drawdown limit atteinte, composant down, connexion broker perdue.
EMERGENCY
Le système a déjà déclenché un kill switch ou est en train de perdre de l'argent activement et de manière incontrôlée. Action automatique + notification à toutes les parties. Canal : TOUS les canaux simultanément.

Matrice d'escalation

La matrice d'escalation définit qui est notifié, quand, et comment. Elle évite le bystander effect — ce phénomène où personne n'agit parce que chacun pense que quelqu'un d'autre s'en occupe.

Niveau Qui est notifié Délai réponse max Canal Si non acquitté
INFO Dashboard / logs uniquement Aucun Dashboard Pas d'escalation
WARNING Trader / opérateur on-call < 30 minutes Slack + Discord → CRITICAL après 30 min
CRITICAL Trader + Risk Manager < 5 minutes SMS + Slack + Appel → EMERGENCY après 15 min
EMERGENCY Tous + CTO / Head of Trading Immédiat Tous canaux Kill switch auto si non ack 5 min

Alert Fatigue : Le Garçon qui Criait au Loup

L'alert fatigue est le phénomène où les opérateurs deviennent insensibles aux alertes parce qu'il y en a trop, trop souvent, et trop peu pertinentes. Des études dans le domaine médical montrent que quand le taux de fausses alertes dépasse 85%, les opérateurs finissent par ignorer toutes les alertes — y compris les vraies urgences. C'est exactement le même problème en trading.

Voici les quatre techniques clés pour lutter contre l'alert fatigue :

Déduplication
Ne pas envoyer la même alerte 50 fois par minute. Regrouper : « CPU > 90% détecté depuis 5 minutes (12 occurrences) » est bien mieux que 12 alertes séparées qui saturent le canal.
Contextualisation
Chaque alerte doit inclure : (1) ce qui se passe, (2) pourquoi c'est grave, (3) quoi faire. « CPU 92% » ne sert à rien. « CPU 92% sur le trading engine, probable backtest en parallèle, arrêter le backtest via: kill-backtest.sh » est actionnable.
Cooldown
Après déclenchement, l'alerte entre en période de cooldown (ex: 15 minutes). Elle ne se redéclenche que si la condition persiste et que le cooldown est expiré. Cela empêche la rafale d'alertes sur un problème déjà connu.
Priorisation
Les alertes business (Layer 3-4 : P&L, drawdown, régime) passent toujours avant les alertes infra (Layer 1-2 : CPU, disk). Un drawdown de -2% est immensement plus urgent que CPU à 72%.

Flux de traitement des alertes

Le diagramme Sankey ci-dessus illustre un point crucial : sur 100 événements bruts, seulement 3 devraient déclencher une alerte EMERGENCY, et environ 40% devraient être supprimés (dupliqués, déjà connus, en cooldown). Si votre ratio est très différent — trop d'alertes critiques ou trop peu de suppression — votre système d'alerting est mal calibré et génère de la fatigue.

Le ratio sain d'alertes

Un système d'alerting bien calibré suit approximativement cette distribution :

  • Supprimées / dédupliquées : ~40% — La majorité des événements bruts ne méritent pas d'alerte
  • INFO : ~30% — Informations de routine, visibles sur le dashboard
  • WARNING : ~18% — Écarts significatifs, à surveiller
  • CRITICAL : ~9% — Problèmes sérieux, intervention nécessaire
  • EMERGENCY : ~3% — Urgences absolues, action immédiate

Si plus de 20% de vos alertes sont CRITICAL ou EMERGENCY, vos seuils sont trop sensibles. Si vous avez zéro alerte WARNING, vous ne détectez pas les problèmes assez tôt — vous passez directement de « tout va bien » à « catastrophe ».

Les 20 Métriques Essentielles

Si vous ne pouvez monitorer que 20 métriques sur votre système de trading, voici celles qui comptent le plus. Elles couvrent les quatre couches et donnent une vue complète et équilibrée de la santé de votre stack.

Exécution (5 métriques)

# Métrique Formule / Description Seuil d'alerte Fréquence
1Fill RateOrdres exécutés / Ordres envoyés × 100< 95%Par trade
2Average Slippage(Prix obtenu - Prix demandé) / Prix demandé, en bps> 5 bps (rolling 20)Par trade
3Order-to-Fill LatencyTemps entre envoi et fill complet (ms, percentile 95)> 500ms (p95)Par trade
4Rejection RateOrdres rejetés / Ordres envoyés × 100> 5%Par trade
5Implementation Shortfall(Prix décision - Prix exécution) × Quantité> 10 bps (rolling 20)Par trade

Risque (5 métriques)

# Métrique Formule / Description Seuil d'alerte Fréquence
6Current Drawdown(Peak Equity - Current Equity) / Peak Equity> 5% (W), > 10% (C)1 min
7Daily VaR (95%)Value at Risk à 95% confiance, horizon 1 jour> 2% du capitalHoraire
8Gross ExposureΣ|Long| + Σ|Short| / Capital total> 200% (si leveraged)Par trade
9Concentration MaxMax(Position / Capital) par instrument> 20%Par trade
10Sharpe Ratio (rolling 30d)(E[R] - Rf) / σ(R) × √252< 0.5 (W), < 0 (C)Journalier

Comprendre le Sharpe Ratio

Le Sharpe Ratio mesure le rendement ajusté du risque. Il répond à la question : « Pour chaque unité de risque (volatilité) que je prends, combien de rendement excédentaire est-ce que j'obtiens ? »

La formule : Sharpe = (Rendement moyen - Taux sans risque) / Écart-type des rendements, annualisé en multipliant par √252 (jours de trading).

  • Sharpe > 2.0 — Excellent. Très rare en réel sur le long terme.
  • Sharpe 1.0 - 2.0 — Bon. Le risque est bien rémunéré.
  • Sharpe 0.5 - 1.0 — Médiocre. La stratégie compense à peine le risque.
  • Sharpe < 0.5 — Signal d'alerte. Améliorer ou arrêter.

Limite : le Sharpe ne capture pas les risques de queue (tail risks). Complétez avec le Sortino (pénalise uniquement la volatilité négative) et le Calmar (rendement annualisé / max drawdown).

Infrastructure (5 métriques)

# Métrique Description Seuil d'alerte Fréquence
11CPU UsageUtilisation CPU du trading engine (%)> 70% (W), > 90% (C)10s
12Memory RSSMémoire résidente du processus tradingCroissance > 10%/heure30s
13Network RTTRound-trip time vers le broker/exchange> 50ms (W), > 200ms (C)5s
14Disk FreeEspace disque disponible (%)< 20% (W), < 5% (C)60s
15Process UptimeDurée depuis le dernier restart du processusRestart non planifié = alerte10s

Marché (5 métriques)

# Métrique Description Seuil d'alerte Fréquence
16VIX LevelCBOE Volatility Index> 25 (W), > 35 (C)1 min
17Volume RatioVolume actuel / SMA(volume, 20j)> 3x = activité anormale5 min
18Bid-Ask Spread(Ask - Bid) / Mid, en bps, vs moyenne> 2x normalTick
19Cross-Asset CorrelationCorrélation rolling 20j entre actifs du portefeuille> 0.8 = contagionJournalier
20ATR ExpansionATR(14) actuel / ATR(14) il y a 20 jours> 1.5x = regime shiftJournalier

Comprendre le Drawdown et la VaR

Le drawdown mesure la perte depuis le point le plus haut (peak). Si votre portefeuille a atteint 110 000$ puis est redescendu à 99 000$, votre drawdown est de (110 000 - 99 000) / 110 000 = 10%. C'est la métrique de risque la plus intuitive.

La VaR (Value at Risk) répond à : « Quel est le montant maximum que je peux perdre avec 95% de probabilité sur 1 jour ? » Une VaR de 5 000$ à 95% signifie : 1 jour sur 20, vous pourriez perdre plus de 5 000$. Complétez par la CVaR (Conditional VaR) qui mesure la perte moyenne quand on dépasse la VaR.

Patterns et Anti-Patterns

En architecture de monitoring, il existe des patterns éprouvés qui fonctionnent dans presque tous les contextes, et des anti-patterns qui mènent invariablement à des incidents. Voici les plus importants.

Bons Patterns

1. Immutable Logs (Logs Immuables)

Les logs ne doivent jamais être modifiés après écriture. Pas de rotation destructive, pas de troncature. Chaque événement est écrit une fois et conservé pour une durée définie (30-90 jours minimum). Les logs immutables sont votre boîte noire — quand l'avion s'écrase, c'est la seule chose qui permet de comprendre pourquoi.

Append-only storage
Écrire en mode append uniquement. Jamais de seek+write. Utiliser S3 (immutable par défaut), un WAL (Write-Ahead Log), ou un fichier en mode O_APPEND.
Logs structurés (JSON)
Chaque log est un objet JSON avec des champs fixés : timestamp, level, component, message, context, correlation_id. Cela permet le parsing automatique, le filtrage et la recherche.
Rotation sans perte
Compresser les vieux logs (gzip), les archiver (S3 / GCS), ne jamais supprimer avant la période de rétention. Automatiser avec logrotate ou un pipeline de log shipping (Filebeat, Fluentd).

2. Circuit Breakers

Inspiré du pattern électrique : quand un composant détecte trop d'erreurs (ex: 5 rejets consécutifs de l'API broker), il « ouvre le circuit » et arrête d'envoyer des requêtes au composant défaillant. Après un cooldown (ex: 30 secondes), il envoie une requête test (half-open state). Si elle réussit, le circuit se referme. Sinon, il reste ouvert.

Par connexion broker
Si l'API du broker renvoie 5 erreurs consécutives, arrêter d'envoyer des ordres pendant 30 secondes. Cela évite d'aggraver un problème (rate limiting, maintenance) en envoyant encore plus de requêtes.
Par market data feed
Si les données de marché n'ont pas été mises à jour depuis 10 secondes en intraday (stale data), arrêter de trader immédiatement. Trader sur des données obsolètes est plus dangereux que ne pas trader.

3. Health Checks Composés

Chaque composant expose un endpoint /health qui retourne non seulement « healthy / unhealthy » mais un état détaillé incluant : la vérification de ses propres dépendances (DB, broker, feed) et son état business (positions, dernier trade, P&L). Cela détecte les composants « zombies » — techniquement vivants mais fonctionnellement morts.

4. Correlation IDs

Chaque décision de trading reçoit un identifiant unique (UUID) qui la suit à travers tous les composants, du signal initial à l'exécution finale. En cas de problème, il suffit de filtrer les logs par cet ID pour retracer le parcours complet d'une décision en quelques secondes.

Anti-Patterns à Éviter

Anti-Pattern Pourquoi c'est dangereux Pattern correct
Silent Failures Un composant échoue sans émettre d'erreur. Le système continue avec des données manquantes ou corrompues. Des semaines peuvent passer avant détection. Fail loud. Chaque erreur est loggée, chaque exception non gérée déclenche une alerte. Un composant qui ne sait pas quoi faire doit s'arrêter, pas continuer silencieusement.
Log-and-Forget Les erreurs sont loggées mais personne ne les lit. Des fichiers de 10 Go que personne n'a jamais ouverts. Le log existe pour la bonne conscience, pas pour l'action. Chaque log d'erreur a une alerte associée ou est inclus dans un dashboard de tendances. Un log qui n'est jamais lu ne devrait pas exister.
Single Point of Failure Un seul serveur, une seule connexion broker, un seul feed de données. Si ce composant tombe, tout le système tombe avec. Redondance sur le chemin critique. Deux connexions broker (primaire + failover). Deux sources de données. Le monitoring lui-même a un backup (même simple).
God Dashboard Un seul dashboard avec 200 métriques. Personne ne sait où regarder. L'information noyée dans le bruit est pire que pas d'information du tout. Un dashboard par couche, un dashboard de synthèse. Maximum 8-10 métriques par écran. Chaque métrique a un seuil visuel (vert/jaune/rouge).
Copy-Paste Monitoring Copier la config monitoring d'un autre projet sans l'adapter. Seuils génériques qui ne correspondent pas au comportement réel de votre système. Calibrer les seuils sur les données historiques de votre système. Seuils basés sur les percentiles (p95, p99), pas sur des valeurs arbitraires.
No Runbook L'alerte sonne mais personne ne sait quoi faire. L'opérateur improvise pendant que le système perd de l'argent. Chaque alerte CRITICAL/EMERGENCY a un lien vers un runbook : (1) cause, (2) diagnostic, (3) actions correctives, (4) quand escalader.
Testing in Prod Only Le monitoring n'est jamais testé. On découvre qu'il ne fonctionne pas le jour où on en a besoin — le pire moment possible. Tester régulièrement : (1) injecter des pannes simulées, (2) vérifier les alertes, (3) tester le kill switch en conditions réelles avec des petites positions.

Le pattern le plus sous-estimé : les Runbooks

Un runbook est un document qui dit : « Quand l'alerte X sonne, voici exactement les étapes à suivre. » C'est l'équivalent d'une checklist de pilote d'avion. Sans runbook, chaque incident est une improvisation sous pression. Avec un runbook, c'est une procédure testée et validée.

Chaque alerte CRITICAL ou EMERGENCY devrait avoir un runbook associé contenant : (1) les conditions de déclenchement, (2) les commandes de diagnostic à exécuter, (3) les actions correctives par ordre de priorité, (4) les critères de résolution, (5) le contact d'escalation si les étapes ne suffisent pas.

Application Retail

Tout ce que nous avons couvert peut sembler écrasant pour un trader retail avec un bot sur un VPS à 10$/mois. La bonne nouvelle : les principes sont exactement les mêmes, seule l'échelle change. Voici comment adapter cette architecture à un budget et une complexité de niveau retail.

Architecture simplifiée pour le retail

L'architecture retail se résume à trois composants simples et gratuits :

Trading Bot
Votre bot (Python, Node, Go...) qui tourne sur un VPS. Il écrit son état dans un fichier JSON local à chaque cycle : positions ouvertes, P&L réalisé et non réalisé, dernier heartbeat, drawdown courant, dernier prix vu.
Cron Health Check
Un script cron (bash ou Python) indépendant qui tourne toutes les minutes. Il lit le fichier JSON d'état, vérifie le heartbeat, compare le drawdown aux limites. Processus séparé du bot = principe de SoC respecté.
Discord/Telegram Webhook
Quand le health check détecte un problème, il envoie un message via webhook. Gratuit, immédiat, et vous recevez les notifications push sur votre téléphone 24/7.

Checklist du Monitoring Viable Minimum (MVM)

Voici les 12 éléments que tout trader retail doit avoir, même avec le système le plus simple possible :

# Élément Difficulté Outil gratuit
1Heartbeat du bot (alive/dead)FacileFichier JSON + cron
2P&L journalier loggéFacileCSV / SQLite local
3Alerte drawdown (> X%)FacileDiscord/Telegram webhook
4Alerte position trop grosseFacileScript de vérification cron
5Kill switch (annule tout)MoyenScript bash/Python + API broker
6Trade journal automatiqueFacileLog chaque trade dans un CSV/DB
7Monitoring connexion brokerFacilePing / API status check
8VIX level checkFacileYahoo Finance API gratuite
9Dashboard P&L visuelMoyenGrafana Cloud (free tier)
10Backup des configsFacileGit
11Log rotationFacilelogrotate (Linux natif)
12Weekly review automatiséeMoyenScript qui génère un résumé hebdo

Le minimum absolu — 3 choses obligatoires

Si vous ne faites que 3 choses, faites celles-ci :

  1. Un heartbeat qui vous alerte quand votre bot est mort (fichier JSON + cron + Discord webhook).
  2. Un drawdown limit qui arrête le trading automatiquement au-delà de -2% journalier (dans le cron, pas dans le bot).
  3. Un kill switch que vous pouvez activer depuis votre téléphone (un simple script qui appelle l'API broker pour annuler tous les ordres et optionnellement fermer les positions).

Ces trois éléments à eux seuls auraient évité la majorité des catastrophes que nous avons analysées dans la Partie 1 de cette série.

De retail à semi-pro : la roadmap de maturité

Une fois le MVM en place et fonctionnel, voici les étapes pour monter en maturité progressivement :

Phase 1
Structured Logging
Remplacer les print() par des logs JSON structurés avec timestamp, composant, niveau, correlation ID. Cela transforme vos logs d'un journal illisible en une base de données interrogeable.
Phase 2
Métriques Prometheus
Exposer vos métriques clés (P&L, drawdown, latence) au format Prometheus. Utiliser Grafana Cloud (gratuit, 10k séries) pour les visualiser. Vous passez d'un cron à un vrai monitoring continu.
Phase 3
Séparation des processus
Sortir le risk management du bot pour en faire un processus séparé communiquant via Redis. Même sur le même VPS, deux processus sont vastement supérieurs à un monolithe.
Phase 4
Chaos Testing
Volontairement tuer votre bot pendant les heures de marché (positions minimales). Vérifier que le monitoring détecte, alerte, et que le kill switch fonctionne. Le test ultime de votre architecture.

Synthèse — Les 6 Principes Fondamentaux

Voici la synthèse des principes clés de cette Partie 2. Ces six principes s'appliquent à tout système de trading, quelle que soit l'échelle :

1
Séparation des Concerns
Trading, Risk et Monitoring sont trois processus indépendants. Le crash de l'un ne doit pas impacter les autres. Le monitoring est strictement unidirectionnel : il observe, il n'intervient jamais dans le flux de trading.
2
4 Couches de Monitoring
Infrastructure → Application → Business Logic → Marché. Monitorez toutes les couches. Un problème en bas se manifeste toujours en haut — mais trop tard si vous ne surveillez que le haut.
3
Défense en Profondeur
Pre-trade checks + intra-trade monitoring + post-trade analysis + kill switch. Chaque couche de défense attrape ce que la précédente a raté. Modèle Swiss Cheese.
4
Alerting Intelligent
4 niveaux (INFO / WARNING / CRITICAL / EMERGENCY). Déduplication, contextualisation, cooldown. Ratio cible : 40% supprimées, 30% INFO, 18% WARNING, 9% CRITICAL, 3% EMERGENCY.
5
20 Métriques Essentielles
5 par catégorie (Exécution, Risque, Infrastructure, Marché). Chaque métrique a une formule, un seuil, et une fréquence de collecte définis explicitement.
6
Patterns > Outils
Les bons patterns (immutable logs, circuit breakers, health checks, correlation IDs, runbooks) sont plus importants que le choix de l'outil. L'architecture guide, l'outil exécute.

Et maintenant ?

Vous avez l'architecture. Vous connaissez les principes, les couches, les métriques, les patterns et les anti-patterns. La prochaine étape — la Partie 3 : Tooling — transformera ces principes en réalité concrète : quels outils choisir et configurer (Prometheus, Grafana, Loki, PagerDuty, Discord bots), comment construire votre stack de monitoring de A à Z, avec des exemples de code fonctionnels en Python et Go.

Série : Monitorer sa Stack de Trading

① Post-Mortems ② Architecture ③ Tooling
Monitoring Trading Stack
2/3
Introduction Séparation des Concerns Les 4 Couches Gestion du Risque Alerting & Escalation Métriques Essentielles Patterns & Anti-Patterns Application Retail