Crypto-arbitrage met NetworkX en Python PlatoBlockchain Data Intelligence. Verticaal zoeken. Ai.

Crypto-arbitrage met NetworkX en Python

Analyseren van cryptogegevens van de Coingecko API om een ​​crypto-arbitragescanner in Python te bouwen

McKlayne Marshall

Co-auteur met Isaak Rhea

Foto door Alina Grubnyak on Unsplash

Markten voor valuta over de hele wereld worden 24 uur per dag verhandeld met volumes die aanzienlijk hoger zijn dan die van obligaties, aandelen of futures markten. Deelnemers aan de valutamarkten dekken risico's af of speculeren op toekomstige veranderingen in valutawaarden.

Een andere bron van winst komt voort uit het profiteren van kortetermijnonevenwichtigheden in de valutawaarderingen. Met behulp van razendsnelle algoritmen identificeren hoogfrequente handelaren arbitragemogelijkheden en voeren snel een reeks uitwisselingen uit die resulteren in een kleine winst. Zie dit dit artikel van het Corporate Finance Institute voor een meer diepgaande uitleg en voorbeelden.

Instituut voor bedrijfsfinanciering

Vanwege de hoge concurrentie en het handelsvolume op de valutamarkten zijn deze kansen van korte duur en zijn de winsten minuscuul. Hoewel winsten door valutaarbitrage in de loop van de tijd kunnen toenemen bij een groot aantal transacties, bestaat er een soortgelijke mogelijkheid op markten voor cryptocurrency, die mogelijk zelfs nog winstgevender zijn.

Omdat er veel crypto’s zijn om in te handelen, zijn er veel mogelijke combinaties om te controleren op arbitragemogelijkheden. De Graph (Network)-datastructuur is ideaal voor het bijhouden van de verschillende wisselkoersen tussen munten en het snel identificeren van gevallen van onevenwichtigheid waar we van kunnen profiteren. Voor meer informatie over Graphs/Networks en Python-pakketten om ermee te werken, bekijk dit boek in de Pragmatische programmeurs series.

Om een ​​grafiek voor cryptocurrencies te bouwen, zullen we het NetworkX-pakket gebruiken. Dit is een krachtig hulpmiddel dat het gemakkelijk maakt om de munten waarin we geïnteresseerd zijn te analyseren en handelsmogelijkheden te vinden. Eerst zullen we crypto-wisselkoersen verkrijgen van de CoinGecko API. Vervolgens initialiseren we de grafiek en definiëren we de relaties (wisselkoersen) tussen elk van de munten waarin we geïnteresseerd zijn. Ten slotte doorlopen we alle paden van de ene munt naar de andere en terug om arbitragemogelijkheden te identificeren.

Als je ervaring hebt met JSON API's, dan is het CoinGecko API is relatief eenvoudig te gebruiken. Met dit codefragment heb ik de huidige wisselkoersen voor vijf verschillende munten (Bitcoin, Bitcoin Cash, Ethereum, Litecoin en EOS) opgehaald.

De URL voor de API-aanroep ziet er ongeveer zo uit, afhankelijk van de munten waarvoor u gegevens wilt ophalen:

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

Door de Request- en JSON-pakketten voor Python te gebruiken, kunnen we deze gegevens laden als een woordenboek met sleutels voor elke crypto die we in onze lijst hebben opgenomen. De waarde die aan elk van deze sleutels is gekoppeld, is een ander woordenboek met vermeldingen voor de wisselkoersen voor dat valutapaar. Voor Bitcoin Cash krijgen we bijvoorbeeld het volgende resultaat:

Hieruit blijkt dat met 0.25 Bitcoin Cash 0.16 Ethereum of 1 Bitcoin gekocht kan worden. Met deze resultaten voor elk van de crypto's zijn we klaar om de grafiek te definiëren.

Elk van de munten vertegenwoordigt een ‘hoekpunt’ in de grafiek en de wisselkoers tussen twee munten is een ‘rand’. Na het initialiseren van een leeg Graph-object definiëren we een lijst met tupels voor elk paar munten en hun wisselkoers in beide richtingen.

De lijst voor de randen ziet er ongeveer zo uit:

