Crypto Quant: programowy handel BTC przy użyciu Binance i Backtrader — część 2 z 3 PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

Crypto Quant: programowy handel BTC za pomocą Binance i Backtrader — Część 2 z 3


Crypto Quant: programowy handel BTC przy użyciu Binance i Backtrader — część 2 z 3 PlatoBlockchain Data Intelligence. Wyszukiwanie pionowe. AI.

W tej części wChcę zainstalować Backtrader i przetestuj niektóre modele handlowe z danymi Binance, które zebraliśmy w poprzedniej sekcji.

Istnieje wiele artykułów i filmów na temat Backtradera i jego konfiguracji. Ta popularna biblioteka Pythona ułatwia pracę Quant polegającą na testowaniu historycznym strategii handlowych z danymi historycznymi, odpowiadając na kluczowe pytanie „jak opłacalne byłoby handlowanie przy użyciu danych strategii KUPNA/SPRZEDAŻY”. Na początku wydaje się to matematyczną alchemią, ale trzeba pamiętać, że dane historyczne są, no cóż, historyczne! Strategia handlowa, która zadziałała wczoraj, prawdopodobnie nie zadziała dzisiaj… ale wkrótce do tego wrócimy.

Instrukcje instalacji Backtrader ('bt') są tutaj. Uwaga: istnieją znane problemy z wersjami mapplotlib powyżej 3.2.0, więc uważaj na to.

Przewodnik szybkiego startu warto przeczytać, znajdź go tutaj.

RSI

To, co będziemy tutaj próbować z Backtraderem, to testowanie historyczne i RSI (Wskaźnik siły względnej) strategia handlowa na historycznych danych kryptograficznych (dla BTC) z początku roku.

Wyjaśnienie wskaźnika pędu RSI tutaj. Mierzy względne warunki wyprzedania i wykupienia danego aktywa handlowego oraz parametr „okresu”, który jest liczbą tików (interwałów handlowych) wstecz.

Domyślnie parametr okresu wynosi 14, więc jeśli interwał wynosi minuty, formuła będzie zawierała 14 taktów danych interwału. Jak omówimy dalej, każdy wskaźnik techniczny ma parametry, które są naszym sposobem „dostrajania” do warunków rynkowych; parametry te mają ogromny wpływ na rentowność dowolnego wskaźnika w ramach strategii.

test wsteczny.py

Nasza konfiguracja backtestu: test wsteczny.py jest dzielony tutaj. Zapewni to strukturę analizy historycznej dla naszego przebiegu testu historycznego, która zostanie zdefiniowana w następnej kolejności. Jest to dość standardowa konfiguracja „bt”. Przyjrzyjmy się niektórym z tego kodu, zauważ, że istnieje wiele przykładów i samouczków wideo online dotyczących backtestu Pythona, z których można się uczyć.

Tutaj w definicji klasy ustalamy parametry dla naszej strategii RSI.

  • gadatliwy: jeśli chcemy wyprowadzić dane dziennika podczas backtestu
  • maokres: okres średniej ruchomej, liczba kleszczy do rozważenia
  • ilość: liczba akcji do kupna/sprzedaży
  • górny: górny próg wskaźnika wykupu
  • niższy: dolny próg wskaźnika wyprzedaży
  • zatrzymaj Stratę: ustawienie stop lossa na sprzedaż

Połączenia Kolejny() funkcja w klasie strategii Backtrader jest tym, co dzieje się po każdym „tyknięciu” interwału danych. Oto buy() lub sell() zgodnie z danymi, w tym przypadku wskaźnikiem RSI i naszymi progami.

Tutaj definiujemy bieg wsteczny() funkcja, która zostanie wywołana przez nasz kod. Wspomniana wcześniej funkcja strategii RSI została dodana do mózgu instancja.

Wszystkie dość standardowe rzeczy Backtradera. Zobaczmy, jak to porównać z naszymi danymi.

Testowanie wsteczne naszych danych

Upewnij się, że uzyskałeś dane (korzystając z kroków z ostatniej sekcji) od 1 stycznia do 2 stycznia 2021 r., będą one znajdować się w pliku o nazwie: BTCUSDT-20210101–20210102–1m.csv z 1440 liniami CSV, po jednej na każdą minutę dnia.

Tutaj to kod i dane wyjściowe dla tego jednodniowego dnia handlowego minuta po minucie dla Bitcoin (BTC):

Przyjrzyjmy się bliżej:

Parametry są proste, chcemy analizować jeden dzień handlu, używając wskaźnika RSI z okresem 12 ticków, bez stop-loss i domyślnych limitów 70,30 dla wyzwalaczy wykupienia i wyprzedania.

1 stycznia wyniki ze standardową strategią wskaźnika RSI

Ostatnia linia danych wyjściowych podsumowuje wyniki tego testu historycznego:

/BTCUSDT-20210101-20210102-1m.csv, RSI (Pd 12) (SL 0.0%) (U70 L30) Netto 777.78 USD (0.78%) WL 18/7 SQN 1.76

RSI okres 12, 0 (Nie) stop-loss, (U)górny limit 70 (L) górny limit 30, zysk netto (w ciągu jednego dnia) w wysokości 777.78 $ przy 18 zwycięskich transakcjach i 7 przegranych transakcjach.

