Crypto Arbitrage med NetworkX og Python PlatoBlockchain Data Intelligence. Vertikalt søk. Ai.

Crypto Arbitrage med NetworkX og Python

Analyse av kryptodata fra Coingecko API for å bygge en kryptoarbitrasjeskanner 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 med volumer som er betydelig høyere enn obligasjoner, aksjer eller futures markeder. Deltakere i valutamarkeder sikrer risiko eller spekulerer i fremtidige endringer i valutaverdier.

En annen kilde til fortjeneste kommer fra å utnytte kortsiktige ubalanser i valutavurderinger. Ved hjelp av lynraske algoritmer identifiserer høyfrekvente tradere arbitrasjemuligheter og utfører raskt en rekke utvekslinger som resulterer i en liten fortjeneste. Se dette Artikkel fra Corporate Finance Institute for en mer utdypende forklaring og eksempler.

Corporate Finance Institute

På grunn av den høye konkurransen og handelsvolumet i valutamarkedene er disse mulighetene kortvarige og fortjenesten minimal. Selv om gevinster gjennom valutaarbitrasje kan oppstå over tid med et høyt antall handler, eksisterer en lignende mulighet i kryptovalutamarkeder som kan være enda mer lønnsomme.

Fordi det er mange kryptoer å handle, er det mange mulige kombinasjoner å se etter arbitrasjemuligheter. Graph (Nettverk) datastrukturen er ideell for å holde styr på de forskjellige valutakursene mellom mynter og raskt identifisere forekomster av ubalanse som vi kan dra nytte av. For mer informasjon om Graphs/Networks og Python-pakker for å jobbe med dem, sjekk ut denne bok i Pragmatiske programmerere serien.

For å bygge en graf for kryptovalutaer vil vi utnytte NetworkX-pakken. Dette er et kraftig verktøy som gjør det enkelt å analysere myntene vi er interessert i og finne handelsmuligheter. Først vil vi hente kryptokurser fra CoinGecko API. Deretter vil vi initialisere grafen og definere relasjonene (valutakursene) mellom hver av myntene vi er interessert i. Til slutt vil vi gå gjennom alle banene fra en mynt til en annen og tilbake for å identifisere arbitrasjemuligheter.

Hvis du har erfaring med JSON APIer CoinGecko API er relativt enkelt å bruke. Med denne kodebiten trakk jeg gjeldende valutakurser for fem forskjellige mynter (Bitcoin, Bitcoin Cash, Ethereum, Litecoin og EOS).

URL-en for API-kallet vil se omtrent slik ut, avhengig av myntene du ønsker å hente 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 å bruke Request- og JSON-pakkene for Python kan vi laste disse dataene som en ordbok med nøkler for hver krypto som vi inkluderte i listen vår. Verdien knyttet til hver av disse nøklene er en annen ordbok med oppføringer for valutakursene for det valutaparet. For eksempel, for Bitcoin Cash får vi følgende resultat:

Dette viser at 0.25 Ethereum eller 0.16 Bitcoin kan kjøpes med 1 Bitcoin Cash. Med disse resultatene for hver av kryptoene er vi klare til å definere grafen.

Hver av myntene representerer et "toppunkt" i grafen, og valutakursen mellom to mynter er en "kant". Etter å ha initialisert et tomt Graph-objekt, definerer vi en liste over tupler for hvert myntpar og deres valutakurs i begge retninger.

Listen for kantene vil se omtrent slik ut:

Med kantene lagt til grafen, er vi klare til å skanne etter arbitrasjemuligheter. Ved å bruke kombinasjonsfunksjonen fra itertools-pakken definerer vi alle mulige myntpar. Deretter bruker vi all_simple_paths-funksjonen fra NetworkX for å definere alle mulige stier fra den første mynten til den andre.

For eksempel, hvis vi ser på Litecoin og Bitcoin Cash, er det mange mulige veier gitt myntene vi vurderer. Vi kan ganske enkelt kjøpe Bitcoin Cash med Litecoin, eller vi kan kjøpe Bitcoin med Litecoin og deretter bruke Bitcoin til å kjøpe Bitcoin Cash.

Vi går gjennom hver bane og utfører følgende beregninger ved hvert trinn. Først antar vi at vi starter med en av de første myntene. Vi multipliserer den med valutakursen fra en mynt til en annen til vi kommer til slutten av banen.

For eksempel, hvis vi starter med én Bitcoin Cash, kan vi kjøpe 0.24 Ethereum slik at vi multipliserer 1 x 0.24197529 = 0.24197529. Valutakursen fra Ethereum til Bitcoin er 0.06 så vi multipliserer 0.24197529 x 0.06484324 = 0.0156904618035396. Denne verdien er veldig nær valutakursen mellom Bitcoin Cash og Bitcoin, men ikke helt den samme.

På dette tidspunktet sjekker vi baksiden av banen, dvs. Bitcoin til Ethereum til Bitcoin Cash ved å multiplisere 1 x 15.414849 x 4.132739 = 63.705547641411. Vi multipliserer disse to resultatene sammen for vår endelige evaluering av banen (0.0156904618035396 x 63.705547641411 = 0.9995694619411315). Så vidt jeg vet er det ikke et definert begrep for denne verdien. Vi kan kalle det arbitrasjefaktoren.

Hvis valutakursene var synkroniserte, ville Arbitrage-faktoren vært nøyaktig én. En verdi mindre enn én antyder at vi gikk gjennom rekken av utvekslinger og avsluttet med mindre enn vi startet med. Så vi ser etter at denne verdien skal være større enn én, da utveksling vil resultere i en fortjeneste. Hvis vi hadde funnet at arbitrasjefaktoren var 1.005 i vårt forrige eksempel, ville dette ha indikert at ved å følge den banen for utveksling fra en krypto til en annen og tilbake, kunne vi ha fått 0.005 Bitcoin Cash (verdt rundt $3).

Arbitragemuligheter kommer og går for forskjellige kryptoer i løpet av dagen, og det er mulig å sjekke alle kombinasjoner for flere mynter uten å finne en Arbitrage Factor vesentlig over én. Imidlertid har jeg sett Arbitrage Factors over 1.01, noe som indikerer at en avkastning på 1 % kan oppnås i løpet av få øyeblikk gjennom enkle kryptovalutautvekslinger.

Ved å ta med de tre funksjonene som er forklart ovenfor, er vi i stand til å lage en kryptoarbitrasjeskanner.

Valutaarbitrasje er en veletablert og lavrisiko handelsmetode, men markedet for tradisjonelle valutaer er svært effektivt og konkurransedyktig. En større mulighet finnes i kryptovalutaer og noen få enkle Python-verktøy kan hjelpe til med å lette strategien. NetworkX kan brukes til å bygge en graf og raskt søke etter arbitrasjemuligheter.

Det er imidlertid fortsatt utfordringer å overvinne. For det første kan gebyrene for å handle kryptovalutaer være svært høye. Dette betyr at eventuelle ubalanser mellom kryptoer må være betydelige for å være lønnsomme. Samtidig vil strategien være mest effektiv hvis den er automatisert og satt til å kjøre periodisk eller døgnet rundt. Se etter fremtidige artikler om implementering av kryptohandelsstrategier med AWS EC2-forekomster eller Lambda-funksjoner.

Mer innhold på vanlig engelsk.io

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

Tidstempel:

Mer fra Medium