Een stap-voor-stap handleiding voor het bouwen van een Trading Bot in elke programmeertaal

Van hieruit kunnen we beginnen te bepalen hoe onze architectuur eruit zal zien.

Eerst hebben we een variabele nodig om aan te geven in welke toestand de Bot zich momenteel bevindt. Dit is ofwel TE KOOP of TE VERKOPEN. Een booleaans of enum zou hier goed voor geschikt moeten zijn.

Dan moeten we onze drempels voor kopen en verkopen instellen. Deze geven aan met welk percentage de prijs is gedaald of gestegen sinds de laatste transactie.

Bijv. als ik de activa kocht op 100$, en de prijs is nu op 102$, hebben we een stijging van 2%. Als we een SELL drempel ingesteld op een 1% stijging, zal onze bot dan verkopen, omdat het een winst heeft gemaakt boven onze drempel.

In ons geval, deze drempels zullen constanten zijn. We hebben er 4 nodig, twee voor elke status:

BUY Thresholds (Als de bot in de status SELL staat)

  • DIP_THRESHOLD : Koopt het activum als de prijs met meer dan de drempel is gedaald. Het idee hiervan is om de “koop laag, verkoop hoog” strategie te volgen, waar u probeert een actief te kopen wanneer het ondergewaardeerd is, in de verwachting dat de waarde zal stijgen zodat u kunt verkopen.
  • UPWARD_TREND_THRESHOLD : Koopt het actief als de prijs met meer dan de drempel is gestegen. Dit gaat in tegen de “laag kopen, hoog verkopen” filosofie, maar is bedoeld om te identificeren wanneer de prijs omhoog gaat en we willen geen kans missen om te kopen voordat de prijs nog hoger gaat.

Hier volgt een illustratie die kan helpen:

Image By Author

Als we een SELL operatie hebben uitgevoerd op het punt gemarkeerd met “SELL” in de afbeelding hierboven, hebben we nu onze drempels ingesteld voor de koop operatie.

Als de koers ooit onder de onderste groene lijn of boven de bovenste groene lijn komt, voeren we een KOOP-bewerking uit. In dit geval hebben we eerst de bovenste drempel overschreden, dus we hebben gekocht op basis van de BUY_DIP_THRESHOLD.

VerkOP Drempels (Als de Bot in de KOOP Staat is)

  • PROFIT_THRESHOLD : Verkoopt het actief als de prijs is gestegen boven de drempel sinds we het kochten. Dit is hoe we winst maken. We verkopen tegen een hogere prijs dan we gekocht hebben.
  • STOP_LOSS_THRESHOLD : Idealiter zouden we willen dat onze bot alleen verkoopt wanneer hij winst maakt. Maar misschien daalt de markt net aanzienlijk en willen we eruit voor het te laat is en dan kopen tegen een lagere prijs. Daarom wordt deze drempel gebruikt om met verlies te verkopen, maar met het doel om een groter verlies te voorkomen.

Hier volgt een illustratie:

Image By Author

Hier hebben we gekocht op het punt gemarkeerd met “BUY”. Vervolgens hebben we onze bovendrempel bereikt vóór de onderdrempel, wat betekent dat we onze activa met winst hebben verkocht. Dit is hoe trading bots geld verdienen.

Nu hebben we al een basis idee van hoe de bot werkt, dus laten we ons eens verdiepen in wat (pseudo)code.

API Helper Functions

Het eerste wat onze bot nodig heeft zijn een aantal helper functies om gegevens uit de API van de beurs te krijgen. We hebben nodig:

Het bovenstaande zou voor zichzelf moeten spreken, maar je moet ervoor zorgen dat je weet naar welke valuta de API POSTverzoeken vraagt wanneer je een koop- of verkoopoperatie uitvoert.

Vaak, wanneer u bijvoorbeeld in USD voor Goud handelt, kunt u opgeven hoeveel Goud u wilt kopen, of hoeveel USD u wilt verkopen. Het is erg belangrijk om de valuta goed te kiezen.

Bot Loop Cycle

Nu we onze helper-functies hebben, laten we beginnen met het definiëren van de workflow van de bot. Het eerste wat we nodig hebben is een oneindige lus met wat slaap tijd. Laten we zeggen dat we willen dat de bot elke 30 seconden een operatie uitvoert. Zo zou dat eruit kunnen zien:

