Articles

Zbuduj bota do handlu kryptowalutami za pomocą R

Zdjęcie Branko Stancevica na Unsplash

** zauważ, że API użyte w tym samouczku nie jest już dostępne. Ten artykuł powinien być czytany w celach ilustracyjnych, mając to na uwadze.

umysł tradera jest słabym ogniwem w każdej strategii lub planie handlowym. Skuteczna realizacja transakcji wymaga ludzkich wejść, które przebiegają w przeciwnym kierunku niż nasze instynkty. Powinniśmy kupować, kiedy nasz gadowaty mózg chce sprzedać. Powinniśmy sprzedawać, kiedy nasze wnętrzności chcą, żebyśmy kupili więcej.

jeszcze trudniej jest handlować kryptowalutami o krytycznej konstytucji. Młode i wschodzące rynki są zalewane przez” grupy pompowe”, które sprzyjają intensywnemu FOMO (strach przed utratą), które powodują, że ceny są wysokie, a następnie uderzają je z powrotem w ziemię. Wielu początkujących inwestorów również handluje na tych rynkach, inwestorzy, którzy prawdopodobnie nigdy nie weszli w handel na NYSE. W każdej transakcji jest producent i przyjmujący, a sprytni inwestorzy kryptowalutowi łatwo wykorzystują nowicjuszy zalewających przestrzeń.

aby oderwać moje emocje od handlu kryptowalutami i skorzystać z rynków otwartych 24/7, postanowiłem zbudować prostego bota handlowego, który podążałby za prostą strategią i realizował transakcje podczas snu.

wielu „handlowców botów”, jak się ich nazywa, używa języka programowania Python do wykonywania tych transakcji. Gdybyś Google, „crypto trading bot”, znajdziesz linki do kodu Pythona w różnych repozytoriach Github.

jestem analitykiem danych, a R jest moim głównym narzędziem. Szukałem przyzwoitego samouczka na temat używania języka R do budowania bota handlowego, ale nic nie znalazłem. Byłem ustawiony na budowanie własnego pakietu do interfejsu z GDAX API, gdy znalazłem pakiet rgdax, który jest opakowaniem R dla GDAX API. Poniżej znajduje się przewodnik po składaniu bota handlowego, którego możesz użyć do budowania własnych strategii.

W skrócie, będziemy handlować parą Ethereum — USD na giełdzie GDAX za pośrednictwem ich API za pośrednictwem owijarki rgdax. Lubię handlować tą parą, ponieważ Ethereum (ETH) jest zazwyczaj w pozycji byczej, co pozwala tej strategii zabłysnąć.

uwaga: jest to bardzo uproszczony strat, który zarobi tylko kilka dolców na rynku byka. Dla wszystkich zamiarów i celów, użyj tego jako bazy do budowy własnego strat.

będziemy kupować, gdy połączenie wskaźników Relative Strength Index (RSI) wskaże na tymczasowo wyprzedany rynek, z założeniem, że byki po raz kolejny podniosą ceny i będziemy mogli zbierać zyski.

gdy kupimy, bot wprowadzi trzy zlecenia sprzedaży z limitem: jedno z zyskiem 1%, drugie z zyskiem 4% i ostatnie z zyskiem 7%. Pozwala nam to szybko zwolnić środki na wejście do kolejnej transakcji z dwoma pierwszymi zamówieniami, a zamówienie 7% zwiększa naszą ogólną rentowność.

oprogramowanie

będziemy używać RStudio i Windows Task scheduler do regularnego wykonywania naszego kodu R (co 10 minut). Będziesz potrzebować konta GDAX, aby wysyłać zamówienia, i konta Gmail, aby otrzymywać powiadomienia o transakcjach.

nasz proces

Część 1: wywołanie bibliotek i funkcji budowania

zaczniemy od wywołania kilku bibliotek:

pakiet rgdax zapewnia interfejs do GDAX API, mailr służy do wysyłania nam aktualizacji e-mail z kontem Gmail, stringi pomaga nam analizować numery z JSON i TTR pozwala nam wykonywać obliczenia wskaźników technicznych.

funkcja: curr_bal_usd & curr_bal_eth

użyjesz swojego klucza api, tajnego i hasła wygenerowanego z GDAX w sekcji API. Funkcje te odpytują Twoje konto GDAX o najnowsze saldo, które będziemy używać wielokrotnie w naszym handlu:

funkcja: RSI

użyjemy RSI lub Relative Strength Index jako naszych głównych wskaźników dla tej strategii. Curr_rsi14_api pobiera wartość ostatniego 14 okresu RSI, używając 15-minutowych świec. RSI14_api_less_one i tak dalej wyciągnij RSI za okresy poprzedzające:

