Arbitrage crypto avec NetworkX et Python PlatoBlockchain Data Intelligence. Recherche verticale. Aï.

Arbitrage crypto avec NetworkX et Python

Analyser les données cryptographiques de l'API Coingecko pour créer un scanner d'arbitrage cryptographique en python

McKlayne Marshall

Co-écrit avec Isaac Rhéa

Photo par Alina Grubniak on Unsplash

Les marchés des devises du monde entier se négocient 24 heures sur XNUMX à des volumes nettement supérieurs à ceux des obligations, des actions ou des contrats à terme. marchés. Les participants aux marchés des changes se couvrent du risque ou spéculent sur les changements futurs des valeurs des devises.

Une autre source de profits consiste à tirer parti des déséquilibres à court terme des valorisations des devises. À l'aide d'algorithmes ultra-rapides, les traders haute fréquence identifient les opportunités d'arbitrage et exécutent rapidement une série d'échanges qui génèrent un petit profit. Regarde ça article du Corporate Finance Institute pour une explication plus approfondie et des exemples.

Institut de finance d'entreprise

En raison de la forte concurrence et du volume des échanges sur les marchés des changes, ces opportunités sont de courte durée et les bénéfices sont minuscules. Bien que les gains grâce à l’arbitrage de devises puissent s’accumuler au fil du temps avec un nombre élevé de transactions, une opportunité similaire existe sur les marchés des cryptomonnaies qui peuvent être encore plus rentables.

Comme il existe de nombreuses cryptomonnaies à échanger, il existe de nombreuses combinaisons possibles pour rechercher des opportunités d’arbitrage. La structure de données Graph (Network) est idéale pour suivre les différents taux de change entre les pièces et identifier rapidement les cas de déséquilibre dont nous pouvons profiter. Pour plus d'informations sur les graphiques/réseaux et les packages Python permettant de les utiliser, consultez ceci livre dans l' Programmeurs pragmatiques série.

Pour créer un graphique pour les crypto-monnaies, nous utiliserons le package NetworkX. Il s'agit d'un outil puissant qui permet d'analyser facilement les pièces qui nous intéressent et de trouver des opportunités de trading. Tout d’abord, nous obtiendrons les taux de change cryptographiques de l’API CoinGecko. Ensuite, nous initialiserons le graphique et définirons les relations (taux de change) entre chacune des pièces qui nous intéressent. Enfin, nous parcourrons tous les chemins d'une pièce à l'autre et vice-versa pour identifier les opportunités d'arbitrage.

Si vous avez de l'expérience avec les API JSON, le CoinGecko L'API est relativement simple à utiliser. Avec cet extrait de code, j'ai extrait les taux de change actuels de cinq pièces différentes (Bitcoin, Bitcoin Cash, Ethereum, Litecoin et EOS).

L'URL de l'appel API ressemblera à ceci, en fonction des pièces pour lesquelles vous souhaitez extraire des données :

https://api.coingecko.com/api/v3/simple/price?ids=bitcoin-cash,ethereum,bitcoin,litecoin,eos&vs_currencies=bch,eth,btc,ltc,eos

En utilisant les packages Request et JSON pour Python, nous pouvons charger ces données sous forme de dictionnaire avec des clés pour chaque crypto que nous avons inclus dans notre liste. La valeur associée à chacune de ces clés est un autre dictionnaire contenant des entrées pour les taux de change de cette paire de devises. Par exemple, pour Bitcoin Cash on obtient le résultat suivant :

Cela montre que 0.25 Ethereum ou 0.16 Bitcoin peuvent être achetés avec 1 Bitcoin Cash. Avec ces résultats pour chacune des cryptos nous sommes prêts à définir le Graphe.

Chacune des pièces représente un « sommet » dans le graphique et le taux de change entre deux pièces est un « bord ». Après avoir initialisé un objet Graph vide, nous définissons une liste de tuples pour chaque paire de pièces et leur taux de change dans les deux sens.

La liste des bords ressemblera à ceci :

