Ein schrittweiser Leitfaden für den Aufbau eines Handelsroboters in einer beliebigen Programmiersprache

Von hier aus können wir beginnen zu bestimmen, wie unsere Architektur aussehen wird.

Zuerst brauchen wir eine Variable, die den Zustand angibt, in dem sich der Bot gerade befindet. Dies ist entweder BUY oder SELL. Eine boolesche Variable oder eine Aufzählung sollte für diesen Zweck gut geeignet sein.

Dann müssen wir unsere Schwellenwerte für den Kauf und Verkauf festlegen. Diese geben den prozentualen Preisrückgang oder -anstieg seit der letzten Operation an.

Wenn ich zum Beispiel den Vermögenswert für 100$ gekauft habe und sein Preis jetzt bei 102$ liegt, haben wir einen Anstieg von 2%. Wenn wir einen SELL-Schwellenwert auf einen Anstieg von 1 % gesetzt haben, wird unser Bot verkaufen, weil er einen Gewinn über unserem Schwellenwert erzielt hat.

In unserem Fall werden diese Schwellenwerte konstant sein. Wir brauchen 4 davon, zwei für jeden Zustand:

BUY Thresholds (If the Bot is in SELL State)

  • DIP_THRESHOLD : Kauft den Vermögenswert, wenn sein Preis um mehr als den Schwellenwert gefallen ist. Die Idee dahinter ist, die „buy low, sell high“-Strategie zu verfolgen, bei der man versucht, einen Vermögenswert zu kaufen, wenn er unterbewertet ist, in der Erwartung, dass sein Wert steigt, damit man verkaufen kann.
  • UPWARD_TREND_THRESHOLD : Kauft den Vermögenswert, wenn sein Preis um mehr als den Schwellenwert gestiegen ist. Dies widerspricht der „Buy low, sell high“-Philosophie, zielt aber darauf ab, zu erkennen, wann der Preis steigt, und wir wollen keine Gelegenheit zum Kauf verpassen, bevor er noch höher steigt.

Hier ist eine Illustration, die Ihnen helfen könnte:

Bild vom Autor

Wenn wir eine SELL-Operation an dem Punkt durchgeführt haben, der im obigen Bild mit „SELL“ markiert ist, haben wir jetzt unsere Schwellenwerte für die Kaufoperation festgelegt.

Wenn der Preis jemals unter die untere grüne Linie oder über die obere grüne Linie fällt, werden wir eine KAUF-Operation durchführen. In diesem Fall haben wir den oberen Schwellenwert zuerst überschritten, also haben wir auf der Grundlage von BUY_DIP_THRESHOLD gekauft.

Verkaufsschwellen (wenn sich der Bot im KAUFEN-Zustand befindet)

  • PROFIT_THRESHOLD : Verkauft den Vermögenswert, wenn sein Preis über den Schwellenwert gestiegen ist, seit wir ihn gekauft haben. Auf diese Weise machen wir Gewinn. Wir verkaufen zu einem höheren Preis als wir gekauft haben.
  • STOP_LOSS_THRESHOLD : Idealerweise sollte unser Bot nur verkaufen, wenn er einen Gewinn erzielt. Es kann aber auch sein, dass der Markt gerade stark sinkt und wir aussteigen wollen, bevor es zu spät ist, und dann zu einem niedrigeren Preis kaufen. Daher wird dieser Schwellenwert verwendet, um mit Verlust zu verkaufen, aber mit dem Ziel, einen größeren Verlust zu verhindern.

Hier ist eine Illustration:

Bild vom Autor

Hier haben wir an dem mit „BUY“ markierten Punkt gekauft. Dann haben wir unsere obere Schwelle vor der unteren erreicht, was bedeutet, dass wir unseren Vermögenswert mit Gewinn verkauft haben. Auf diese Weise verdienen Trading Bots Geld.

Jetzt haben wir schon eine Vorstellung davon, wie der Bot funktioniert, also kommen wir zum (Pseudo-)Code.

API-Hilfsfunktionen

Das erste, was unser Bot braucht, sind einige Hilfsfunktionen, um Daten von der API der Börse zu erhalten. Wir brauchen:

Das oben genannte sollte selbsterklärend sein, aber man muss sicherstellen, dass man weiß, nach welchen Währungen die API POSTabfragt, wenn man eine Kauf- oder Verkaufsoperation durchführt.

Wenn Sie z.B. USD gegen Gold handeln, können Sie oft angeben, wie viel Gold Sie kaufen oder wie viel USD Sie verkaufen wollen. Die richtige Wahl der Währungen ist sehr wichtig.

Bot-Schleifenzyklus

Nun, da wir unsere Hilfsfunktionen haben, können wir damit beginnen, den Arbeitsablauf des Bots zu definieren. Das erste, was wir brauchen, ist eine Endlosschleife mit einer gewissen Schlafzeit. Nehmen wir an, der Bot soll alle 30 Sekunden versuchen, eine Operation auszuführen. So könnte das aussehen:

