Crypto Quant: programmatisk handel med BTC ved hjælp af Binance og Backtrader — Del 2 af 3 PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

Crypto Quant: programmatisk handel med BTC ved hjælp af Binance og Backtrader — Del 2 af 3


Crypto Quant: programmatisk handel med BTC ved hjælp af Binance og Backtrader — Del 2 af 3 PlatoBlockchain Data Intelligence. Lodret søgning. Ai.

I denne del we ønsker at installere Backtrader og backtest nogle handelsmodeller mod de Binance-data, vi indsamlede i det foregående afsnit.

Der er adskillige artikler og videoer om Backtrader og dens opsætning. Dette populære Python-bibliotek letter Quant-arbejdet med at backteste handelsstrategier med historiske data og besvarer det essentielle spørgsmål "hvor rentabelt ville det have været at handle ved hjælp af givne KØB/SÆLG-strategier". Dette føles som matematisk alkymi i starten, men man skal huske, at historiske data er, ja, historiske! En handelsstrategi, der fungerede i går, virker næppe i dag ... men vi vender tilbage til det om lidt.

Backtrader ('bt') installationsinstruktioner er link.. Bemærk: der er kendte problemer med mapplotlib-versioner over 3.2.0, så pas på det.

Quickstart guide er en værd at læse, find den link..

RSI

Det, vi vil prøve med Backtrader her, er at backteste en RSI (Relativ styrkeindikator) handelsstrategi på historiske kryptodata (for BTC) fra tidligere på året.

RSI-momentumindikatoren er forklaret link.. Den måler relative oversolgte og overkøbte betingelser for et givet handelsaktiv og en parameter "periode", som er antallet af ticks (handelsintervaller) bagud.

Periode-parameteren er som standard 14, så hvis intervallet er minutter, vil formlen inkludere 14 interval-mærker af data. Som vi vil udforske næste gang, har hver teknisk indikator parametre, som er vores måde at 'tune' til markedsforholdene; disse parametre har en enorm indflydelse på rentabiliteten af ​​enhver given indikator inden for en strategi.

Backtest.py

Vores backtest-opsætning: backtest.py deles link.. Dette vil give backtest-strukturen for vores backtest-løb, som skal defineres næste gang. Dette er en ret standard 'bt' opsætning. Lad os gennemgå noget af denne kode, Bemærk, at der er masser af eksempler og videotutorials online på Python backtest at lære af.

Her i klassedefinitionen opstiller vi parametre for vores RSI-strategi.

  • ordrig: hvis vi ønsker at udlæse logdata under backtesten
  • maperiod: glidende gennemsnitsperiode, antallet af flueben der skal tages i betragtning
  • mængde: antallet af aktier, der skal købes/sælges
  • øverst: den øvre tærskel for indikatoren for overkøb
  • lavere: den nedre tærskel for indikatoren for oversolgt
  • stop tab: stop loss-indstillingen for salg

Næste() funktion i en Backtrader-strategiklasse er, hvad der sker efter hvert interval 'tick' af data. Her er buy() eller sell() i henhold til dataene, i dette tilfælde RSI-indikatoren og vores tærskler.

Her definerer vi runbacktest() funktion, som vil blive kaldt af vores kode. Den førnævnte RSI-strategifunktion er tilføjet til hjerne instans.

Alle ret standard Backtrader-ting. Lad os se, hvordan du kører dette mod vores data.

Backtesting af vores data

Sørg for at få data (ved hjælp af det sidste afsnits trin) for 1. januar til 2. januar 2021, dette vil være i en fil med navnet: BTCUSDT-20210101–20210102–1m.csv med 1440 CSV-linjer, en for hvert minut af dagen.

Her er koden og output for denne en dags værdi af minut-for-minut handelsdag for Bitcoin (BTC):

Ser nærmere på:

Parametrene er enkle, vi ønsker at analysere en handelsdag ved at bruge RSI-indikatoren med en periode på 12 ticks, ingen stop-loss og standardgrænser på 70,30 for de overkøbte og oversolgte triggere.

Jan 1 bt resultater med standard RSI indikator strategi

Den sidste linje af output opsummerer resultaterne af denne backtest:

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

RSI periode 12, 0 (Nej) stop-loss, (U) øvre grænse på 70 (L) nedre grænse på 30, nettooverskud (på én dag) på $777.78 med 18 vindende handler og 7 tabende handler.