Daarna kunnen we de variabelen en constanten instellen waar we het over hebben gehad, evenals de beslissingsstroom. Afgezien van de API-helpfuncties zou onze code ongeveer als volgt eindigen:

Note: de waarden voor de drempels hier zijn slechts arbitraire waarden. U moet uw eigen waarden kiezen op basis van uw eigen strategie.

Als het bovenstaande wordt gekoppeld aan de helper-functies en de loop-functie, die ook main kan zijn, zouden we nu de basispijlers van een werkende bot moeten hebben.

Bij elke iteratie controleert onze bot zijn huidige status (KOOP of VERKOOP) en probeert een transactie uit te voeren op basis van de hard gecodeerde drempels. Het zal dan de BUY/SELL status en de laatste prijs voor een transactie bijwerken.

Dan doet het het allemaal opnieuw.

Stap 5: de bot bijschaven

Foto door Matthew Dockery

De basisarchitectuur van onze bot is klaar, maar er zijn waarschijnlijk nog een paar dingen die we willen overwegen toe te voegen.

Logs

Toen ik voor het eerst een variant van deze bot bouwde, was het voor mij essentieel dat de acties van de bot voortdurend werden gelogd, zowel naar de terminal als naar een apart logbestand.

Bij elke stap maakte ik logs als:

 USD Balance = 22.15$
Bought 0.002 BTC for 22.15 USD
Last Operation Price updated to 11,171.40 (BTC/USD)
Could not perform SELL operation - Insufficient balance

De logs die naar het bestand gingen, zouden ook een tijdstempel krijgen, dus als ik de server na een hele dag benaderde en bijvoorbeeld een fout vond, kon ik het precies terugleiden naar waar het gebeurde, en ook alles achterhalen wat de bot onderweg deed.

Dit zou een kwestie moeten zijn van het opzetten van een createLog-functie die bij elke stap wordt aangeroepen. Zoiets als dit:

Trends vaststellen

Het hoofddoel van onze bot moet zijn om tegen een lage prijs te kopen en met winst te verkopen. We hebben echter twee drempels die dit idee een beetje tegenspreken: UPWARD_TREND_THRESHOLD en STOP_LOSS_THRESHOLD.

Deze drempels zouden ons moeten vertellen wanneer we met verlies moeten verkopen of bij een prijsstijging moeten kopen. Het idee is dat we trends proberen te identificeren die buiten de algemene strategie vallen, maar die schadelijk of gunstig voor ons kunnen zijn, zodat we moeten handelen.

De manier waarop ik het hierboven heb gestructureerd, is echter vrij beperkt. Een statische momentopname van een koers is verre van een indicatie van een trend.

Gelukkig kun je dit zonder veel gedoe iets betrouwbaarder maken.

Het enige wat je hoeft te doen is ook meer koersen bijhouden dan alleen lastOpPrice . Je zou bijvoorbeeld de prijs van 10 of 20 iteraties geleden kunnen bijhouden, en die vergelijken met de huidige prijs in plaats van lastOpPrice . Dit zou waarschijnlijk beter zijn in het identificeren van een trend, omdat het controleert op snelle verschuivingen in de prijs in plaats van een verschuiving die zich over een lange periode heeft voorgedaan.

Database?

Terwijl het draait, heeft deze eenvoudige bot eigenlijk geen database nodig, omdat het zeer weinig gegevens verwerkt en alle informatie in het geheugen kan bewaren.

Wat gebeurt er echter als de bot faalt, bijvoorbeeld? Hoe kan het de lastOpPrice bepalen zonder dat u het handmatig controleert?

Om handmatig werk aan uw kant te voorkomen, wilt u misschien een soort lichtgewicht database bijhouden om een paar dingen bij te houden, zoals lastOpPrice .

Op deze manier, wanneer de bot opstart, in plaats van de standaard waarden te gebruiken, zal het de opgeslagen waarden controleren en van daaruit verder gaan.

Afhankelijk van hoe eenvoudig je dit wilt maken, kun je zelfs een “database” van .txt of json bestanden overwegen, omdat je misschien toch maar een paar waarden opslaat.

Dashboard

Photo by Luke Chesser

Als je de visualisatie van de activiteiten van je bot wilt vergemakkelijken, en beheren zonder handmatig aan de code te hoeven sleutelen, kun je overwegen om je bot op een dashboard aan te sluiten.