Dann legen wir die Variablen und Konstanten fest, über die wir gesprochen haben, sowie den Entscheidungsfluss. Abgesehen von den API-Hilfsfunktionen würde unser Code in etwa so aussehen:

Anmerkung: Die Werte für die Schwellenwerte sind hier nur willkürliche Werte. Sie sollten Ihre eigenen entsprechend Ihrer eigenen Strategie wählen.

Wenn das oben genannte mit den Hilfsfunktionen und der Schleifenfunktion gepaart ist, die auch main sein könnte, sollten wir jetzt die Grundpfeiler eines funktionierenden Bots haben.

Bei jeder Iteration wird unser Bot seinen aktuellen Zustand (KAUFEN oder VERKAUFEN) überprüfen und versuchen, einen Handel auf der Grundlage der fest einkodierten Schwellenwerte zu tätigen. Er aktualisiert dann den KAUFEN/VERKAUFEN-Status und den letzten Preis für eine Operation.

Dann wird das Ganze noch einmal wiederholt.

Schritt 5: Polieren des Bots

Foto von Matthew Dockery

Die Grundarchitektur unseres Bots ist fertig, aber es gibt wahrscheinlich noch ein paar Dinge, die wir hinzufügen möchten.

Protokolle

Als ich zum ersten Mal eine Variante dieses Bots baute, war es für mich wichtig, dass die Aktionen des Bots sowohl im Terminal als auch in einer separaten Protokolldatei aufgezeichnet werden.

Bei jedem Schritt erstellte ich Protokolle wie:

 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

Die Protokolle, die in die Datei übertragen wurden, erhielten auch einen Zeitstempel, so dass ich, wenn ich nach einem ganzen Tag auf den Server zugriff und zum Beispiel einen Fehler fand, genau zurückverfolgen konnte, wo er passiert war, und auch alles andere herausfinden konnte, was der Bot auf dem Weg getan hatte.

Das sollte eine createLog-Funktion sein, die bei jedem Schritt aufgerufen wird. Etwa so:

Erkennen von Trends

Das Hauptziel unseres Bots sollte es sein, zu einem niedrigen Preis zu kaufen und mit Gewinn zu verkaufen. Wir haben jedoch zwei Schwellenwerte, die dieser Idee irgendwie widersprechen:UPWARD_TREND_THRESHOLD und STOP_LOSS_THRESHOLD.

Diese Schwellenwerte sagen uns angeblich, wann wir mit Verlust verkaufen oder mit einem Preisanstieg kaufen sollten. Die Idee ist, dass wir versuchen, Trends zu erkennen, die außerhalb der allgemeinen Strategie liegen, aber möglicherweise schädlich oder vorteilhaft für uns sind, so dass wir handeln sollten.

Die Art und Weise, wie ich es oben strukturiert habe, ist jedoch ziemlich begrenzt. Eine statische Momentaufnahme eines Preises ist noch lange kein Hinweis auf einen Trend.

Glücklicherweise kann man dies ohne großen Aufwand ein wenig zuverlässiger machen.

Alles, was Sie tun müssen, ist, auch mehr Preise als nur lastOpPrice zu verfolgen. Man könnte z.B. den Preis von vor 10 oder 20 Iterationen aufzeichnen und diesen mit dem aktuellen Preis anstelle von lastOpPrice vergleichen. Auf diese Weise ließe sich ein Trend wahrscheinlich besser erkennen, weil man nach schnellen Preisveränderungen sucht und nicht nach solchen, die über einen langen Zeitraum hinweg aufgetreten sind.

Datenbank?

Während der Ausführung benötigt dieser einfache Bot eigentlich keine Datenbank, da er nur sehr wenige Daten verarbeitet und alle Informationen im Speicher halten kann.

Was passiert aber, wenn der Bot beispielsweise ausfällt? Wie könnte er das lastOpPrice ermitteln, ohne dass Sie es manuell überprüfen?

Um manuelle Arbeit auf Ihrer Seite zu vermeiden, möchten Sie vielleicht eine Art leichtgewichtige Datenbank führen, um ein paar Dinge wie lastOpPrice zu verfolgen.

Auf diese Weise wird der Bot beim Start nicht die Standardwerte verwenden, sondern die gespeicherten Werte überprüfen und von dort aus weitermachen.

Abhängig davon, wie einfach du das machen willst, kannst du sogar eine „Datenbank“ aus .txt oder json Dateien in Betracht ziehen, da du sowieso nur ein paar Werte speichern wirst.

Dashboard

Foto von Luke Chesser

Wenn du die Visualisierung der Operationen deines Bots erleichtern willst, und verwalten möchten, ohne manuell am Code herumpfuschen zu müssen, sollten Sie in Erwägung ziehen, Ihren Bot mit einem Dashboard zu verbinden.

