Articles

Bygg en Cryptocurrency Trading Bot med R

foto av Branko Stancevic på Unsplash

** Observera att API som används i denna handledning inte längre är i drift. Denna artikel bör läsas för illustrativa ändamål med detta i åtanke.

näringsidkarens sinne är den svaga länken i någon handelsstrategi eller plan. Effektiv handel utförande behöver mänskliga insatser som löper i motsatt riktning till våra instinkter. Vi borde köpa när vår reptilhjärna vill sälja. Vi borde sälja när våra tarmar vill att vi ska köpa mer.

det är ännu svårare att handla cryptocurrencies med en kritisk konstitution. De unga och tillväxtmarknaderna översvämmas av” pumpgrupper ” som främjar intensiv FOMO (rädsla för att missa) som driver priserna skyhöga innan kroppsslammande dem tillbaka till jorden. Många nybörjare investerare handlar också på dessa marknader, investerare som eventuellt aldrig gick in i en handel på NYSE. På varje handel finns det en tillverkare och en taker, och skarpa kryptoinvesterare tycker att det är lätt att dra nytta av nybörjare som översvämmer utrymmet.

för att lossa mina känslor från kryptohandel och dra nytta av marknader öppna 24 / 7 bestämde jag mig för att bygga en enkel handelsrobot som skulle följa en enkel strategi och utföra affärer när jag sov.

många ”bothandlare” som de kallas, använder Python-programmeringsspråket för att utföra dessa affärer. Om du skulle google,” crypto trading bot”, skulle du hitta länkar till Python-kod i olika Github-repositorier.

Jag är en datavetenskapare, och R är mitt huvudverktyg. Jag sökte efter en anständig handledning om att använda R-språket för att bygga en handelsrobot men hittade ingenting. Jag var inställd på att bygga mitt eget paket för att Gränssnitt med GDAX API när jag hittade paketet rgdax, vilket är ett r-omslag för GDAX API. Följande är en guide till pussla ihop en handel bot som du kan använda för att bygga dina egna strategier.

i ett nötskal kommer vi att handla Ethereum-USD-paret på GDAX-utbytet via deras API via rgdax-omslaget. Jag gillar att handla detta par eftersom Ethereum (ETH) vanligtvis är i en hausseartad hållning, vilket gör att denna strategi kan lysa.

Obs: Detta är en super-förenklad strat som bara kommer att göra några dollar på en tjurmarknad. För alla ändamål, använd detta som en bas för att bygga din egen strat.

Vi kommer att köpa när en kombination av RSI-indikatorer (Relative Strength Index) pekar på en tillfälligt översåld marknad, med antagandet att tjurarna återigen kommer att driva upp priserna och vi kan samla vinster.

När vi köper kommer boten att ange tre gränsförsäljningsorder: en med 1% vinst, en annan med 4% vinst och den sista med 7% vinst. Detta gör det möjligt för oss att snabbt frigöra medel för att komma in i en annan handel med 1: A två order, och 7% – ordern stärker vår övergripande lönsamhet.

programvara

Vi kommer att använda Rstudio och Windows Task scheduler för att utföra vår R-kod regelbundet (var 10: e minut). Du behöver ett GDAX-konto för att skicka order till och ett Gmail-konto för att få handelsmeddelanden.

vår Process

del 1: ring bibliotek och byggfunktioner

vi börjar med att ringa flera bibliotek:

paketet rgdax tillhandahåller gränssnittet till GDAX API, mailr används för att skicka oss e-postuppdateringar med ett Gmail-konto, stringi hjälper oss att analysera nummer från JSON och TTR tillåter oss att utföra tekniska indikatorberäkningar.

funktion: curr_bal_usd & curr_bal_eth

Du kommer att använda din api-nyckel, hemlighet och lösenfras som genereras från GDAX i API-avsnittet. Dessa funktioner frågar ditt GDAX-konto efter det senaste saldot som vi kommer att använda upprepade gånger i vår handel:

funktion: RSI

vi kommer att använda RSI eller Relative Strength Index som våra huvudindikatorer för denna strategi. Curr_rsi14_api drar i värdet av den senaste 14 period RSI, med användning av 15 minuters ljus. RSI14_api_less_one och så vidare dra in RSI för perioderna före:

Function: bid & ask

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

Function: usd_hold, eth_hold och cancel_orders

för att vi ska kunna göra limiterade beställningar på ett iterativt sätt måste vi kunna dra in den aktuella statusen för våra beställningar som redan placerats och kunna avbryta beställningar som har flyttat för långt ner i orderboken som ska fyllas. Vi kommer att använda funktionen ”håller” i rgdax-paketet för att göra detta för det förra och ”cancel_order” för det senare:

funktion: buy_exe

det här är big-daddy-funktionen som faktiskt utför våra gränsorder. Det finns flera steg som denna funktion fungerar igenom.

1. Order_size-funktionen beräknar hur mycket eth vi kan köpa, eftersom vi vill köpa så mycket som möjligt varje gång, mindre 0.005 eth för att ta hänsyn till avrundningsfel

2. Vår WHILE-funktion placerar begränsningsorder medan vi fortfarande har noll ETH.

3. En order läggs till i budpriset (), systemet sover 17 sekunder för att låta ordern fyllas och kontrollerar sedan om ordern fylldes. Om det inte var så upprepas processen.

del 2: lagra variabler

Därefter måste vi lagra några av våra RSI-indikatorvariabler som objekt så att handelsslingan går snabbare och så att vi inte överskrider hastighetsgränsen för API:

del 3: handelsslinga utför

hittills har vi just förberett våra funktioner och variabler för att utföra handelsslingan. Följande är en verbal genomgång av den faktiska handelsslingan:

om det aktuella saldot på vårt konto i USD är större än $20, startar vi slingan. Därefter, om den nuvarande RSI är större än eller lika med 30 och RSI under föregående period var mindre än eller lika med 30 och RSI under de föregående 3 perioderna var mindre än 30 minst en gång, köper vi så mycket ETH som vi kan med den nuvarande USD-saldot.

därefter sparar vi detta köppris i en CSV-fil.

sedan skickar vi ett mail till oss själva för att varna oss om köpåtgärden.

slingan skriver sedan ”köp” så att vi kan spåra det i vår loggfil.

systemet sover sedan i 3 sekunder.

nu går vi in i 3 tiered limit säljorder för att ta vinst.

vår första gräns säljorder tar vinst på en 1% vinst, nästa tar vinst på en 4% vinst, och den sista tar vinst på en 7% vinst:

det är det, det är hela skriptet.

Del 4: Använda Windows Task Scheduler för att automatisera skriptet

hela syftet med denna bot är att ta det mänskliga felet ur handeln och låta oss gå in i affärer utan att behöva vara närvarande på en skärm. Vi kommer att använda Windows Task Scheduler för att uppnå detta.

Schemalägg skript med Rstudio addin

använd det praktiska RStudio-tillägget för att enkelt schemalägga skriptet:

ändra den schemalagda aktiviteten med task scheduler

navigera till den uppgift som skapats av RStudio add in och justera avtryckaren till brand vid det intervall du önskar. I mitt fall väljer jag var 10: e minut på obestämd tid.

håll ett öga på din uppgift med loggfilen

varje gång ditt skript körs kommer det att göra en post i en textloggfil, vilket gör att du kan felsöka fel i ditt skript:

Du kan se hur utskriftsfunktionen ”start Log Entry” och ”End log entry” är till nytta för att separera våra poster.

gör det till ditt eget

Du kan ändra detta skript för att göra det så enkelt eller så komplext som du vill. Jag arbetar med att förbättra detta skript med tillägg av neurala nätverk från keras-modulen från Tensorflow för Rstudio. Dessa neurala nätverk lägger till ett exponentiellt mer komplext element i manuset, men är otroligt kraftfulla för att hitta dolda mönster i data.

dessutom ger TTR-paketet oss ett stort antal finansiella funktioner och tekniska indikatorer som kan användas för att förbättra din modell.

med allt detta sagt, spela inte med mer pengar som du har råd att förlora. Marknaderna är inte ett spel och du kan och kommer att förlora din skjorta.