Det sidste tal er SQN, et 'System Quality Number' (SQN), som er designet til at hjælpe handlende med at bestemme styrkerne, ønskværdigheden og kvaliteten af ​​et handelssystem. En strategi af god kvalitet ses som en, der er både omsættelig og effektiv.*

Følgende SQN-værdier foreslår følgende "kvaliteter":

  • 1.6–1.9 Under gennemsnittet
  • 2.0–2.4 gennemsnit
  • 2.5–2.9 Godt
  • 3.0–5.0 Fremragende
  • 5.1–6.9 Fantastisk
  • 7.0 - Den hellige gral

SQN formlen:

SquareRoot(NumberTrades) * Gennemsnit(TradesProfit) /StdDev(TradesProfit)

Normalt ville vi insistere på mindst 30 handler for at denne metrisk skal være statistisk signifikant, men vi vil ignorere det for nu, da vi tester vores backtest ud med en kort periode.

Du kan zoome ind på dele af plottet, for eksempel:

Her ser vi et købssignal (grøn op-pil), da RSI-værdien falder under 30 og derefter et rentabelt salgssignal som og profitmarkør (blå cirkel), da RSI når over 70. Se værdierne for RSI i nederste højre hjørne .

Fortjeneste (på én dag) på $777.78 med 18 vindende handler og 7 tabende handler er ganske god, især for en handelsdag med relativt overfladisk handling (+1.42%). Forestil dig, hvad vi kunne opnå på en bullish dag med høj volumen!

Modelparametre

Du får kørt get_data for forskellige dage og analyserer disse separat. Læg mærke til, hvordan forskellige RSI-parametre har indflydelse på rentabiliteten fra den ene dag til den anden.

Eksempelvis samme dag for BTC-handel, men med en RSI-periode på 20 i stedet for 12, vind-tab på 2/3 og en nettooverskud på -21.51 USD (inklusive handelsgebyrer). Det er en stor forskel fra den sidste backtest!

Du kan også eksperimentere med forskellige RSI-grænser (andre end standard 70/30) og stop-loss-parametre. Stop-loss er en automatisk salgsordre, når prisen går under et niveau i forhold til den udførte købsordre. Som navnet antyder, kan dette tjene til at "stoppe et tab" efter at være kommet i en position i volatilitet.

Stop-Loss

Den måde, vi har sat stop-loss op her, er som følger:

  • 0 : ingen stop-loss opsætning, vent på, at indikatoren udløser en salgsordre
  • 0.00x : stop-loss ved en % værdi under købsprisen, 0.001 er 0.1 % under
  • -0.0x : Efterfølgende stop-loss vil følge handlen, efterhånden som prisen stiger, 0.01 er et efterfølgende stop-loss 1 % under købsprisen

Dette stop-loss er en vigtig parameter for hver handel og kan have en betydelig betydning, ikke overraskende, på ydeevnen. For mere om stop-loss strategier se link..

Her i vores backtest.py er det, hvor vi sætter dette op ved hjælp af backtrader:

Her er det samme løb, som vi lige har analyseret, men med et stop-loss på 0.1 %

Nettoresultat på $383.67 med 12 sejre og 12 tab, meget bedre end det tab, vi havde før. Du kan se i plottet, at det efterfølgende stop-loss beskyttede mange af handlerne mod at glide ind i tab, da indikatoren ventede på et salgssignal (overkøbt).

Inden for en enkelt indikator har vi i denne opsætning mange forskellige mulige permutationer:

  • et periodeinterval mellem 10 og 30 intervaller (20 varianter)
  • en stop-loss indstilling (lad os forestille os 5 forskellige praktiske varianter)
  • en tærskel for overkøbt/oversolgt (lad os forestille os 5 varianter for nu)

Det ville være 20x5x5, eller 500 forskellige variationer for hver dag. At undersøge disse én for én i hånden ville være latterligt, og alligevel ønsker vi at vide, hvilke parametre der var mest rentable og af den højeste handelskvalitet, og hvilke der ikke var.

Kvant alkymi!

Dette bringer os til vores næste trin i denne Crypto Quant-udforskning. Vi kan brute-force bestemme de mest profitable og højeste kvalitets handelsstrategiparametre for en given handelsperiode og derefter se, hvordan disse overføres.

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

Tidsstempel:

Mere fra Medium