Dit zou vereisen dat uw bot worden aangesloten op een webserver/API van zijn eigen die u toelaat om zijn functionaliteit te controleren.

Op deze manier kunt u drempels gemakkelijker veranderen, bijvoorbeeld.

Er zijn veel gratis dashboard templates beschikbaar, zodat u niet eens hoeft te maken van uw eigen. Kijk op Start Bootstrap en Creative Tim voor enkele voorbeelden.

Testen van strategieën op historische gegevens

Veel beurzen bieden u toegang tot historische koersgegevens, maar u kunt die gegevens meestal ook gemakkelijk elders verkrijgen als dat nodig is.

Dit is erg handig als u uw strategie wilt testen voordat u deze in actie brengt. U kunt een simulatie van uw bot uitvoeren met gegevens uit het verleden en “nepgeld” om te zien hoe goed uw gedefinieerde drempels zouden hebben gewerkt en ze aan te passen voor de echte deal.

Aanvullende punten over drempels en orders

Er zijn een paar dingen waar u op moet letten bij het plaatsen van orders.

Ten eerste moet u begrijpen dat er twee soorten orders zijn: limietorders en marktorders. Je moet echt een beetje lezen in deze als je niet bekend bent met de concepten, maar ik geef je een basisoverzicht hier.

Markt orders zijn orders die worden uitgevoerd tegen de huidige marktprijs, effectief uitvoeren onmiddellijk in de meeste gevallen.

Limiet orders, aan de andere kant, gebeurt wanneer u een order plaatst voor een prijs lager dan de marktprijs (in het geval van een BUY-order) of hoger dan de marktprijs (in het geval van een SELL-order). Het voordeel van limietorders is dat u kunt anticiperen op marktbewegingen en een order kunt plaatsen waarvan u verwacht dat de markt daar naar toe zal gaan voordat een dergelijke beweging plaatsvindt.

Bovendien zijn limietorders gewoonlijk onderhevig aan lagere kosten dan marktorders. Dit komt omdat marktorders onderworpen zijn aan wat gewoonlijk een “taker fee” wordt genoemd, terwijl limietorders onderworpen zijn aan “maker fees”.

De reden voor de namen en hun respectievelijke fees is dat marktorders slechts de huidige marktprijs accepteren (“nemen”), terwijl limietorders buiten de marktprijs liquiditeit toevoegen en dus “een markt maken”, waarvoor zij worden “beloond” met lagere fees.

Merk op dat de bot in dit artikel het meest geschikt is voor markt orders.

Tot slot, over het onderwerp van de vergoedingen, bij het instellen van uw PROFIT_THRESHOLD , vergeet niet om vergoedingen in aanmerking te nemen.

Om winst te maken, moet u een KOOP- en vervolgens een VERKOOP-operatie uitvoeren, waardoor u onderworpen bent aan 2 kosten.

Zo moet u ervoor zorgen dat u alleen met winst verkoopt wanneer u in staat bent om ten minste uw kosten te dekken, anders zult u in feite verlies maken.

Denk er eens over na, in de veronderstelling dat de vergoedingen vast zijn, als u een actief koopt voor 100,00$, met een vergoeding van 0,50$, en het dan verkoopt voor 100,75$, opnieuw met een vergoeding van 0,50$, zou u een brutowinst van 0,75% hebben gemaakt, maar in werkelijkheid zou u een nettoverlies hebben van 0,25%.

Stel u nu eens voor dat uw bot altijd voor een nettoverlies zou verkopen. Je zou vrij snel veel geld verliezen…

Definitieve opmerkingen

Dat is het voor onze bot. Ik hoop dat deze tutorial nuttig was.

Het idee was om je te richten op alle concepten die je moet weten om een trading bot te bouwen, zelfs als je nog nooit hebt gehandeld, niet om je te leren programmeren.

De veronderstelling is dat alle lezers in staat zijn om HTTP requests te doen in de taal van hun keuze, dus het zou het beste zijn om te focussen op andere aspecten.

Het is de eerste tutorial die ik ooit op deze manier schrijf (gebaseerd op pseudocode), dus laat me alsjeblieft weten wat je van het concept vond.

Dank voor het lezen! En als je denkt dat dit artikel nuttig was, voel je vrij om me te steunen met wat klappen 👏👏.

Geef een antwoord

Het e-mailadres wordt niet gepubliceerd.