Function: bid & ask

Next, we will need the current bid and ask prices for our strategy:

Function: usd_hold, eth_hold i cancel_orders

aby móc składać zlecenia z limitem w iteracyjny sposób, musimy być w stanie odczytać aktualny status już złożonych zleceń i móc anulować zlecenia, które przesunęły się zbyt daleko w dół księgi zleceń, aby je wypełnić. Użyjemy funkcji” holds” pakietu rgdax, aby to zrobić dla pierwszego, a „cancel_order” dla drugiego:

funkcja: buy_exe

jest to funkcja big-daddy, która faktycznie wykonuje nasze zlecenia z limitem. Istnieje kilka kroków, przez które działa ta funkcja.

1. Funkcja Order_size oblicza, ile eth możemy kupić, ponieważ chcemy kupić jak najwięcej za każdym razem, mniej niż 0.005 eth, aby uwzględnić błędy zaokrąglania

2. Nasza funkcja WHILE umieszcza zlecenia z limitem, podczas gdy my wciąż mamy zero ETH.

3. Zamówienie jest dodawane po cenie bid (), system ma 17 sekund, aby umożliwić wypełnienie zamówienia, a następnie sprawdza, czy zamówienie zostało wypełnione. Jeśli tak nie było, to proces się powtarza.

część 2: Przechowuj zmienne

następnie musimy przechowywać niektóre nasze zmienne wskaźnika RSI jako obiekty, aby pętla handlowa działała szybciej i nie przekraczała limitu szybkości API:

część 3: pętla transakcyjna wykonuje

do tej pory przygotowywaliśmy nasze funkcje i zmienne w celu wykonania pętli transakcyjnej. Poniżej znajduje się słowny spacer po rzeczywistej pętli handlowej:

jeśli obecne saldo naszego konta w USD jest większe niż $20, rozpoczniemy pętlę. Następnie, jeśli obecny RSI jest większy lub równy 30, a RSI w poprzednim okresie był mniejszy lub równy 30, a RSI w poprzednich okresach 3 był mniejszy niż 30 co najmniej raz, to kupujemy tyle ETH, ile możemy z aktualnym Saldem USD.

następnie zapisujemy tę cenę zakupu do pliku CSV.

następnie wysyłamy do siebie maila z ostrzeżeniem o akcji zakupu.

pętla następnie wypisuje „kup”, abyśmy mogli śledzić to w naszym pliku dziennika.

System uśpiony na 3 sekundy.

teraz wprowadzamy 3 poziomowe zlecenia sprzedaży z limitem, aby uzyskać zyski.

nasze pierwsze zlecenie sprzedaży z limitem zyskuje 1% zysku, następne zyskuje 4% zysku, a ostatnie zyskuje 7% zysku:

to jest to, to jest cały skrypt.

Część 4: Korzystanie z Harmonogramu zadań systemu Windows do automatyzacji skryptu

całym celem tego bota jest usunięcie ludzkiego błędu z handlu i umożliwienie nam wprowadzania transakcji bez konieczności obecności na ekranie. W tym celu użyjemy Harmonogramu zadań systemu Windows.

Zaplanuj skrypt z dodatkiem Rstudio

użyj poręcznego dodatku Rstudio, aby łatwo zaplanować skrypt:

zmodyfikuj zaplanowane zadanie za pomocą Harmonogramu zadań

przejdź do zadania utworzonego przez dodatek RStudio i dostosuj WYZWALACZ, aby działał w żądanym interwale. W moim przypadku wybieram co 10 minut w nieskończoność.

miej oko na swoje zadanie za pomocą pliku dziennika

za każdym razem, gdy skrypt działa, wprowadzi wpis w pliku dziennika tekstowego, który pozwala rozwiązywać błędy w skrypcie:

możesz zobaczyć, jak funkcja drukowania „start log entry” I „end log entry” przydaje się do oddzielania naszych wpisów.

zrób to sam

możesz zmodyfikować ten skrypt, aby był tak prosty lub tak złożony, jak chcesz. Pracuję nad ulepszeniem tego skryptu o dodanie sieci neuronowych z modułu Keras z TensorFlow dla Rstudio. Te sieci neuronowe dodają wykładniczo bardziej złożony element do skryptu, ale są niezwykle potężne do znajdowania ukrytych wzorców w danych.

ponadto pakiet TTR zapewnia nam dużą liczbę funkcji finansowych i wskaźników technicznych, które można wykorzystać do ulepszenia Twojego modelu.

przy tym wszystkim, nie graj z większą ilością pieniędzy, które możesz stracić. Rynki nie są grą i możesz i stracisz koszulkę.