Un guide étape par étape pour construire un Bot de trading dans n’importe quel langage de programmation

À partir de là, nous pouvons commencer à déterminer à quoi ressemblera notre architecture.

Premièrement, nous avons besoin d’une variable pour indiquer l’état dans lequel se trouve actuellement le Bot. C’est soit BUY ou SELL. Un booléen ou un enum devrait bien convenir à cet objectif.

Puis nous devons définir nos seuils d’achat et de vente. Ceux-ci indiquent le pourcentage de diminution ou d’augmentation du prix depuis notre dernière opération.

Par exemple, si j’ai acheté l’actif à 100$, et que son prix est maintenant à 102$, nous avons une augmentation de 2%. Si nous avons un seuil de VENTE fixé à une augmentation de 1%, notre bot va alors vendre, car il a fait un profit supérieur à notre seuil.

Dans notre cas, ces seuils seront des constantes. Nous en avons besoin de 4, deux pour chaque état:

Seuil d’achat (si le bot est en état de vente)

  • DIP_THRESHOLD : achète l’actif si son prix a diminué de plus que le seuil. L’idée de ceci est de suivre la stratégie « acheter bas, vendre haut », où vous tentez d’acheter un actif lorsqu’il est sous-évalué, en espérant que sa valeur augmente afin que vous puissiez vendre.
  • UPWARD_TREND_THRESHOLD : Achète l’actif si son prix a augmenté de plus que le seuil. Cela va à l’encontre de la philosophie « acheter bas, vendre haut », mais vise à identifier le moment où le prix est en hausse et nous ne voulons pas manquer une opportunité d’acheter avant qu’il ne monte encore plus haut.

Voici une illustration qui pourrait vous aider :

Image By Author

Si nous avons effectué une opération de VENTE au point marqué « VENTE » dans l’image ci-dessus, nous avons maintenant nos seuils définis pour l’opération d’achat.

Si jamais le prix passe en dessous de la ligne verte inférieure ou au-dessus de la ligne verte supérieure, nous effectuerons une opération d’ACHAT. Dans ce cas, nous avons dépassé le seuil supérieur en premier, donc nous avons acheté sur la base du BUY_DIP_THRESHOLD .

Seuil de vente (si le Bot est dans l’état BUY)

  • PROFIT_THRESHOLD : Vend l’actif si son prix a augmenté au-dessus du seuil depuis que nous l’avons acheté. C’est ainsi que nous réalisons des bénéfices. Nous vendons à un prix plus élevé que celui que nous avons acheté.
  • STOP_LOSS_THRESHOLD : Idéalement, nous voudrions que notre robot ne vende que lorsqu’il fait un profit. Cependant, peut-être que le marché vient de baisser de manière significative et que nous voulons sortir avant qu’il ne soit trop tard et ensuite acheter à un prix plus bas. Par conséquent, ce seuil est utilisé pour vendre à perte, mais dans le but d’empêcher une perte plus importante de se produire.

Voici une illustration :

Image By Author

Ici, nous avons acheté au point marqué par « BUY ». Ensuite, nous avons atteint notre seuil supérieur avant le seuil inférieur, ce qui signifie que nous avons vendu notre actif avec un bénéfice. C’est ainsi que les robots de trading gagnent de l’argent.

Maintenant, nous avons déjà une idée de base du fonctionnement du robot, alors entrons dans du (pseudo)code.

Fonctions d’aide de l’API

La première chose dont notre robot a besoin, ce sont des fonctions d’aide pour obtenir des données de l’API de l’échange. Nous avons besoin :

Ce qui précède devrait être auto-explicatif, mais vous devez vous assurer que vous êtes conscient des devises que l’API POSTdemande lors d’une opération d’achat ou de vente.

Souvent, lorsque vous échangez des USD contre de l’or, par exemple, vous pouvez spécifier soit la quantité d’or à acheter, soit la quantité d’USD à vendre. Obtenir les bonnes devises est très important.

Cycle de boucle du bot

Maintenant que nous avons nos fonctions d’aide, commençons à définir le flux de travail du bot. La première chose dont nous avons besoin est une boucle infinie avec un certain temps de sommeil. Disons que nous voulons que le bot essaie de faire une opération toutes les 30 secondes. Voici à quoi cela pourrait ressembler :

