Crypto Quant: programmatisk handel med BTC med Binance och Backtrader — Del 2 av 3 PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

Crypto Quant: programmatisk handel med BTC med Binance och Backtrader - Del 2 av 3


Crypto Quant: programmatisk handel med BTC med Binance och Backtrader — Del 2 av 3 PlatoBlockchain Data Intelligence. Vertikal sökning. Ai.

I denna del we vill installera Backtrader och testa några handelsmodeller mot Binance-data som vi samlade in i föregående avsnitt.

Det finns många artiklar och videor på Backtrader och dess installation. Det här populära Python-biblioteket underlättar Quant-arbetet med backtesting-handelsstrategier med historisk data och svarar på den grundläggande frågan "Hur lönsamt hade det varit att handla med givna KÖP / SÄLJ-strategier". Detta känns som matematisk alkemi först men man måste komma ihåg att historiska data är, ja, historiska! En handelsstrategi som fungerade igår kommer sannolikt inte att fungera idag ... men vi kommer snart tillbaka till det.

Installationsanvisningar för Backtrader ('bt') är här.. Obs! Det finns kända problem med mapplotlib-versioner över 3.2.0 så var försiktig med det.

Snabbstartsguide är en värdefull läsning, hitta den här..

RSI

Vad vi kommer att försöka med Backtrader här är backtesting en RSI (Relativ styrkaindikator) handelsstrategi för historisk kryptodata (för BTC) från tidigare under året.

RSI-momentumindikatorn förklaras här.. Den mäter relativa översålda och överköpta förhållanden för en viss handelstillgång och en parameter för 'period' som är antalet fästingar (handelsintervall) bakåt.

Periodparametern är som standard 14, så om intervallet är minuter kommer formeln att innehålla 14 intervallfelter med data. Som vi kommer att utforska nästa har varje teknisk indikator parametrar som är vårt sätt att 'anpassa' till marknadsförhållandena; dessa parametrar har en enorm inverkan på lönsamheten för en viss indikator inom en strategi.

Backtest.py

Vår backtest-inställning: backtest.py delas här.. Detta ger backtest-strukturen för vår backtest-körning, som definieras härnäst. Detta är en ganska vanlig "bt" -installation. Låt oss granska en del av den här koden, notera att det finns gott om exempel och videohandledning online på Python backtest att lära av.

Här i klassdefinitionen fastställer vi parametrar för vår RSI-strategi.

  • mångordig: om vi vill mata ut loggdata under backtestet
  • maperiod: glidande medelperiod, antalet fästingar att tänka på
  • mängd: antalet aktier att köpa / sälja
  • övre: den övre tröskeln för indikatorn för överköpt
  • lägre: den nedre tröskeln för indikatorn för översåld
  • stoppa förlusten: inställningen för stop loss för försäljning

Smakämnen Nästa() funktion i en Backtrader-strategiklass är vad som händer efter varje intervall "tick" av data. Här är köp () eller sälj () enligt data, i det här fallet RSI-indikatorn och våra trösklar.

Här definierar vi runbacktest () funktion som kommer att anropas av vår kod. Den tidigare nämnda RSI-strategifunktionen läggs till i hjärna exempel.

Alla ganska vanliga Backtrader-grejer. Låt oss se hur man kör detta mot våra data.

Testar våra data

Var noga med att få data (med hjälp av stegen i det sista avsnittet) för 1 januari till 2 januari 2021, detta kommer att finnas i en fil med namnet: BTCUSDT-20210101–20210102–1m.csv med 1440 CSV-linjer, en för varje minut på dagen.

Här är koden och utmatningen för den här endagens värde för minut för minut handelsdag för Bitcoin (BTC):

Närmare titt:

Parametrarna är enkla, vi vill analysera en handelsdag med hjälp av RSI-indikatorn med en period på 12 fästingar, inga stoppförluster och standardgränser på 70,30 för de överköpta och översålda utlösarna.

1 jan bt resultat med standard RSI-indikatorstrategi

Den sista produktionsraden sammanfattar resultaten av denna 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-period 12, 0 (Nej) stoppförlust, (U) pper-gräns på 70 (L) övre gräns på 30, nettovinst (på en dag) på 777.78 $ med 18 vinnande affärer och 7 förlorade affärer.

