Skip to content
Open sourceEnvironnement de développementL'architecture d'OctoBot

L’architecture d’OctoBot

Philosophie

L’objectif derrière OctoBot est d’avoir un robot de trading très rapide et scalable.

Pour y parvenir, OctoBot est entièrement construit autour du framework producteur-consommateur

asyncio async_channel, qui permet de transmettre très rapidement et efficacement des données aux différents éléments du bot. L’idée est de maintenir en permanence des données parfaitement à jour sans avoir recours à des boucles de mise à jour. Ces boucles imposent des temps d’attente, ce qui est inefficace. Cette architecture permet de notifier la chaîne d’évaluation le plus rapidement possible dès qu’une mise à jour est disponible, sans attendre le cycle d’une quelconque boucle de mise à jour.

De plus, afin d’économiser du temps CPU, OctoBot utilise le moins de threads possible (généralement moins de 10 avec une configuration standard).

Aperçu

Le code d’OctoBot est un monorepo, réparti en plusieurs packages. Chaque package est traité comme un module python indépendant, dans son propre dossier du répertoire packages du dépôt. OctoBot lui-même est publié sur le

dépôt de packages python officiel (utilisé par les commandes pip).

OctoBot

OctoBot architecture

Vue simplifiée des composants principaux d’OctoBot.

Dans la partie OctoBot, chaque flèche est un async channel.

Les Tentacles d’OctoBot

Les tentacles sont les extensions d’OctoBot. Elles sont conçues pour être facilement personnalisables, peuvent être activées ou non et réalisent une action spécifique au sein d’OctoBot.

Les Tentacles de la chaîne d’évaluation

Ce sont des outils pour analyser les données de marché ainsi que tout autre type de données (Reddit, Telegram, etc). Elles implémentent les évaluateurs, stratégies et trading modes abstraits.

Les Tentacles utilitaires

Ce sont les interfaces d’OctoBot (web, telegram), les systèmes de notification, les flux d’actualités sociales et les collecteurs de données de backtesting. Elles implémentent les interfaces, services, service feeds, notificateurs et collecteurs de données abstraits.

Evaluateurs, stratégies et trading modes:

Evaluateurs

De simples classes python qui sont automatiquement réveillées lorsque de nouvelles données sont disponibles. Leur but est de définir self.eval_note et d’appeler await self.evaluation_completed, ce qui rend le résultat accessible à la ou aux stratégies. Ils doivent être dédiés à une seule tâche simple comme (par exemple) évaluer le RSI sur les données actuelles ou chercher une divergence dans une tendance.

Stratégies

Les stratégies sont des éléments plus complexes, elles peuvent lire toutes les évaluations des évaluateurs sur chaque time frame et s’appuient sur ces évaluations pour définir leur self.eval_note et appeler await self.strategy_completed. Par comparaison, si les évaluateurs sont les sens humains, les stratégies sont le cerveau qui reçoit les signaux de ces sens et décide d’agir ou non. Les stratégies peuvent être génériques comme SimpleStrategyEvaluator, qui prend en compte n’importe quel évaluateur standard et n’importe quelle time frame, ou n’utiliser que des évaluateurs spécifiques comme MoveSignalsStrategyEvaluator.

Trading modes

Les trading modes utilisent les évaluations de la ou des stratégies pour créer, mettre à jour ou annuler des ordres. À partir des signaux des stratégies, ils sont responsables de la façon de traduire un signal en ordre, en regardant les fonds disponibles, les ordres ouverts, en considérant un stop loss ou non, et les autres responsabilités liées au trading.

Déclencheurs

Les évaluateurs, stratégies et trading modes sont automatiquement déclenchés lorsque leur channel reçoit de nouvelles données. Les sources de déclenchement sont :

Pour les évaluateurs

  • Évaluateurs techniques : toute nouvelle bougie ou demande de rafraîchissement (avec des données de bougies mises à jour) venant d’une stratégie
  • Évaluateurs temps réel : toute nouvelle bougie et tout changement du prix de marché
  • Évaluateurs sociaux : le signal associé (ex : un post pour un évaluateur social Reddit)

Pour les stratégies

  • Après un cycle d’évaluateurs techniques : quand tous les TA ont mis à jour leur évaluation et appelé await self.evaluation_completed
  • Après toute évaluation d’un évaluateur temps réel et l’appel de await self.evaluation_completed
  • Après toute évaluation d’un évaluateur social et l’appel de await self.evaluation_completed

Pour les trading modes

  • Après toute évaluation d’une stratégie et l’appel de await self.strategy_completed

Merci d’avoir lu ce guide et si vous avez une idée pour l’améliorer, n’hésitez pas à nous contacter !