Articles

Byg en Cryptocurrency Trading Bot med R

foto af Branko Stancevic på Unsplash

** Bemærk, at API ‘ en, der bruges i denne tutorial, ikke længere er i brug. Denne artikel bør læses til illustrative formål med det i tankerne.

den erhvervsdrivendes sind er det svage led i enhver handelsstrategi eller plan. Effektiv handelsudførelse har brug for menneskelige input, der kører i den modsatte retning af vores instinkter. Vi bør købe, når vores reptilhjerne ønsker at sælge. Vi bør sælge, når vores tarm vil have os til at købe mere.

det er endnu sværere at handle cryptocurrencies med en kritisk forfatning. De unge og nye markeder er oversvømmet med” pumpegrupper”, der fremmer intens FOMO (frygt for at gå glip af), som driver priserne skyhøje, før de smækker dem tilbage til jorden. Mange uerfarne investorer handler også på disse markeder, investorer, der muligvis aldrig indgik en handel på NYSE. På hver handel er der en maker og en taker, og kloge kryptoinvestorer finder det nemt at drage fordel af de nybegyndere, der oversvømmer rummet.

for at frigøre mine følelser fra kryptohandel og drage fordel af markeder, der er åbne 24/7, besluttede jeg at opbygge en simpel handelsbot, der ville følge en simpel strategi og udføre handler, mens jeg sov.

mange “bothandlere”, som de kaldes, bruger Python-programmeringssproget til at udføre disse handler. Hvis du skulle google, “crypto trading bot”, ville du finde links til Python-kode i forskellige Github-arkiver.

Jeg er dataforsker, og R er mit vigtigste værktøj. Jeg søgte efter en anstændig tutorial om at bruge R-sproget til at opbygge en handelsbot, men fandt intet. Jeg var indstillet på at bygge min egen pakke til at interface med API ‘en, da jeg fandt pakken rgdaks, som er en r-indpakning til API’ en. Følgende er en guide til at sammensætte en handelsbot, som du kan bruge til at opbygge dine egne strategier.

i en nøddeskal handler vi Ethereum — USD-paret på GDAKS-børsen via deres API via rgdaks-indpakningen. Jeg kan godt lide at handle dette par, fordi Ethereum (ETH) typisk er i en bullish holdning, som gør det muligt for denne strategi at skinne.

Bemærk: Dette er en super-forenklet strat, der kun tjener et par bukke på et tyremarked. Til alle formål, bruge dette som en base for at opbygge din egen strat.

Vi vil købe, når en kombination af Relative styrkeindeks (RSI) indikatorer peger på et midlertidigt oversolgt marked med den antagelse, at tyre igen vil skubbe priserne op, og vi kan samle overskud.

når vi køber, indtaster bot tre limit-salgsordrer: en med 1% fortjeneste, en anden med 4% fortjeneste og den sidste med 7% fortjeneste. Dette giver os mulighed for hurtigt at frigøre midler til at gå ind i en anden handel med de 1.to ordrer, og 7% – ordren styrker vores samlede rentabilitet.

vi vil bruge RStudio og vinduer task scheduler til at udføre vores R-kode på en regelmæssig basis (hver 10 minutter). Du skal bruge en Gmail-konto for at sende ordrer til og en Gmail-konto for at modtage handelsmeddelelser.

vores proces

del 1: Ring biblioteker og byg funktioner

vi begynder med at ringe til flere biblioteker:

Pakken rgdax giver interface til GDAX api, mailR bruges til at sende os en e-mail-opdateringer med en Gmail-konto, stringi hjælper os med at fortolke numre fra JSON og TTR giver os mulighed for at udføre tekniske indikator beregninger.

funktion: curr_bal_usd& curr_bal_eth

du vil bruge din api-nøgle, hemmelighed og adgangssætning, der genereres fra GD i API-sektionen. Disse funktioner forespørger din GDAK-konto for den seneste saldo, som vi vil bruge gentagne gange i vores handel:

funktion: RSI

Vi bruger RSI eller relativ styrkeindeks som vores hovedindikatorer for denne strategi. Curr_rsi14_api trækker i værdien af den seneste 14 periode RSI, ved hjælp af 15 minutters stearinlys. Rsi14_api_less_one og så videre træk i RSI for perioderne før:

