Articles

Bouw een cryptogeld handelsbot met R

Foto van Branko Stancevic op Unsplash

** merk op dat de API gebruikt in deze tutorial is niet langer in gebruik. Dit artikel moet ter illustratie worden gelezen met dat in het achterhoofd.

het verstand van de handelaar is de zwakke schakel in elke handelsstrategie of-plan. Effectieve uitvoering van de handel vereist menselijke input die in de tegenovergestelde richting van onze instincten lopen. We moeten kopen als ons reptielenbrein wil verkopen. We moeten verkopen als we meer willen kopen.

Het is nog moeilijker om cryptocurrencies te verhandelen met een kritische grondwet. De jonge en opkomende markten worden overspoeld met” pompgroepen ” die intense FOMO (angst om iets te missen) bevorderen die de prijzen torenhoog drijven voordat ze met hun lijf weer naar de aarde worden geslingerd. Veel beginnende beleggers handelen ook op deze markten, beleggers die mogelijk nooit een handel op de NYSE zijn aangegaan. Op elke handel, er is een maker en een nemer, en sluwe crypto beleggers vinden het gemakkelijk om te profiteren van de beginners overstromingen van de ruimte.

om mijn emoties los te maken van crypto trading en om te profiteren van markten die 24/7 open zijn, heb ik besloten om een eenvoudige trading bot te bouwen die een eenvoudige strategie zou volgen en transacties uit te voeren terwijl ik sliep.

veel “bot handelaren” zoals ze worden genoemd, gebruiken de programmeertaal Python om deze transacties uit te voeren. Als je naar google, “crypto trading bot,” zou je links naar Python code in verschillende GitHub repositories te vinden.

Ik ben een Data scientist, en R is mijn belangrijkste tool. Ik zocht naar een fatsoenlijke tutorial over het gebruik van de R taal om een trading bot te bouwen, maar vond niets. Ik was ingesteld op het bouwen van mijn eigen pakket om te communiceren met de GDAX API toen ik vond het pakket rgdax, dat is een R wrapper voor de GDAX API. Het volgende is een gids voor het samenstellen van een trading bot die u kunt gebruiken om uw eigen strategieën op te bouwen.

In een notendop, zullen we de handel in De Ethereum-USD paar op de GDAX uitwisseling via hun API via de rgdax wrapper. Ik hou van de handel dit paar omdat Ethereum (ETH) is meestal in een bullish houding, waardoor deze strategie te schitteren.

Opmerking: Dit is een super-simplistische strat die slechts een paar dollar zal verdienen in een bull market. Voor alle doeleinden, gebruik dit als een basis voor het bouwen van uw eigen strat.

We zullen kopen wanneer een combinatie van Relative Strength Index (RSI) indicatoren wijzen op een tijdelijk oversold markt, met de aanname dat de bulls de prijzen opnieuw zullen opdrijven en we winst kunnen maken.

zodra we kopen, zal de bot drie limietverkooporders invoeren: één met 1% winst, een andere met 4% winst en de laatste met 7% winst. Dit stelt ons in staat om snel fondsen vrij te maken om een andere handel aan te gaan met de 1st two orders, en de 7% order versterkt onze algemene winstgevendheid.

Software

We zullen Rstudio en Windows task scheduler gebruiken om onze R-code regelmatig (elke 10 minuten) uit te voeren. U hebt een GDAX-account nodig om bestellingen te verzenden en een Gmail-account om handelsberichten te ontvangen.

ons proces

deel 1: aanroep bibliotheken en bouw functies

we beginnen met het aanroepen van verschillende bibliotheken:

Het pakket rgdax biedt de interface aan de GDAX api, mailR is gebruikt voor het verzenden van ons e-mail updates met een Gmail-account, stringi helpt ons bij het parseren van nummers van JSON en TTR stelt ons in staat om het uitvoeren van technische indicator berekeningen.

functie: curr_bal_usd & curr_bal_eth

u gebruikt uw api-sleutel, geheim en wachtzin die worden gegenereerd vanuit GDAX in de API-sectie. Deze functies query uw GDAX account voor de meest recente balans die we zullen gebruiken herhaaldelijk in ons handelen:

Functie: RSI

We zullen gebruik maken van de RSI of de Relatieve Sterkte Index als onze belangrijkste indicatoren voor deze strategie. Curr_rsi14_api trekt in de waarde van de meest recente 14 periode RSI, met behulp van 15 minuten kaarsen. RSI14_api_less_one enzovoort trek de RSI in voor de perioden vóór:

Function: bid & ask

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

Function: usd_hold, eth_hold en cancel_orders

om limietorders op een iteratieve manier te kunnen plaatsen, moeten we in staat zijn om de huidige status van onze reeds geplaatste orders in te trekken en om orders te annuleren die te ver in het orderboek zijn verplaatst om te worden ingevuld. We zullen de “holds” functie van het rgdax pakket gebruiken om dit te doen voor de eerste, en “cancel_order” voor de laatste:

functie: buy_exe

Dit is de big-daddy functie die daadwerkelijk onze limietorders uitvoert. Er zijn verschillende stappen die deze functie werkt door middel van.

1. Order_size functie berekent hoeveel eth we kunnen kopen, omdat we elke keer zoveel mogelijk willen kopen, minder dan 0,005 eth om rekening te houden met afrondingsfouten

2. Onze WHILE-functie plaatst limietorders terwijl we nog steeds nul ETH hebben.

3. Een bestelling wordt toegevoegd aan de bod () prijs, het systeem slaapt 17 seconden om de bestelling te vullen, en dan controleert om te zien of de bestelling is gevuld. Zo niet, dan herhaalt het proces zich.

Deel 2: Variabelen Opslaan

Naast, moeten we opslaan in ons RSI-indicator variabelen als objecten, zodat de handel loop sneller werkt en zodat we niet meer dan de snelheidslimiet van de API:

Deel 3: de Handel Lus

tot nu toe, we zijn net bezig met de voorbereiding van onze functies en variabelen in de opdracht tot het uitvoeren van de handel loop. Het volgende is een verbale wandeling door de werkelijke trading loop:

als het huidige saldo van onze rekening in USD groter is dan $20, zullen we de loop starten. Vervolgens, als de huidige RSI is groter dan of gelijk aan 30 en de RSI in de vorige periode was minder dan of gelijk aan 30 en de RSI in de vorige 3 periodes was minder dan 30 ten minste een keer, dan kopen we zo veel ETH als we kunnen met de huidige USD saldo.

vervolgens slaan we deze koopprijs op in een CSV-bestand.

vervolgens sturen we een e-mail naar onszelf om ons te waarschuwen over de koopactie.

de lus drukt dan “kopen” af zodat we dat kunnen volgen in ons logbestand.

het systeem slaapt dan 3 seconden.

Nu, we voeren 3 gelaagde beperken verkopen orders om winst te nemen.

onze eerste limit sell order neemt winst tegen een winst van 1%, de volgende winst tegen een winst van 4%, en de laatste winst tegen een winst van 7% :

Dat is het, dat is het hele script.

Deel 4: met behulp van Windows Task Scheduler om het Script

te automatiseren het hele doel van deze bot is om de menselijke fout uit de handel te nemen, en om ons in staat te stellen trades in te voeren zonder aanwezig te zijn op een scherm. We zullen Windows Task Scheduler gebruiken om dit te bereiken.

Schema script met Rstudio addin

maak Gebruik van de handige Rstudio voeg in een eenvoudig schema van het script:

het Wijzigen van de geplande taak met Taakplanner

ga naar de taak is gemaakt door de Rstudio toevoegen in en stel de trigger om het vuur op het interval dat u wenst. In mijn geval kies ik elke 10 minuten voor onbepaalde tijd.

Houd uw taak met het logbestand

elke keer dat uw script wordt uitgevoerd, maakt het een item in een tekstlogbestand, waarmee u fouten in uw script kunt oplossen:

u kunt zien hoe de “start log entry” en “end log entry” print functie handig is om onze items te scheiden.

Maak het uw eigen

u kunt dit script zo eenvoudig of zo complex maken als u wilt. Ik werk aan het verbeteren van dit script met de toevoeging van neurale netwerken van de keras module van Tensorflow voor Rstudio. Deze neurale netwerken voegen een exponentieel complexer element toe aan het script, maar zijn ongelooflijk krachtig voor het vinden van verborgen patronen in de gegevens.

daarnaast biedt het TTR-pakket ons een groot aantal financiële functies en technische indicatoren die kunnen worden gebruikt om uw model te verbeteren.

met dit alles gezegd, speel niet met meer geld dat je kunt veroorloven om te verliezen. De markten zijn geen spel en je kunt en zal je shirt verliezen.