Dafür müsste Ihr Bot mit einem eigenen Webserver/einer eigenen API verbunden sein, über die Sie seine Funktionen steuern können.

Auf diese Weise könnten Sie beispielsweise Schwellenwerte leichter ändern.

Es gibt viele kostenlose Dashboard-Vorlagen, so dass Sie nicht einmal Ihre eigene erstellen müssen. Einige Beispiele finden Sie bei Start Bootstrap und Creative Tim.

Strategien anhand früherer Daten testen

Viele Börsen bieten Ihnen Zugriff auf frühere Kursdaten, und Sie können diese Daten bei Bedarf auch leicht anderswo abrufen.

Dies ist sehr nützlich, wenn Sie Ihre Strategie testen möchten, bevor Sie sie in die Tat umsetzen. Sie können eine Simulation Ihres Bots mit Daten aus der Vergangenheit und „falschem Geld“ durchführen, um zu sehen, wie gut Ihre definierten Schwellenwerte funktioniert hätten, und sie für den realen Handel anpassen.

Zusätzliche Punkte zu Schwellenwerten und Aufträgen

Es gibt ein paar Dinge, auf die Sie achten müssen, wenn Sie Aufträge erteilen.

Zuerst sollten Sie verstehen, dass es zwei Arten von Aufträgen gibt: Limitaufträge und Marktaufträge. Sie sollten sich wirklich ein wenig einlesen, wenn Sie mit den Konzepten nicht vertraut sind, aber ich gebe Ihnen hier einen grundlegenden Überblick.

Marktaufträge sind Aufträge, die zum aktuellen Marktpreis ausgeführt werden und in den meisten Fällen sofort ausgeführt werden.

Limitaufträge hingegen entstehen, wenn Sie einen Auftrag zu einem Preis erteilen, der unter dem Marktpreis (im Falle eines KAUF-Auftrags) oder über dem Marktpreis (im Falle eines VERKAUF-Auftrags) liegt. Der Vorteil von Limit-Aufträgen ist, dass Sie Marktbewegungen vorhersehen und einen Auftrag in Bezug auf die erwartete Marktentwicklung erteilen können, bevor diese Bewegung eintritt.

Außerdem fallen bei Limit-Aufträgen in der Regel niedrigere Gebühren an als bei Marktaufträgen. Das liegt daran, dass für Market Orders eine so genannte „Taker Fee“ anfällt, während für Limit Orders „Maker Fees“ anfallen.

Der Grund für die Bezeichnungen und die jeweiligen Gebühren liegt darin, dass Market Orders lediglich den aktuellen Marktpreis akzeptieren („taking“), während Limit Orders außerhalb des Marktpreises Liquidität hinzufügen und somit „einen Markt machen“, wofür sie mit niedrigeren Gebühren „belohnt“ werden.

Beachten Sie, dass der Bot in diesem Artikel am besten für Market Orders geeignet ist.

Als letztes zum Thema Gebühren: Wenn Sie Ihre PROFIT_THRESHOLD einstellen, denken Sie daran, die Gebühren zu berücksichtigen.

Um einen Gewinn zu erzielen, müssen Sie eine KAUF- und eine VERKAUFS-Operation durchführen, wodurch 2 Gebühren anfallen.

So müssen Sie sicherstellen, dass Sie nur dann mit Gewinn verkaufen, wenn Sie in der Lage sind, zumindest Ihre Gebühren zu decken, da Sie sonst tatsächlich einen Verlust machen werden.

Angenommen, die Gebühren wären gleichbleibend, dann hätten Sie, wenn Sie einen Vermögenswert für 100,00 $ kaufen und eine Gebühr von 0,50 $ erheben und ihn dann für 100,75 $ verkaufen, wiederum mit einer Gebühr von 0,50 $, einen Bruttogewinn von 0,75 % erzielt, aber in Wirklichkeit hätten Sie einen Nettoverlust von 0,25 %.

Stellen Sie sich nun vor, Ihr Bot würde immer mit einem Nettoverlust verkaufen. Du würdest ziemlich schnell eine Menge Geld verlieren…

Abschließende Bemerkungen

Das war’s mit unserem Bot. Ich hoffe, dieses Tutorial war nützlich.

Die Idee war, sich auf alle Konzepte zu konzentrieren, die man wissen muss, um einen Trading-Bot zu bauen, selbst wenn man noch nie gehandelt hat, und nicht, wie man programmiert.

Es wird davon ausgegangen, dass alle Leser in der Lage sind, HTTP-Anfragen in der Sprache ihrer Wahl zu stellen, so dass es am besten wäre, sich auf andere Aspekte zu konzentrieren.

Es ist das erste Tutorial, das ich auf diese Weise schreibe (pseudocodebasiert), also lassen Sie mich bitte wissen, was Sie von dem Konzept halten.

Danke fürs Lesen! Und wenn du denkst, dass dieser Artikel nützlich war, kannst du mich gerne mit ein paar Klatschen unterstützen 👏👏.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.