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
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 !