Crypto Arbitrage med NetworkX och Python PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Crypto Arbitrage med NetworkX och Python

Analysera kryptodata från Coingecko API för att bygga en krypto arbitrage-skanner i python

McKlayne Marshall

Medförfattare till Isaac Rhea

Foto: Alina Grubnyak on Unsplash

Marknader för valutor runt om i världen handlar 24 timmar om dygnet med volymer som är betydligt högre än obligationer, aktier eller terminer marknader. Deltagare på valutamarknader säkrar risk eller spekulerar i framtida förändringar i valutavärden.

En annan vinstkälla kommer från att utnyttja kortsiktiga obalanser i valutavärderingar. Med hjälp av blixtsnabba algoritmer identifierar högfrekventa handlare arbitrage-möjligheter och utför snabbt en serie utbyten som resulterar i en liten vinst. Se detta Artikeln från Corporate Finance Institute för en mer ingående förklaring och exempel.

Corporate Finance Institute

På grund av den höga konkurrensen och handelsvolymen på valutamarknaderna är dessa möjligheter kortlivade och vinsten liten. Även om vinster genom valutaarbitrage kan samlas över tiden med ett stort antal affärer, finns en liknande möjlighet på kryptovalutamarknader som kan vara ännu mer lönsamma.

Eftersom det finns många kryptor att handla finns det många möjliga kombinationer för att söka efter arbitragemöjligheter. Datastrukturen för graf (nätverk) är idealisk för att hålla reda på de olika växelkurserna mellan mynt och snabbt identifiera fall av obalans som vi kan dra nytta av. För mer information om grafer / nätverk och Python-paket för att arbeta med dem, kolla in detta boken i Pragmatiska programmerare serien.

För att bygga en graf för kryptovalutor använder vi NetworkX-paketet. Detta är ett kraftfullt verktyg som gör det enkelt att analysera de mynt vi är intresserade av och hitta handelsmöjligheter. Först kommer vi att få kryptoväxlingskurser från CoinGecko API. Därefter initialiserar vi diagrammet och definierar förhållandena (växelkurser) mellan vart och ett av de mynt vi är intresserade av. Slutligen kommer vi att slinga igenom alla banor från ett mynt till ett annat och tillbaka för att identifiera arbitragemöjligheter.

Om du har erfarenhet av JSON API: er CoinGecko API är relativt enkelt att använda. Med detta kodavsnitt drog jag nuvarande växelkurser för fem olika mynt (Bitcoin, Bitcoin Cash, Ethereum, Litecoin och EOS).

URL: en för API-samtalet ser ungefär så ut, beroende på de mynt du vill hämta data för:

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

Genom att använda paketet Begär och JSON för Python kan vi ladda dessa data som en ordlista med nycklar för varje krypto som vi inkluderade i vår lista. Värdet associerat med var och en av dessa nycklar är en annan ordlista med poster för valutakurserna för det valutaparet. Till exempel för Bitcoin Cash får vi följande resultat:

Detta visar att 0.25 Ethereum eller 0.16 Bitcoin kan köpas med 1 Bitcoin Cash. Med dessa resultat för var och en av kryptorna är vi redo att definiera grafen.

Varje mynt representerar ett "toppunkt" i diagrammet och växelkursen mellan två mynt är en "kant". Efter att ha initierat ett tomt grafobjekt definierar vi en lista med tuplar för varje myntpar och deras växelkurs i båda riktningar.

Listan för kanterna ser ut så här:

Med kanterna till grafen är vi redo att söka efter arbitrage-möjligheter. Med hjälp av kombinationsfunktionen från itertools-paketet definierar vi alla möjliga myntpar. Sedan använder vi all_simple_paths-funktionen från NetworkX för att definiera alla möjliga banor från det första myntet till det andra.

Om vi ​​till exempel tittar på Litecoin och Bitcoin Cash finns det många möjliga vägar med tanke på de mynt vi överväger. Vi kan helt enkelt köpa Bitcoin Cash med Litecoin eller så kan vi köpa Bitcoin med Litecoin och sedan använda Bitcoin för att köpa Bitcoin Cash.

Vi slingrar igenom varje väg och utför följande beräkningar i varje steg. Först antar vi att vi börjar med ett av de första mynten. Vi multiplicerar den med växelkursen från ett mynt till ett annat tills vi kommer till slutet av vägen.

Om vi ​​till exempel börjar med en Bitcoin Cash kan vi köpa 0.24 Ethereum så vi multiplicerar 1 x 0.24197529 = 0.24197529. Växelkursen från Ethereum till Bitcoin är 0.06 så vi multiplicerar 0.24197529 x 0.06484324 = 0.0156904618035396. Detta värde ligger mycket nära växelkursen mellan Bitcoin Cash och Bitcoin men inte exakt samma.

Vid denna tidpunkt kontrollerar vi baksidan av banan, dvs. Bitcoin till Ethereum till Bitcoin Cash genom att multiplicera 1 x 15.414849 x 4.132739 = 63.705547641411. Vi multiplicerar dessa två resultat tillsammans för vår slutliga utvärdering av vägen (0.0156904618035396 x 63.705547641411 = 0.9995694619411315). Såvitt jag vet finns det inte en definierad term för detta värde. Vi kan kalla det Arbitrage Factor.

Om växelkurserna var synkroniserade skulle Arbitrage Factor ha varit exakt en. Ett värde mindre än ett antyder att vi gick igenom serien av börser och slutade med mindre än vi började med. Så vi letar efter att detta värde ska vara större än ett eftersom utbytena skulle leda till vinst. Om vi ​​hade funnit att Arbitrage Factor var 1.005 i vårt tidigare exempel, skulle detta ha visat att genom att följa den utbytesvägen från en krypto till en annan och tillbaka, kunde vi ha vunnit 0.005 Bitcoin Cash (värt cirka $ 3).

Arbitrage möjligheter kommer och går för olika kryptor under hela dagen och det är möjligt att kontrollera alla kombinationer för flera mynt utan att hitta en Arbitrage Factor betydligt över en. Men jag har sett Arbitrage Factors över 1.01, vilket indikerar att en avkastning på 1% kunde tjänas på några få ögonblick genom enkla kryptovalutautbyten.

Genom att ta med de tre funktionerna som förklaras ovan kan vi skapa en krypto arbitrage-skanner.

Valutaarbitrage är en väletablerad och låg risk handelsmetod, men marknaden för traditionella valutor är mycket effektiv och konkurrenskraftig. En större möjlighet finns i kryptovalutor och några enkla Python-verktyg kan hjälpa till att underlätta strategin. NetworkX kan användas för att bygga en graf och snabbt söka efter arbitragemöjligheter.

Det finns dock fortfarande utmaningar att lösa. För det första kan avgifterna för handel med kryptovalutor vara mycket höga. Detta innebär att alla obalanser mellan kryptor måste vara betydande för att vara lönsamma. Samtidigt kommer strategin att vara mest effektiv om den automatiseras och ställs in att köra regelbundet eller dygnet runt. Se efter framtida artiklar om implementering av kryptohandelsstrategier med AWS EC2-instanser eller Lambda-funktioner.

Mer innehåll på vanlig engelska.io

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

Tidsstämpel:

Mer från Medium