Créez un Bot de trading de Crypto-Monnaie avec R
** Notez que l’API utilisée dans ce tutoriel n’est plus en service. Cet article doit être lu à titre illustratif dans cet esprit.
L’esprit du trader est le maillon faible de toute stratégie ou plan de trading. Une exécution commerciale efficace nécessite des intrants humains qui vont dans le sens opposé à nos instincts. Nous devrions acheter quand notre cerveau de reptile veut vendre. Nous devrions vendre quand nos tripes veulent que nous achetions plus.
Il est encore plus difficile d’échanger des crypto-monnaies avec une constitution critique. Les marchés jeunes et émergents sont inondés de « groupes de pompes » qui favorisent une FOMO intense (peur de manquer) qui font monter les prix à la hausse avant de les ramener sur terre. De nombreux investisseurs novices négocient également sur ces marchés, des investisseurs qui n’ont peut-être jamais conclu de transaction sur le NYSE. Sur chaque transaction, il y a un fabricant et un preneur, et les investisseurs en crypto astucieux trouvent facile de profiter des novices qui inondent l’espace.
Afin de détacher mes émotions du trading crypto et de profiter des marchés ouverts 24h / 24 et 7j / 7, j’ai décidé de construire un bot de trading simple qui suivrait une stratégie simple et exécuterait des transactions pendant que je dormais.
De nombreux « bot traders » comme on les appelle utilisent le langage de programmation Python pour exécuter ces transactions. Si vous deviez Google, « crypto trading bot », vous trouveriez des liens vers du code Python dans divers référentiels Github.
Je suis un data scientist, et R est mon outil principal. J’ai cherché un tutoriel décent sur l’utilisation du langage R pour créer un bot de trading mais je n’ai rien trouvé. J’étais décidé à construire mon propre package pour s’interfacer avec l’API GDAX lorsque j’ai trouvé le package rgdax, qui est un wrapper R pour l’API GDAX. Ce qui suit est un guide pour assembler un bot de trading que vous pouvez utiliser pour créer vos propres stratégies.
En un mot, nous négocierons la paire Ethereum—USD sur la bourse GDAX via leur API via le wrapper rgdax. J’aime trader cette paire car Ethereum (ETH) est généralement en position haussière, ce qui permet à cette stratégie de briller.
Remarque: il s’agit d’une stratégie super simpliste qui ne rapportera que quelques dollars sur un marché haussier. À toutes fins utiles, utilisez-le comme base pour construire votre propre strat.
Nous achèterons lorsqu’une combinaison d’indicateurs de l’Indice de force relative (RSI) indiquera un marché temporairement survendu, avec l’hypothèse que les taureaux feront à nouveau monter les prix et que nous pourrons engranger des bénéfices.
Une fois que nous avons acheté, le bot entrera trois ordres de vente à limite: un à 1% de profit, un autre à 4% de profit et le dernier à 7% de profit. Cela nous permet de libérer rapidement des fonds pour entrer dans une autre transaction avec les deux premiers ordres, et l’ordre de 7% renforce notre rentabilité globale.
- Logiciel
- Partie 1: Appeler des bibliothèques et construire des fonctions
- Partie 2: Stocker des variables
- Partie 3: La boucle de trading s’exécute
- Partie 4: Utilisation du Planificateur de tâches Windows pour automatiser le Script
- Script de planification avec l’addin Rstudio
- Modifiez la tâche planifiée avec le planificateur de tâches
- Gardez un œil sur votre tâche avec le fichier journal
- Faites-en votre propre
Logiciel
Nous utiliserons Rstudio et le planificateur de tâches Windows pour exécuter notre code R régulièrement (toutes les 10 minutes). Vous aurez besoin d’un compte GDAX pour envoyer des commandes et d’un compte Gmail pour recevoir des notifications commerciales.
Partie 1: Appeler des bibliothèques et construire des fonctions
Nous commencerons par appeler plusieurs bibliothèques:
Le package rgdax fournit l’interface à l’api GDAX, mailR est utilisé pour nous envoyer des mises à jour par e-mail avec un compte Gmail, stringi nous aide à analyser les numéros à partir de JSON et TTR nous permet d’effectuer des calculs d’indicateurs techniques.
Fonction: curr_bal_usd &curr_bal_eth
Vous utiliserez votre clé API, votre secret et votre phrase secrète générés à partir de GDAX dans la section API. Ces fonctions interrogent votre compte GDAX pour le solde le plus récent que nous utiliserons à plusieurs reprises dans notre trading :
Fonction: RSI
Nous utiliserons le RSI ou l’Indice de force relative comme indicateurs principaux de cette stratégie. Curr_rsi14_api extrait la valeur du RSI de 14 périodes le plus récent, en utilisant des bougies de 15 minutes. RSI14_api_less_one et ainsi de suite tirez le RSI pour les périodes précédentes:
Function: bid & ask
Next, we will need the current bid and ask prices for our strategy:
Function: usd_hold, eth_hold et cancel_orders
Pour que nous puissions placer des ordres à cours limité de manière itérative, nous devons être en mesure de récupérer l’état actuel de nos ordres déjà passés et d’annuler des ordres qui se sont déplacés trop loin dans le carnet de commandes pour être remplis. Nous utiliserons la fonction « holds » du paquet rgdax pour le premier, et « cancel_order » pour le second :
Fonction: buy_exe
C’est la fonction big-daddy qui exécute réellement nos ordres à cours limité. Cette fonction fonctionne en plusieurs étapes.
1. La fonction Order_size calcule combien d’eth nous pouvons acheter, car nous voulons acheter autant que possible à chaque fois, moins 0,005 eth pour tenir compte des erreurs d’arrondi
2. Notre fonction WHILE place des ordres à cours limité alors que nous avons encore zéro ETH.
3. Une commande est ajoutée au prix bid(), le système dort 17 secondes pour permettre à la commande d’être remplie, puis vérifie si la commande a été remplie. Si ce n’était pas le cas, le processus se répète.
Partie 2: Stocker des variables
Ensuite, nous devons stocker certaines de nos variables indicatrices RSI en tant qu’objets afin que la boucle de trading s’exécute plus rapidement et que nous ne dépassions pas la limite de taux de l’API:
Partie 3: La boucle de trading s’exécute
Jusqu’à présent, nous venons de préparer nos fonctions et variables afin d’exécuter la boucle de trading. Ce qui suit est une promenade verbale de la boucle de trading réelle:
Si le solde actuel de notre compte en USD est supérieur à 20 $, nous commencerons la boucle. Ensuite, si le RSI actuel est supérieur ou égal à 30 ET que le RSI de la période précédente était inférieur ou égal à 30 ET que le RSI des périodes 3 précédentes était inférieur à 30 au moins une fois, nous achetons autant d’ETH que possible avec le solde actuel en USD.
Ensuite, nous enregistrons ce prix d’achat dans un fichier CSV.
Ensuite, nous nous envoyons un email pour nous alerter de l’action d’achat.
La boucle imprime ensuite « acheter » afin que nous puissions suivre cela dans notre fichier journal.
Le système dort alors pendant 3 secondes.
Maintenant, nous entrons 3 ordres de vente à limite à plusieurs niveaux pour prendre des bénéfices.
Notre premier ordre de vente à limite prend un bénéfice à un gain de 1%, le suivant prend un bénéfice à un gain de 4% et le dernier prend un bénéfice à un gain de 7%:
C’est ça, c’est tout le script.
Partie 4: Utilisation du Planificateur de tâches Windows pour automatiser le Script
Le but de ce bot est de supprimer l’erreur humaine du trade et de nous permettre d’entrer des trades sans avoir à être présent à un écran. Nous utiliserons le planificateur de tâches Windows pour y parvenir.
Script de planification avec l’addin Rstudio
Utilisez l’add-in Rstudio pratique pour planifier facilement le script :
Modifiez la tâche planifiée avec le planificateur de tâches
Accédez à la tâche créée par l’ajout Rstudio et ajustez le déclencheur pour qu’il se déclenche à l’intervalle souhaité. Dans mon cas, je choisis toutes les 10 minutes indéfiniment.
Gardez un œil sur votre tâche avec le fichier journal
Chaque fois que votre script s’exécute, il fera une entrée dans un fichier journal texte, ce qui vous permet de résoudre les erreurs dans votre script:
Vous pouvez voir comment les fonctions d’impression « START LOG ENTRY » et « END LOG ENTRY » sont utiles pour séparer nos entrées.
Faites-en votre propre
Vous pouvez modifier ce script pour le rendre aussi simple ou aussi complexe que vous le souhaitez. Je travaille à l’amélioration de ce script avec l’ajout de réseaux de neurones à partir du module Keras de Tensorflow pour Rstudio. Ces réseaux de neurones ajoutent un élément exponentiellement plus complexe au script, mais sont incroyablement puissants pour trouver des modèles cachés dans les données.
De plus, le package TTR nous fournit un grand nombre de fonctions financières et d’indicateurs techniques qui peuvent être utilisés pour améliorer votre modèle.
Tout cela étant dit, ne jouez pas avec plus d’argent que vous pouvez vous permettre de perdre. Les marchés ne sont pas un jeu et vous pouvez et perdrez votre chemise.