Den sista siffran är SQN, ett '' System Quality Number '' (SQN) som är utformat för att hjälpa handlare att bestämma styrkan, önskvärdheten och kvaliteten hos ett handelssystem. En bra kvalitetsstrategi ses som en som är både omsättbar och effektiv. *

Följande SQN-värden föreslår följande "kvaliteter":

  • 1.6–1.9 Under genomsnittet
  • 2.0–2.4 Genomsnitt
  • 2.5–2.9 Bra
  • 3.0–5.0 Utmärkt
  • 5.1–6.9 Fantastiskt
  • 7.0 - Holy Grail

SQN-formeln:

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

Normalt skulle vi insistera på minst 30 affärer för att denna mätvärde ska vara statistiskt signifikant men vi kommer att ignorera det för tillfället när vi testar vårt backtest med en kort tidsperiod.

Du kan zooma in i delar av handlingen, till exempel:

Här ser vi en köpsignal (grön upppil) när RSI-värdet sjunker under 30 och sedan en lönsam säljsignal som och vinstmarkör (blå cirkel) när RSI når över 70. Se värdena för RSI i det nedre högra hörnet .

Vinsten (på en dag) på 777.78 $ med 18 vinnande och 7 förlorade affärer är ganska bra, särskilt för en handelsdag med relativt grunda åtgärder (+ 1.42%). Föreställ dig vad vi kunde uppnå på en hausseartad dag med hög volym!

Modellparametrar

Du får köra get_data för olika dagar och analysera dessa separat. Lägg märke till hur olika RSI-parametrar påverkar lönsamheten från en dag till en annan.

Fall i punkt, samma dag för BTC-handel men med en RSI-period på 20 snarare än 12, vinn-förlust på 2/3 och en nettovinst på - 21.51 dollar (inklusive handelsavgifter). Det är en stor skillnad från det senaste backtestet!

Du kan också experimentera med olika RSI-gränser (andra än standard 70/30) och stop-loss-parametrar. Stop-loss är en automatisk försäljningsorder när priset understiger någon nivå i förhållande till den utförda köpordern. Som namnet antyder kan detta tjäna till att "stoppa en förlust" efter att ha kommit i en position i volatilitet.

Stop-Loss

Sättet vi har ställt in stop-loss här är som följer:

  • 0 : ingen inställning av stop-loss, vänta tills indikatorn aktiverar en säljorder
  • 0.00x : stop-loss till ett% -värde under inköpspriset, 0.001 är 0.1% under
  • -0.0x: efterföljande stoppförlust följer handeln när priset stiger, 0.01 är ett efterföljande stoppförlust 1% under inköpspriset

Denna stoppförlust är en viktig parameter för varje handel och kan inte överraskande betyda betydelsen av prestanda. För mer information om stop-loss-strategier, se här..

Här i vår backtest.py är där vi ställer in detta med hjälp av backtrader:

Här är samma körning som vi just analyserade men med en 0.1% efterföljande stoppförlust

Nettovinst på $ 383.67 med 12 vinster och 12 förluster, mycket bättre än förlusten vi hade tidigare. Du kan se i plottet att den efterföljande stoppförlust skyddade många av affären från att glida in i förluster som indikatorn som väntar på en säljsignal (överköpt) signal.

Inom en enda indikator har vi i denna inställning många olika möjliga permutationer:

  • ett periodintervall mellan 10 och 30 intervall (20 varianter)
  • en stop-loss-inställning (låt oss föreställa oss 5 olika praktiska varianter)
  • en tröskel för överköpt / översåld (låt oss föreställa oss 5 varianter för nu)

Det skulle vara 20x5x5, eller 500 olika variationer för varje dag. Att undersöka dessa en efter en för hand skulle vara löjligt och ändå vill vi veta vilka parametrar som var mest lönsamma och av högsta handelskvalitet och vilka inte.

Kvantalkemi!

Detta tar oss till vårt nästa steg i denna utforskning av Crypto Quant. Vi kan bestämma de mest lönsamma och högkvalitativa handelsstrategiparametrarna för en given handelsperiod och sedan se hur dessa fortsätter.

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

Tidsstämpel:

Mer från Medium