Ostatnia cyfra to SQN, „numer jakości systemu” (SQN), który ma pomóc traderom w określeniu mocnych stron, atrakcyjności i jakości systemu transakcyjnego. Strategia dobrej jakości jest postrzegana jako strategia zarówno handlowa, jak i wydajna.*

Poniższe wartości SQN sugerują następujące „właściwości”:

  • 1.6-1.9 poniżej średniej
  • 2.0–2.4 Średnia
  • 2.5–2.9 dobry
  • 3.0-5.0 Doskonała
  • 5.1–6.9 Znakomity
  • 7.0 — Święty Graal

Formuła SQN:

pierwiastek kwadratowy (liczba transakcji) * średnia (zysk transakcji) / odchylenie standardowe (zysk transakcji)

Normalnie nalegalibyśmy na co najmniej 30 transakcji, aby ta metryka była statystycznie istotna, ale na razie to zignorujemy, ponieważ testujemy nasz backtest w krótkim czasie.

Możesz powiększyć fragmenty wykresu, na przykład:

Tutaj widzimy sygnał kupna (zielona strzałka w górę), gdy wartość RSI spada poniżej 30, a następnie sygnał opłacalnej sprzedaży jako i znacznik zysku (niebieskie kółko), gdy RSI osiąga powyżej 70. Zobacz wartości dla RSI w prawym dolnym rogu .

Zysk (w ciągu jednego dnia) w wysokości 777.78 USD przy 18 zwycięskich transakcjach i 7 przegranych transakcjach jest całkiem dobry, szczególnie w przypadku dnia handlowego o stosunkowo płytkiej akcji (+1.42%). Wyobraź sobie, co moglibyśmy osiągnąć w szczytowy dzień z dużą liczbą obrotów!

Parametry modelu

Otrzymujesz polecenie get_data dla różnych dni i analizujesz je osobno. Zwróć uwagę, jak różne parametry RSI wpływają na rentowność z dnia na dzień.

Na przykład ten sam dzień handlu BTC, ale z okresem RSI wynoszącym 20 zamiast 12, wygrana-przegrana 2/3 i zysk netto w wysokości -21.51 (w tym opłaty transakcyjne). To duża różnica w porównaniu z ostatnim testem wstecznym!

Możesz także poeksperymentować z różnymi limitami RSI (innymi niż domyślne 70/30) i parametrami stop-loss. Stop-loss to automatyczne zlecenie sprzedaży, gdy cena spadnie poniżej pewnego poziomu w stosunku do zrealizowanego zlecenia kupna. Jak sama nazwa wskazuje, może to służyć do „zatrzymania straty” po wejściu na pozycję w zmienności.

Stop-Loss

Sposób, w jaki ustawiliśmy tutaj stop-loss, wygląda następująco:

  • 0 : brak ustawienia stop-loss, poczekaj, aż wskaźnik uruchomi zlecenie sprzedaży
  • 0.00x : stop-loss przy wartości % poniżej ceny zakupu, 0.001 to 0.1% poniżej
  • -0.0x : trailing stop-loss będzie podążał za transakcją, gdy cena wzrośnie, 0.01 to trailing stop-loss 1% poniżej ceny zakupu

Ten stop-loss jest ważnym parametrem dla każdej transakcji i może mieć znaczący wpływ, co nie dziwi, na wyniki. Więcej informacji na temat strategii stop-loss znajdziesz w tutaj.

Tutaj w naszym backtest.py ustawiamy to za pomocą backtradera:

Oto ten sam przebieg, który właśnie analizowaliśmy, ale z 0.1% trailing stop-loss

Zysk netto w wysokości 383.67 USD z 12 wygranymi i 12 porażkami, znacznie lepszy niż strata, którą mieliśmy wcześniej. Na wykresie widać, że trailing stop-loss chronił wiele transakcji przed poślizgiem w straty jako wskaźnik oczekiwania na sygnał sprzedaży (wykupu).

W ramach jednego wskaźnika, w tej konfiguracji mamy wiele różnych możliwych permutacji:

  • zakres okresów od 10 do 30 interwałów (20 wariantów)
  • ustawienie stop-loss (wyobraźmy sobie 5 różnych praktycznych wariantów)
  • próg wykupienia/wyprzedania (wyobraźmy sobie na razie 5 wariantów)

To byłoby 20x5x5, czyli 500 różnych odmian na każdy dzień. Ręczne badanie ich pojedynczo byłoby śmieszne, a jednak chcemy wiedzieć, które parametry były najbardziej opłacalne i miały najwyższą jakość handlową, a które nie.

Alchemia ilościowa!

To prowadzi nas do następnego kroku w tej eksploracji Crypto Quant. Możemy brutalnie określić najbardziej dochodowe i najwyższej jakości parametry strategii handlowej dla danego okresu handlu, a następnie zobaczyć, jak są one przenoszone do przodu.

Source: https://medium.com/@gk_/crypto-quant-programmatic-trading-of-btc-using-binance-and-backtrader-part-2-of-3-d8af44c93e2b?source=rss——-8—————–cryptocurrency

Znak czasu:

Więcej z Średni