Crypto Arbitrage med NetworkX og Python PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Crypto Arbitrage med NetworkX og Python

Analyse af kryptodata fra Coingecko API for at bygge en kryptoarbitragescanner i python

McKlayne Marshall

Medforfatter med Isaac Rhea

Photo by Alina Grubnyak on Unsplash

Markeder for valutaer rundt om i verden handler 24 timer i døgnet til volumener, der er væsentligt højere end obligationer, aktier eller futures markeder. Deltagere på valutamarkeder afdækker risiko eller spekulerer i fremtidige ændringer i valutaværdier.

En anden kilde til overskud kommer fra at drage fordel af kortsigtede ubalancer i valutavurderinger. Ved hjælp af lynhurtige algoritmer identificerer højfrekvente handlende arbitragemuligheder og udfører hurtigt en række udvekslinger, der resulterer i en lille fortjeneste. Se dette artikel fra Corporate Finance Institute for en mere dybdegående forklaring og eksempler.

Corporate Finance Institute

På grund af den høje konkurrence og handelsvolumen på valutamarkederne er disse muligheder kortvarige, og overskuddet er minimalt. Selvom gevinster gennem valutaarbitrage kan opstå over tid med et stort antal handler, eksisterer en lignende mulighed på kryptovalutamarkeder, som kan være endnu mere rentable.

Fordi der er mange kryptoer at handle, er der mange mulige kombinationer at tjekke for arbitragemuligheder. Graph (Netværk) datastrukturen er ideel til at holde styr på de forskellige valutakurser mellem mønter og hurtigt identificere tilfælde af uligevægt, som vi kan drage fordel af. For mere info om Graphs/Networks og Python-pakker til at arbejde med dem, tjek dette bog i Pragmatiske programmører serien.

For at bygge en graf til kryptovalutaer vil vi udnytte NetworkX-pakken. Dette er et kraftfuldt værktøj, der gør det nemt at analysere de mønter, vi er interesserede i, og finde handelsmuligheder. Først vil vi opnå kryptovalutakurser fra CoinGecko API. Derefter vil vi initialisere grafen og definere relationerne (valutakurser) mellem hver af de mønter, vi er interesserede i. Til sidst vil vi gennemgå alle stierne fra en mønt til en anden og tilbage for at identificere arbitragemuligheder.

Hvis du har erfaring med JSON API'er CoinGecko API er relativt enkel at bruge. Med dette kodestykke trak jeg aktuelle valutakurser for fem forskellige mønter (Bitcoin, Bitcoin Cash, Ethereum, Litecoin og EOS).

URL'en for API-kaldet vil se nogenlunde sådan ud, afhængigt af de mønter, du gerne vil trække data for:

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

Ved at bruge Request- og JSON-pakkerne til Python kan vi indlæse disse data som en ordbog med nøgler for hver krypto, som vi inkluderede på vores liste. Værdien, der er knyttet til hver af disse nøgler, er en anden ordbog med indgange til valutakurserne for det pågældende valutapar. For eksempel, for Bitcoin Cash får vi følgende resultat:

Dette viser, at 0.25 Ethereum eller 0.16 Bitcoin kan købes med 1 Bitcoin Cash. Med disse resultater for hver af kryptoerne er vi klar til at definere grafen.

Hver af mønterne repræsenterer et 'toppunkt' i grafen, og vekselkursen mellem to mønter er en 'kant'. Efter initialisering af et tomt Graph-objekt definerer vi en liste over tuples for hvert par mønter og deres vekselkurs i begge retninger.

Listen for kanterne vil se nogenlunde sådan ud:

Med kanterne tilføjet til grafen er vi klar til at scanne for arbitragemuligheder. Ved at bruge kombinationsfunktionen fra itertools-pakken definerer vi alle mulige møntpar. Derefter bruger vi funktionen all_simple_paths fra NetworkX til at definere alle mulige stier fra den første mønt til den anden.

For eksempel, hvis vi kigger på Litecoin og Bitcoin Cash, er der mange mulige veje givet de mønter, vi overvejer. Vi kan simpelthen købe Bitcoin Cash med Litecoin, eller vi kan købe Bitcoin med Litecoin og derefter bruge Bitcoin til at købe Bitcoin Cash.

Vi går gennem hver sti og udfører følgende beregninger ved hvert trin. For det første antager vi, at vi starter med en af ​​de indledende mønter. Vi multiplicerer den med valutakursen fra en mønt til en anden, indtil vi kommer til enden af ​​stien.

For eksempel, hvis vi starter med én Bitcoin Cash, kan vi købe 0.24 Ethereum, så vi ganger 1 x 0.24197529 = 0.24197529. Valutakursen fra Ethereum til Bitcoin er 0.06, så vi ganger 0.24197529 x 0.06484324 = 0.0156904618035396. Denne værdi er meget tæt på valutakursen mellem Bitcoin Cash og Bitcoin, men ikke helt den samme.

På dette tidspunkt kontrollerer vi det omvendte af stien, dvs. Bitcoin til Ethereum til Bitcoin Cash ved at gange 1 x 15.414849 x 4.132739 = 63.705547641411. Vi multiplicerer disse to resultater sammen til vores endelige evaluering af stien (0.0156904618035396 x 63.705547641411 = 0.9995694619411315). Mig bekendt er der ikke et defineret udtryk for denne værdi. Vi kan kalde det Arbitrage Factor.

Hvis valutakurserne var synkroniserede, ville Arbitrage-faktoren have været nøjagtig én. En værdi mindre end én tyder på, at vi gennemgik rækken af ​​udvekslinger og sluttede med mindre, end vi startede med. Så vi leder efter, at denne værdi er større end én, da udvekslingerne ville resultere i en fortjeneste. Hvis vi havde fundet arbitragefaktoren til at være 1.005 i vores tidligere eksempel, ville dette have indikeret, at ved at følge den vej for udvekslinger fra en krypto til en anden og tilbage, kunne vi have fået 0.005 Bitcoin Cash (værd omkring $3).

Arbitrage muligheder kommer og går for forskellige kryptoer i løbet af dagen, og det er muligt at tjekke alle kombinationer for flere mønter uden at finde en Arbitrage Factor væsentligt over én. Jeg har dog set Arbitrage Factors over 1.01, hvilket indikerer, at et afkast på 1% kunne opnås i løbet af få øjeblikke gennem simple kryptovalutaudvekslinger.

Ved at bringe de tre funktioner, der er forklaret ovenfor, er vi i stand til at oprette en kryptoarbitrage-scanner.

Valutaarbitrage er en veletableret handelsmetode med lav risiko, men markedet for traditionelle valutaer er meget effektivt og konkurrencedygtigt. En større mulighed findes i kryptovalutaer, og et par enkle Python-værktøjer kan hjælpe med at lette strategien. NetworkX kan bruges til at bygge en graf og hurtigt søge efter arbitragemuligheder.

Der er dog stadig udfordringer at overvinde. For det første kan gebyrerne for handel med kryptovalutaer være meget høje. Det betyder, at eventuelle ubalancer mellem kryptoer skal være betydelige for at være rentable. Samtidig vil strategien være mest effektiv, hvis den er automatiseret og indstillet til at køre periodisk eller døgnet rundt. Hold øje med fremtidige artikler om implementering af kryptohandelsstrategier med AWS EC2-instanser eller Lambda-funktioner.

Mere indhold på almindeligt engelsk.io

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

Tidsstempel:

Mere fra Medium