Crypto Arbitrage z NetworkX i Python PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Crypto Arbitrage z NetworkX i Pythonem

Analiza danych kryptograficznych z Coingecko API w celu zbudowania skanera arbitrażu kryptograficznego w pythonie

McKlayne'a Marshalla

Współautor: Izaak Rhea

Photo by Alina Grubniak on Unsplash

Rynki walut na całym świecie handlują 24 godziny na dobę przy wolumenach znacznie wyższych niż obligacje, akcje lub kontrakty futures rynki. Uczestnicy rynków walutowych zabezpieczają ryzyko lub spekulują na temat przyszłych zmian wartości walut.

Kolejnym źródłem zysków jest wykorzystywanie krótkoterminowych nierównowag w wycenach walut. Korzystając z błyskawicznych algorytmów, handlowcy o wysokiej częstotliwości identyfikują okazje do arbitrażu i szybko wykonują serię wymian, które skutkują niewielkim zyskiem. Zobacz artykuł z Corporate Finance Institute w celu uzyskania bardziej szczegółowych wyjaśnień i przykładów.

Instytut Finansów Korporacyjnych

Ze względu na dużą konkurencję i wolumen obrotu na rynkach walutowych, możliwości te są krótkotrwałe, a zyski znikome. Chociaż zyski z arbitrażu walutowego mogą narastać z czasem przy dużej liczbie transakcji, podobna możliwość istnieje na rynkach kryptowalut, które mogą być jeszcze bardziej opłacalne.

Ponieważ istnieje wiele krypt, którymi można handlować, istnieje wiele możliwych kombinacji, które można sprawdzić pod kątem możliwości arbitrażu. Struktura danych w postaci wykresu (sieci) jest idealna do śledzenia różnych kursów wymiany między monetami i szybkiego identyfikowania przypadków braku równowagi, z których możemy skorzystać. Więcej informacji na temat wykresów/sieci i pakietów Pythona do pracy z nimi znajdziesz tutaj książka Pragmatyczni programiści series.

Do zbudowania wykresu dla kryptowalut wykorzystamy pakiet NetworkX. Jest to potężne narzędzie, które ułatwia analizę interesujących nas monet i znajdowanie okazji handlowych. Najpierw uzyskamy kursy wymiany kryptowalut z API CoinGecko. Następnie zainicjujemy Wykres i zdefiniujemy relacje (kursy wymiany) między każdą interesującą nas monetą. Na koniec przejdziemy przez wszystkie ścieżki od jednej monety do drugiej iz powrotem, aby zidentyfikować możliwości arbitrażu.

Jeśli masz doświadczenie z interfejsami API JSON, CoinGecko API jest stosunkowo proste w użyciu. Za pomocą tego fragmentu kodu wyciągnąłem aktualne kursy wymiany pięciu różnych monet (Bitcoin, Bitcoin Cash, Ethereum, Litecoin i EOS).

Adres URL wywołania API będzie wyglądał mniej więcej tak, w zależności od monet, dla których chcesz pobrać dane:

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

Korzystając z pakietów Request i JSON dla Pythona, możemy załadować te dane jako słownik z kluczami dla każdego krypto, które umieściliśmy na naszej liście. Wartość powiązana z każdym z tych kluczy to kolejny słownik z wpisami kursów wymiany dla tej pary walutowej. Na przykład dla Bitcoin Cash otrzymujemy następujący wynik:

To pokazuje, że 0.25 Ethereum lub 0.16 Bitcoina można kupić za 1 Bitcoin Cash. Mając te wyniki dla każdego z krypt, jesteśmy gotowi do zdefiniowania wykresu.

Każda z monet reprezentuje „wierzchołek” na wykresie, a kurs wymiany między dwiema monetami jest „krawędzią”. Po zainicjowaniu pustego obiektu Graph definiujemy listę krotek dla każdej pary monet i ich kurs wymiany w obie strony.

Lista krawędzi będzie wyglądać mniej więcej tak:

Po dodaniu krawędzi do wykresu jesteśmy gotowi do skanowania w poszukiwaniu możliwości arbitrażu. Korzystając z funkcji kombinacji z pakietu itertools definiujemy wszystkie możliwe pary monet. Następnie używamy funkcji all_simple_paths z NetworkX, aby zdefiniować wszystkie możliwe ścieżki od pierwszej monety do drugiej.