Avec les arêtes ajoutées au graphique, nous sommes prêts à rechercher des opportunités d'arbitrage. En utilisant la fonction combinaisons du package itertools, nous définissons toutes les paires de pièces possibles. Ensuite, nous utilisons la fonction all_simple_paths de NetworkX pour définir tous les chemins possibles de la première pièce à la seconde.

Par exemple, si nous examinons Litecoin et Bitcoin Cash, il existe de nombreux chemins possibles compte tenu des pièces que nous envisageons. Nous pouvons simplement acheter du Bitcoin Cash avec Litecoin ou acheter du Bitcoin avec Litecoin, puis utiliser Bitcoin pour acheter du Bitcoin Cash.

Nous parcourons chaque chemin et effectuons les calculs suivants à chaque étape. Tout d’abord, nous supposons que nous commençons avec l’une des pièces initiales. Nous multiplions celui-ci par le taux de change d’une pièce à l’autre jusqu’à arriver au bout du chemin.

Par exemple, si nous commençons avec un Bitcoin Cash, nous pouvons acheter 0.24 Ethereum, nous multiplions donc 1 x 0.24197529 = 0.24197529. Le taux de change d’Ethereum en Bitcoin est de 0.06, nous multiplions donc 0.24197529 x 0.06484324 = 0.0156904618035396. Cette valeur est très proche du taux de change entre Bitcoin Cash et Bitcoin mais pas exactement la même.

À ce stade, nous vérifions l’inverse du chemin, c’est-à-dire Bitcoin vers Ethereum puis Bitcoin Cash en multipliant 1 x 15.414849 x 4.132739 = 63.705547641411. Nous multiplions ces deux résultats ensemble pour notre évaluation finale du chemin (0.0156904618035396 x 63.705547641411 = 0.9995694619411315). A ma connaissance, il n'existe pas de terme défini pour cette valeur. Nous pouvons l'appeler le facteur d'arbitrage.

Si les taux de change étaient synchronisés, le facteur d’arbitrage aurait été exactement un. Une valeur inférieure à un suggère que nous avons effectué la série d'échanges et que nous avons terminé avec moins que ce avec quoi nous avions commencé. Nous recherchons donc que cette valeur soit supérieure à un car effectuer les échanges entraînerait un profit. Si nous avions trouvé que le facteur d'arbitrage était de 1.005 dans notre exemple précédent, cela aurait indiqué qu'en suivant ce chemin d'échange d'une crypto à une autre et inversement, nous aurions pu gagner 0.005 Bitcoin Cash (d'une valeur d'environ 3 $).

Les opportunités d'arbitrage vont et viennent pour différentes cryptos tout au long de la journée et il est possible de vérifier toutes les combinaisons pour plusieurs pièces sans trouver un facteur d'arbitrage nettement supérieur à un. Cependant, j'ai vu des facteurs d'arbitrage supérieurs à 1.01, indiquant qu'un rendement de 1 % pourrait être obtenu en quelques instants grâce à de simples échanges de crypto-monnaie.

En rassemblant les trois fonctions expliquées ci-dessus, nous sommes en mesure de créer un scanner de crypto-arbitrage.

L'arbitrage de devises est une méthode de trading bien établie et à faible risque, mais le marché des devises traditionnelles est très efficace et compétitif. Il existe de plus grandes opportunités dans les crypto-monnaies et quelques outils Python simples peuvent aider à faciliter la stratégie. NetworkX peut être utilisé pour créer un graphique et rechercher rapidement des opportunités d'arbitrage.

Cependant, il reste encore des défis à relever. Premièrement, les frais liés au trading de crypto-monnaies peuvent être très élevés. Cela signifie que tout déséquilibre entre cryptos doit être important pour être rentable. Dans le même temps, la stratégie sera plus efficace si elle est automatisée et configurée pour être exécutée périodiquement ou 2 heures sur XNUMX. Surveillez les prochains articles sur la mise en œuvre de stratégies de trading crypto avec les instances AWS ECXNUMX ou les fonctions Lambda.

Plus de contenu sur plainenglish.io

Source : https://python.plainenglish.io/crypto-arbitrage-with-networkx-and-python-638166e5a947?source=rss——-8—————–cryptocurrency

Horodatage:

Plus de Moyenne