Zadanie: wdrożenie maksymalnie szybkiego obliczenia i otwarcie zlecenia na giełdzie ByBit
Przygotowanie danych
Parujemy wszystkie tokeny na giełdzie ByBit (spot / futures, osobno), lista aktualizowana co 5 minut przez cron.
Łączymy się przez socket z każdą monetą i zbieramy w czasie rzeczywistym ticki (zmiana książki zleceń) i transakcje.
Wysyłamy to wszystko do Wiktorii Metrix, dane do 5 minut – przechowujemy w pamięci operacyjnej
Osobno dla spotu, osobno dla futures zbieramy aktualną książkę zleceń samodzielnie po tickach
Obliczenie danych dla transakcji
Obliczamy dynamikę zmiany ceny według VOLUME.
W tym celu obliczamy średnią cenę dla asków (dla otwarcia longu) w ekwiwalencie wolumenów:
1 000$, 5 000$ (krok w postaci tablicy ustalany w ustawieniach)
Porównujemy ze średnią wartością transakcji za ostatnie 60 i 300 sek
Porównujemy ze średnią wartością asków (na ten sam wolumen) według historii książek zleceń.
Na wyjściu otrzymujemy tablicę [price_difference_60s]
1000$ - 5.86%
5000$ - 6.12%
Robimy sprawdzenie, jeśli przy wolumenie 1000$ delta w cenie jest mniejsza niż 10% (PRICE_CHANGE_DELTA_60S = 10), wtedy kontynuujemy logikę/zakup.
Obliczenie danych slippage dla określenia rozmiaru.
Używając zadanej stałej (MAX_SLIPPAGE_PERCENT = 5) dodajemy wierszami ask, aż osiągniemy potrzebny limit w >5%
Mnożymy wolumen przez cenę w książce, aby obliczyć dostępny wolumen w książce z uwzględnieniem maksymalnego slippage.
Używamy zmiennej z konfiguracji (MAX_POSITION_SIZE_IN_USD = 10000) do ostatecznego obliczenia rozmiaru. Na przykład w książce zleceń w ask dostępny wolumen 8500$ ze slippage <5%, więc to nasz rozmiar pozycji 8500$, jeśli wolumen dostępny >10000$, wtedy nasz rozmiar pozycji będzie 10 000$ (wzięte z MAX_POSITION_SIZE_IN_USD)
Otwarcie transakcji
Wysyłamy przez websocket i przez REST API zlecenia limitowe z ceną asków +5% do ceny (wzięte z MAX_SLIPPAGE_PERCENT) i parametr IOC (immediantly or cancel).
Razem z zleceniem ustalamy stop loss/take profit na 33% rozmiaru na wzrost +10%, +20%, +30%
Stop loss ustalamy na -10% od pierwszego asku w książce.
Przekazujemy w zleceniu orderLinkId i "smpType": "CancelTaker" dla poprawnej pracy skryptu przy równoległym uruchomieniu na kilku serwerach.
Ważne jest przemyślenie systemu reconnectów, retrayów, logów i alertów
Warm_up_mode, co 30 sekund wysyłać “fałszywe” zlecenie na giełdę w celu utrzymania aktywności.
System generacji ja3 finger prints
Zadanie nie jest proste, wymaga pełnego zaangażowania, dlatego jeśli masz kilka godzin dziennie - nie pasuje. Potrzebna jest osoba z pełnym zaangażowaniem w temat.