Na przykład, jeśli patrzymy na Litecoin i Bitcoin Cash, istnieje wiele możliwych ścieżek, biorąc pod uwagę monety, które rozważamy. Możemy po prostu kupić Bitcoin Cash za Litecoin lub możemy kupić Bitcoin za Litecoin, a następnie użyć Bitcoin do zakupu Bitcoin Cash.

Zapętlamy każdą ścieżkę i na każdym kroku wykonujemy następujące obliczenia. Najpierw zakładamy, że zaczynamy od jednej z początkowych monet. Mnożymy to przez kurs wymiany jednej monety na drugą, aż dojdziemy do końca ścieżki.

Na przykład, jeśli zaczniemy od jednej gotówki Bitcoin, możemy kupić 0.24 Ethereum, więc pomnożymy 1 x 0.24197529 = 0.24197529. Kurs wymiany Ethereum na Bitcoin wynosi 0.06 więc mnożymy 0.24197529 x 0.06484324 = 0.0156904618035396. Ta wartość jest bardzo zbliżona do kursu wymiany Bitcoin Cash i Bitcoin, ale nie jest dokładnie taka sama.

W tym momencie sprawdzamy odwrotność ścieżki, tj. Bitcoin do Ethereum do Bitcoin Cash, mnożąc 1 x 15.414849 x 4.132739 = 63.705547641411. Mnożymy te dwa wyniki przez siebie w celu ostatecznej oceny ścieżki (0.0156904618035396 x 63.705547641411 = 0.9995694619411315). Według mojej wiedzy nie ma zdefiniowanego terminu dla tej wartości. Możemy to nazwać czynnikiem arbitrażowym.

Gdyby kursy walut były zsynchronizowane, czynnik arbitrażowy byłby dokładnie jeden. Wartość mniejsza niż jeden sugeruje, że przeszliśmy przez serię wymian i skończyliśmy z mniej niż na początku. Dlatego szukamy, aby ta wartość była większa niż jeden, ponieważ dokonywanie wymian przyniosłoby zysk. Gdybyśmy w poprzednim przykładzie ustalili, że współczynnik arbitrażu wynosi 1.005, oznaczałoby to, że podążając tą ścieżką wymiany z jednego krypto na drugie iz powrotem, moglibyśmy zyskać 0.005 Bitcoin Cash (o wartości około 3 USD).

Możliwości arbitrażu pojawiają się i znikają dla różnych kryptowalut w ciągu dnia i możliwe jest sprawdzenie wszystkich kombinacji dla kilku monet bez znajdowania współczynnika arbitrażu znacznie powyżej jednego. Widziałem jednak współczynniki arbitrażu powyżej 1.01, co wskazuje, że 1% zwrotu można uzyskać w ciągu kilku chwil na prostych giełdach kryptowalut.

Wykorzystując trzy opisane powyżej funkcje, jesteśmy w stanie stworzyć skaner arbitrażu kryptograficznego.

Arbitraż walutowy jest ugruntowaną i mało ryzykowną metodą handlu, ale rynek tradycyjnych walut jest bardzo wydajny i konkurencyjny. Większe możliwości istnieją w kryptowalutach, a kilka prostych narzędzi Pythona może pomóc w usprawnieniu strategii. NetworkX może być używany do budowania wykresu i szybkiego wyszukiwania możliwości arbitrażu.

Jednak wciąż istnieją wyzwania do pokonania. Po pierwsze, opłaty za handel kryptowalutami mogą być bardzo wysokie. Oznacza to, że wszelkie nierównowagi między kryptowalutami muszą być znaczne, aby były opłacalne. Jednocześnie strategia będzie najskuteczniejsza, jeśli zostanie zautomatyzowana i ustawiona na okresowe lub całodobowe działanie. Obserwuj przyszłe artykuły na temat wdrażania strategii handlu kryptograficznego z instancjami AWS EC2 lub funkcjami Lambda.

Więcej treści na zwykłyangielski.io

Źródło: https://python.plainenglish.io/crypto-arbitrage-with-networkx-and-python-638166e5a947?source=rss——-8—————–kryptowaluta

Znak czasu:

Więcej z Średni