Puis, définissons les variables et constantes dont nous avons parlé, ainsi que le flux de décision. Les fonctions d’aide de l’API mises à part, notre code finirait par ressembler à ceci:

Note : Les valeurs des seuils ici sont juste des valeurs arbitraires. Vous devriez choisir les vôtres en fonction de votre propre stratégie.

Si ce qui précède est jumelé avec les fonctions d’aide et la fonction de boucle, qui pourrait également être main , nous devrions maintenant avoir nous-mêmes les piliers de base d’un bot qui fonctionne.

À chaque itération, notre bot vérifiera son état actuel (ACHETER ou VENDRE) et tentera de faire une transaction en fonction des seuils codés en dur. Il mettra ensuite à jour l’état BUY/SELL et le dernier prix pour une opération.

Puis il recommence.

Etape 5 : peaufiner le bot

Photo de Matthew Dockery

L’architecture de base de notre bot est prête, mais il y a probablement quelques choses que nous pouvons encore envisager d’ajouter.

Logs

Lorsque j’ai construit pour la première fois une variante de ce bot, une chose qui était essentielle pour moi était d’avoir une journalisation constante des actions du bot à la fois sur le terminal ainsi que dans un fichier journal séparé.

À chaque étape, je créais des journaux comme:

 USD Balance = 22.15$
Bought 0.002 BTC for 22.15 USD
Last Operation Price updated to 11,171.40 (BTC/USD)
Could not perform SELL operation - Insufficient balance

Les journaux qui allaient dans le fichier recevaient également un horodatage ajouté, de sorte que lorsque j’accédais au serveur après une journée entière et que je trouvais une erreur, par exemple, je pouvais remonter exactement à l’endroit où cela s’était produit, ainsi que trouver tout ce que le bot faisait en cours de route.

Cela devrait être une question de mise en place d’une fonction createLog qui est appelée à chaque étape. Quelque chose comme ceci:

Identifier les tendances

Le but principal de notre bot devrait être d’acheter à un prix bas et de vendre à un profit. Cependant, nous avons deux seuils qui contredisent un peu cette idée :UPWARD_TREND_THRESHOLD et STOP_LOSS_THRESHOLD .

Ces seuils sont censés nous indiquer quand nous devons vendre à perte ou acheter à la hausse. L’idée est que nous essayons d’identifier les tendances qui sortent de la stratégie générale, mais qui peuvent être nuisibles ou bénéfiques pour nous, de sorte que nous devrions agir.

Cependant, la façon dont je l’ai structuré ci-dessus est assez limitée. Un instantané statique d’un prix est loin d’être une indication d’une tendance.

Heureusement, sans trop de tracas, vous pouvez rendre cela un peu plus fiable.

Tout ce que vous devez faire est également de garder une trace de plus de prix que juste lastOpPrice . Vous pourriez, par exemple, garder la trace du prix il y a 10 ou 20 itérations, et le comparer avec le prix actuel au lieu de lastOpPrice . Cela serait probablement plus efficace pour identifier une tendance, car il vérifie les changements rapides de prix plutôt qu’un changement qui s’est produit sur une longue période de temps.

Base de données?

Lorsqu’il fonctionne, ce bot simple n’a pas réellement besoin d’une base de données, puisqu’il manipule très peu de données et peut garder toutes les informations en mémoire.

Cependant, que se passe-t-il lorsque le bot échoue, par exemple ? Comment pourrait-il déterminer le lastOpPrice sans que vous le vérifiiez manuellement ?

Pour éviter le travail manuel de votre côté, vous pourriez vouloir conserver une sorte de base de données légère pour garder une trace de quelques choses, comme les lastOpPrice .

De cette façon, lorsque le bot démarre, plutôt que d’utiliser les valeurs par défaut, il va effectivement vérifier ses valeurs stockées et continuer à partir de là.

Selon la simplicité que vous voulez faire, vous pouvez même envisager une « base de données » de fichiers .txt ou json, puisque vous pourriez juste stocker quelques valeurs de toute façon.

Dashboard

Photo de Luke Chesser

Si vous voulez faciliter la visualisation des opérations de votre bot, ainsi que le gérer sans avoir à aller bricoler manuellement le code, vous pouvez envisager de connecter votre bot à un tableau de bord.