Function: bid & ask

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

Function: usd_hold, eth_hold og cancel_orders

for at vi kan placere limit-ordrer på en iterativ måde, skal vi være i stand til at trække den aktuelle status for vores ordrer, der allerede er placeret, og være i stand til at annullere ordrer, der er flyttet for langt ned i ordrebogen, der skal udfyldes. Vi bruger funktionen “holder” i rgdaks-pakken til at gøre dette for førstnævnte og “cancel_order” for sidstnævnte:

funktion: dette er den big-daddy funktion, der faktisk udfører vores limit ordrer. Der er flere trin, som denne funktion fungerer igennem.

1. Funktionen order_størrelse beregner, hvor meget eth vi kan købe, fordi vi vil købe så meget som muligt hver gang, mindre 0,005 ETH for at tage højde for afrundingsfejl

2. Vores mens funktion placerer grænseordrer, mens vi stadig har nul ETH.

3. En ordre tilføjes til budprisen (), systemet sover 17 sekunder for at tillade ordren at blive udfyldt, og kontrollerer derefter for at se, om ordren blev udfyldt. Hvis det ikke var, gentages processen.

Del 2: Gem variabler

Dernæst skal vi gemme nogle af vores vores RSI-indikatorvariabler som objekter, så handelssløjfen løber hurtigere, og så vi ikke overskrider API ‘ ens hastighedsgrænse:

del 3: trading loop udfører

indtil nu har vi lige forberedt vores funktioner og variabler for at udføre handelssløjfen. Følgende er en verbal gennemgang af den faktiske handelssløjfe:

Hvis den aktuelle saldo på vores konto i USD er større end $20, starter vi sløjfen. Dernæst, hvis den nuværende RSI er større end eller lig med 30, og RSI i den foregående periode var mindre end eller lig med 30, og RSI i de foregående 3 perioder var mindre end 30 mindst en gang, så køber vi så meget ETH som muligt med den nuværende USD-saldo.

dernæst gemmer vi denne købspris til en CSV-fil.

derefter sender vi en e-mail til os selv for at advare os om købshandlingen.

sløjfen udskriver derefter “køb”, så vi kan spore det i vores logfil.

systemet sover derefter i 3 sekunder.

nu, vi indtaster 3 differentieret grænse sælge ordrer til at tage overskud.

vores første limit-salgsordre tager fortjeneste med en gevinst på 1%, Den næste tager fortjeneste med en gevinst på 4%, og den sidste tager fortjeneste med en gevinst på 7% :

det er det, det er hele scriptet.

Del 4: Brug af vinduer Task Scheduler til at automatisere scriptet

hele formålet med denne bot er at tage den menneskelige fejl ud af handelen og give os mulighed for at gå ind i handler uden at skulle være til stede på en skærm. Vi vil bruge vinduer Task Scheduler til at opnå dette.

Schedule script med Rstudio addin

brug den praktiske RStudio Tilføj til nemt at planlægge scriptet:

rediger den planlagte opgave med Task Scheduler

Naviger til opgaven oprettet af RStudio tilføj i og juster udløseren til brand i det interval, du ønsker. I mit tilfælde vælger jeg hvert 10. minut på ubestemt tid.

hold øje med din opgave med logfilen

hver gang dit script kører, vil det lave en post i en tekstlogfil, som giver dig mulighed for at fejlfinde fejl i dit script:

Du kan se, hvordan udskrivningsfunktionen”start log post “og” end log post “er praktisk til at adskille vores poster.

gør det til dit eget

Du kan ændre dette script for at gøre det så enkelt eller så komplekst, som du vil. Jeg arbejder på at forbedre dette script med tilføjelsen af neurale netværk fra Keras-modulet fra Tensorstrøm til Rstudio. Disse neurale netværk tilføjer et eksponentielt mere komplekst element til scriptet, men er utroligt kraftfulde til at finde skjulte mønstre i dataene.

derudover giver TTR-pakken os et stort antal økonomiske funktioner og tekniske indikatorer, der kan bruges til at forbedre din model.

Når alt dette er sagt, skal du ikke lege med flere penge, som du har råd til at tabe. Markederne er ikke et spil, og du kan og vil miste din skjorte.