Nu de randen aan de grafiek zijn toegevoegd, zijn we klaar om te zoeken naar arbitragemogelijkheden. Met behulp van de combinatiefunctie van het itertools-pakket definiëren we alle mogelijke muntparen. Vervolgens gebruiken we de functie all_simple_paths van NetworkX om alle mogelijke paden van de eerste munt naar de tweede te definiëren.

Als we bijvoorbeeld naar Litecoin en Bitcoin Cash kijken, zijn er veel mogelijke paden gezien de munten die we overwegen. We kunnen eenvoudig Bitcoin Cash kopen met Litecoin of we kunnen Bitcoin kopen met Litecoin en vervolgens Bitcoin gebruiken om Bitcoin Cash te kopen.

We doorlopen elk pad en voeren bij elke stap de volgende berekeningen uit. Ten eerste gaan we ervan uit dat we beginnen met een van de initiële munten. We vermenigvuldigen die met de wisselkoers van de ene munt naar de andere totdat we het einde van het pad bereiken.

Als we bijvoorbeeld beginnen met één Bitcoin Cash, kunnen we 0.24 Ethereum kopen, dus vermenigvuldigen we 1 x 0.24197529 = 0.24197529. De wisselkoers van Ethereum naar Bitcoin is 0.06, dus we vermenigvuldigen 0.24197529 x 0.06484324 = 0.0156904618035396. Deze waarde ligt zeer dicht bij de wisselkoers tussen Bitcoin Cash en Bitcoin, maar is niet precies hetzelfde.

Op dit punt controleren we het omgekeerde van het pad, d.w.z. Bitcoin naar Ethereum naar Bitcoin Cash door 1 x 15.414849 x 4.132739 = 63.705547641411 te vermenigvuldigen. We vermenigvuldigen deze twee resultaten samen voor onze uiteindelijke evaluatie van het pad (0.0156904618035396 x 63.705547641411 = 0.9995694619411315). Bij mijn weten bestaat er geen gedefinieerde term voor deze waarde. We kunnen dit de arbitragefactor noemen.

Als de wisselkoersen synchroon zouden zijn geweest, zou de arbitragefactor precies één zijn geweest. Een waarde kleiner dan één suggereert dat we de reeks uitwisselingen hebben doorlopen en met minder zijn geëindigd dan waarmee we zijn begonnen. We willen dus dat deze waarde groter is dan één, omdat het uitvoeren van de uitwisselingen winst zou opleveren. Als we in ons vorige voorbeeld hadden vastgesteld dat de arbitragefactor 1.005 was, zou dit hebben aangegeven dat we door het pad van uitwisselingen van de ene crypto naar de andere en terug te volgen, 0.005 Bitcoin Cash hadden kunnen winnen (ter waarde van ongeveer $3).

Arbitragemogelijkheden komen en gaan voor verschillende crypto's gedurende de dag en het is mogelijk om alle combinaties voor verschillende munten te controleren zonder een arbitragefactor te vinden die aanzienlijk hoger is dan één. Ik heb echter arbitragefactoren boven de 1.01 gezien, wat aangeeft dat er binnen enkele ogenblikken een rendement van 1% kan worden verdiend via eenvoudige cryptocurrency-uitwisselingen.

Door de drie hierboven uitgelegde functies samen te brengen, kunnen we een crypto-arbitragescanner creëren.

Valutaarbitrage is een gevestigde handelsmethode met een laag risico, maar de markt voor traditionele valuta is zeer efficiënt en concurrerend. Er bestaan ​​grotere kansen in cryptocurrencies en een paar eenvoudige Python-tools kunnen de strategie helpen vergemakkelijken. NetworkX kan worden gebruikt om een ​​grafiek te bouwen en snel naar arbitragemogelijkheden te zoeken.

Er zijn echter nog steeds uitdagingen die moeten worden overwonnen. Ten eerste kunnen de kosten voor het verhandelen van cryptocurrencies erg hoog zijn. Dit betekent dat eventuele onevenwichtigheden tussen crypto’s aanzienlijk moeten zijn om winstgevend te zijn. Tegelijkertijd zal de strategie het meest effectief zijn als deze geautomatiseerd is en periodiek of 2 uur per dag wordt uitgevoerd. Kijk uit naar toekomstige artikelen over het implementeren van cryptohandelstrategieën met AWS ECXNUMX-instanties of Lambda-functies.

Meer inhoud op gewoonenglish.io

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

Tijdstempel:

Meer van Medium