Cela nécessiterait que votre bot soit connecté à un serveur web/API propre qui vous permette de contrôler ses fonctionnalités.

De cette façon, vous pourriez modifier les seuils plus facilement, par exemple.

Il existe de nombreux modèles de tableaux de bord gratuits, vous n’avez donc même pas besoin de créer le vôtre. Consultez Start Bootstrap et Creative Tim pour quelques exemples.

Tester des stratégies sur des données passées

De nombreuses bourses vous offriront un accès à des données de prix passées, de même que vous pouvez généralement obtenir facilement ces données ailleurs si vous en avez besoin.

Ceci est très utile si vous voulez tester votre stratégie avant de la mettre en action. Vous pouvez exécuter une simulation de votre bot avec des données passées et de la « fausse monnaie » pour voir dans quelle mesure vos seuils définis auraient fonctionné et les ajuster pour la vraie affaire.

Points supplémentaires sur les seuils et les ordres

Il y a quelques choses auxquelles vous devez faire attention lorsque vous passez des ordres.

Premièrement, vous devez comprendre qu’il existe deux types d’ordres : les ordres à cours limité et les ordres au marché. Vous devriez vraiment lire un peu à ce sujet si vous n’êtes pas familier avec les concepts, mais je vais vous donner un aperçu de base ici.

Les ordres au marché sont des ordres qui s’exécutent au prix actuel du marché, s’exécutant effectivement immédiatement dans la plupart des cas.

Les ordres à cours limité, d’autre part, se produisent lorsque vous placez un ordre pour un prix inférieur au prix du marché (dans le cas d’un ordre d’ACHAT) ou supérieur au prix du marché (dans le cas d’un ordre de VENTE). Leur exécution n’est pas garantie, car le prix peut ne pas atteindre le seuil que vous avez fixé.

L’avantage des ordres à cours limité est que vous pouvez anticiper les mouvements du marché et placer un ordre concernant l’endroit où vous attendez que le marché aille avant que ce mouvement ne se produise.

En outre, les ordres à cours limité sont généralement soumis à des frais moins élevés que les ordres au marché. Cela est dû au fait que les ordres au marché sont soumis à ce qui est communément appelé des « frais de preneur » alors que les ordres à cours limité sont soumis à des « frais de faiseur ».

La raison de ces noms et de leurs frais respectifs est que les ordres au marché ne font qu’accepter (« prendre ») le prix actuel du marché, alors que les ordres à cours limité en dehors du prix du marché ajoutent de la liquidité et donc « font un marché », pour lequel ils sont « récompensés » par des frais moins élevés.

Notez que le bot de cet article est mieux adapté aux ordres de marché.

Enfin, sur le sujet des frais, lorsque vous définissez votre PROFIT_THRESHOLD , n’oubliez pas de prendre en compte les frais.

Pour réaliser un profit, vous devez effectuer une opération d’ACHAT puis de VENTE, ce qui vous laisse soumis à 2 frais.

A ce titre, vous devez vous assurer que vous ne vendez pour réaliser un profit qu’une fois que vous êtes en mesure de couvrir au moins vos frais, sinon vous réaliserez en réalité une perte.

Réfléchissez-y, en supposant que les frais soient fixes, si vous achetez un actif pour 100,00$, en encourant des frais de 0,50$, puis que vous le vendez pour 100,75$, toujours avec des frais de 0,50$, vous auriez fait un bénéfice brut de 0,75%, mais, en réalité, vous auriez une perte nette de 0,25%.

Maintenant, imaginez que votre bot vendait toujours à perte. Vous perdriez beaucoup d’argent assez rapidement…

Remarques finales

C’est tout pour notre bot. J’espère que ce tutoriel a été utile.

L’idée était de se concentrer sur tous les concepts que vous devez connaître pour construire un bot de trading même si vous n’avez jamais tradé auparavant, et non de vous apprendre à programmer.

L’hypothèse est que tous les lecteurs sont capables de faire des requêtes HTTP dans le langage de leur choix, il serait donc préférable de se concentrer sur d’autres aspects.

C’est le premier tutoriel que j’écris comme ça (basé sur un pseudocode), alors s’il vous plaît, faites-moi savoir ce que vous avez pensé du concept.

Merci de lire ! Et si vous pensez que cet article a été utile, n’hésitez pas à me soutenir avec des claps 👏👏.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.