Engines

⚠️ Cette page peut évoluer car l'architecture des Engines est encore en cours de conception.

Les Engines sont les composants de traitement dans TheoryCraft qui consomment des événements et effectuent des tâches spécifiques. Chaque Engine reçoit des MarketEvents et/ou des BrokerEvents, puis exécute sa fonction désignée.

Principe de Conception

Un Engine = un consommateur d'événements avec une seule responsabilité stable.

Chaque Engine :

  • Consomme des flux MarketEvent et/ou BrokerEvent
  • Peut émettre des ordres, des métriques ou des artefacts
  • Fait exactement une chose
  • Peut être branché ou débranché sans casser le système

Si deux responsabilités ont des rythmes, des horizons temporels ou des sorties différents, elles appartiennent à des Engines séparés. Cette séparation assure des frontières claires, la testabilité et la flexibilité.

Types d'Engines

StrategyEngine

Transforme les événements de marché en décisions de trading. Le StrategyEngine est le cerveau décisionnel : il évalue la logique de stratégie et produit des signaux.

Responsabilités :

  • Évaluer les conditions d'entrée et de sortie
  • Produire des signaux (entrée, sortie, dimensionnement)
  • Rester sans état ou avec un état minimal

Entrées : MarketEvent, optionnellement BrokerEvent (pour la connaissance des positions)

Sorties : Intentions d'ordres (pas d'exécution directe)

Le StrategyEngine se concentre uniquement sur la logique de décision. Il n'exécute pas les ordres, ne calcule pas les statistiques et ne gère pas le risque. Ces responsabilités appartiennent à d'autres Engines.

PortfolioEngine

Coordonne plusieurs stratégies. Le PortfolioEngine gère l'allocation de capital, le risque agrégé et l'arbitrage entre stratégies.

Responsabilités :

  • Allouer le capital entre les stratégies
  • Gérer l'exposition globale au risque
  • Arbitrer entre les signaux concurrents
  • Contrôler la corrélation et l'exposition

Entrées : Signaux de plusieurs StrategyEngines, état du Broker

Sorties : Ordres agrégés

Pourquoi séparer du StrategyEngine ? La logique de stratégie et la gestion de portfolio opèrent à des niveaux différents. Un StrategyEngine ne sait rien des autres stratégies. Il produit simplement des signaux. Le PortfolioEngine voit l'ensemble et décide comment les combiner.

Sans PortfolioEngine, vous êtes limité au trading mono-stratégie.

RiskEngine

Contrôle le risque avant l'exécution. Le RiskEngine valide les intentions d'ordres contre les règles de risque avant qu'elles n'atteignent le Broker.

Responsabilités :

  • Imposer les limites de drawdown
  • Surveiller l'exposition maximale
  • Contrôler l'effet de levier
  • Implémenter la logique de kill-switch
  • Appliquer les règles de gestion du risque

Entrées : Intentions d'ordres, état du Broker

Sorties : Ordres validés ou bloqués

Pourquoi séparer ? Séparer le contrôle du risque de la logique de stratégie est une bonne pratique institutionnelle. Cela crée une frontière claire : les stratégies proposent, le contrôle du risque dispose.

StatisticsEngine

Mesure la performance après coup. Le StatisticsEngine suit les trades et calcule les métriques pour évaluer la performance des stratégies.

Responsabilités :

  • Calculer les métriques : PnL, drawdown, ratio de Sharpe, ratio de Sortino, espérance
  • Agréger par trade, jour ou période
  • Générer des rapports de performance et des séries temporelles

Entrées : BrokerEvent, optionnellement MarketEvent

Sorties : Métriques, rapports, données de séries temporelles

Pourquoi séparer du StrategyEngine ? Les statistiques opèrent à des fréquences différentes et utilisent une logique non causale (elles regardent les trades terminés). Mélanger les statistiques dans le code de stratégie risque une contamination par anticipation. Les garder séparées assure un backtesting propre.

OptimizerEngine

Explore l'espace des paramètres. L'OptimizerEngine exécute plusieurs backtests avec différentes configurations pour trouver les paramètres optimaux.

Responsabilités :

  • Définir l'espace de recherche des paramètres
  • Lancer N backtests
  • Collecter et comparer les métriques
  • Retourner les configurations optimales

Entrées : Plages de paramètres, définitions de stratégies

Sorties : Configurations classées, rapports d'optimisation

L'OptimizerEngine est un engine "méta". Il orchestre d'autres engines et pipelines plutôt que de traiter directement les données de marché, et opère en dehors du temps réel.

LiveGuardEngine

Surveille l'exécution live. Le LiveGuardEngine détecte les anomalies et les divergences pendant le trading live.

Responsabilités :

  • Détecter les divergences backtest vs live
  • Surveiller les latences anormales
  • Signaler les incohérences Broker/Marché
  • Déclencher des alertes

Entrées : MarketEvent, BrokerEvent, métriques système

Sorties : Alertes, diagnostics

Le LiveGuardEngine n'est pertinent qu'en trading live, mais fournit un monitoring de niveau professionnel pour les systèmes en production.

Comment Fonctionnent les Engines

Un workflow typique :

  1. MarketSource émet des MarketEvents (données de prix, indicateurs)
  2. Le Broker émet des BrokerEvents (mises à jour d'ordres, changements de positions)
  3. L'Engine reçoit un ou les deux flux d'événements
  4. L'Engine traite les événements et effectue sa tâche
  5. L'Engine émet des sorties (ordres, métriques, alertes)

Cette conception événementielle assure que la même logique d'Engine fonctionne en backtesting, paper trading et trading live.

Composition des Engines

Bien que chaque workflow se connecte à un Engine principal, les Engines peuvent être composés :

  • StrategyEngine → RiskEngine → Broker
  • Plusieurs StrategyEngines → PortfolioEngine → RiskEngine → Broker
  • N'importe quelle configuration → StatisticsEngine (en observation)

Cette composabilité vous permet de construire des systèmes de trading sophistiqués à partir de composants simples et ciblés.

Prochaines Étapes