Wenn Sie mehrjährige Erfahrung im Java-Ökosystem haben und diese Erfahrung mit der Community teilen möchten (und natürlich für Ihre Arbeit bezahlt werden), besuchen Sie bitte die Seite "Kontakt".
1. Übersicht
Ein Trading-Bot ist ein Computerprogramm, das ohne menschliches Eingreifen automatisch Aufträge an den Markt platzieren oder ersetzen kann.
In diesem Tutorial verwenden wir Cassandre, um einen einfachen Krypto-Trading-Bot zu erstellen, der Positionen generiert, wenn wir es für den besten Moment halten.
2. Überprüfung von Bots
Handel bedeutet „einen Gegenstand gegen einen anderen austauschen”.
Auf den Finanzmärkten kauft man Aktien, Futures, Optionen, Swaps, Anleihen oder in unserem Fall Kryptowährungen. Die Idee ist, Kryptowährungen zu einem bestimmten Preis zu kaufen und zu einem höheren Preis zu verkaufen, um einen Gewinn zu erzielen (auch wenn wir noch Geld verdienen können, wenn der Preis knapp wird).
Wir werden den Sandbox-Swap verwenden; Sandbox ist ein virtuelles System, in dem wir "gefälschte" Assets haben, in denen wir Bestellungen aufgeben und Ticker empfangen können.
Sehen wir uns zunächst an, was wir tun werden:
– Fügen Sie Cassandre Spring Boot Starter zu unserem Projekt hinzu – Fügen Sie die erforderliche Konfiguration hinzu, um eine Verbindung zur Börse herzustellen – Erstellen Sie eine Strategie: – Erhalten Sie Ticker von der Börse – Wählen Sie den Kaufzeitpunkt – Wenn es Zeit für den Kauf ist, prüfen Sie, ob wir über genügend Assets verfügen und erstellen Sie ein Artikel – Zeigen Sie Protokolle an, um zu sehen, wann Positionen offen / geschlossen sind und welchen Gewinn wir gemacht haben
3. Abhängigkeiten von Maven
Beginnen wir mit dem Hinzufügen der erforderlichen Abhängigkeiten zu unserer pom. xml, Cassandres Frühlingsstiefel zuerst:
Cassandre verlässt sich auf XChange, um sich mit Krypto-Börsen zu verbinden. Für dieses Tutorial verwenden wir die Kucoin XChange-Bibliothek:
Wir verwenden hsqld auch zum Speichern von Daten:
Um unseren Trading-Bot mit historischen Daten zu testen, haben wir auch unseren Cassandre Boot Spring Boot zum Testen hinzugefügt:
4. Konfiguration
Bearbeiten wir create application.properties, um unsere Konfiguration festzulegen:
Die Konfiguration hat vier Kategorien:
Exchange-Setup: Exchange-Anmeldeinformationen, die wir für uns eingerichtet haben, mit einem bestehenden Sandbox-Konto in Kucoin verknüpfen. Modi: Die Modi, die wir verwenden möchten. In unserem Fall bitten wir Cassandre, die Sandbox-Daten zu verwenden. Exchange API-Aufrufraten: Gibt die Geschwindigkeit an, mit der wir Daten (Konten, Aufträge, Transaktionen und Ticker) von der Börse abrufen möchten. Achtung; alle Börsen haben Höchstkurse, um sie zu benennen Datenbankkonfiguration: Cassandre verwendet eine Datenbank, um Positionen, Aufträge und Transaktionen zu speichern. Für dieses Tutorial verwenden wir eine einfache speicherinterne hsqld-Datenbank. Natürlich sollten wir in der Produktion eine persistente Datenbank verwenden
Jetzt erstellen wir dieselbe Datei in application.properties in unserem Testverzeichnis, ändern jedoch die Modi cassandre.trading.bot.exchange.modes. dry to real, weil wir beim Testen keine echten Bestellungen an die Sandbox senden wollen. Wir wollen sie nur simulieren.
5. Strategie
Eine Handelsstrategie ist ein fester Plan, der darauf ausgelegt ist, eine profitable Rendite zu erzielen; Wir können unsere erstellen, indem wir eine Java-Klasse hinzufügen, die mit @ CassandreStrategy annotiert ist, und BasicCassandreStrategy erweitern.
Lassen Sie uns unsere Strategieklasse in MyFirstStrategy erstellen. Java:
Die Implementierung von BasicCassandreStrategy zwingt uns, die beiden Methoden getRequestedCurrencyPairs() und getTradeAccount() zu implementieren:
In getRequestedCurrencyPairs () müssen wir eine Liste der Währungspaaraktualisierungen zurückgeben, die wir von der Börse erhalten möchten. Ein Währungspaar ist eine Notierung von zwei verschiedenen Währungen, wobei der Wert einer Währung gegenüber der anderen notiert wird. In unserem Beispiel wollen wir mit BTC / USDT arbeiten.
Um es verständlicher zu machen, können wir den Ticker mit dem folgenden curl-Befehl manuell abrufen:
Wir bekommen so etwas:
Der Preiswert gibt an, dass 1 BTC 57.263,3 USDT beträgt.
Eine andere Methode, die wir implementieren müssen, ist getTradeAccount (). Wir haben normalerweise mehrere Konten an der Börse und Cassandre muss wissen, welches Konto ein Handelskonto ist. Zu diesem Zweck müssen wir die Methode getTradeAccount() implementieren, die uns die Liste der Konten liefert, die wir als Parameter haben, und von dieser Liste geben wir das Konto zurück, das wir für den Handel verwenden möchten.
In unserem Beispiel heißt unser Börsenhandelskonto "Trade", also geben wir es einfach zurück.
6. Erstellen Sie einen Artikel
Um über neue Daten informiert zu werden, können wir die folgenden BasicCassandreStrategy-Methoden überschreiben:
onAccountUpdate () um Updates zum Konto zu erhalten onTickerUpdate () um neue Ticker zu erhalten onOrderUpdate () um Updates zu Orders zu erhalten onTradeUpdate ()) um Updates zu Transaktionen zu erhalten onPositionUpdate () um Updates zu Positionen zu erhalten onPositionStatusUpdate () um Updates zum Positionsstatus zu erhalten Änderungen
Für dieses Tutorial implementieren wir einen dummen Algorithmus: Wir überprüfen jeden neuen Ticker, den wir erhalten. Wenn 1 BTC unter 56.000 T $ fällt, denken wir, dass es an der Zeit ist zu kaufen.
Um die Berechnung von Gewinnen, Orders, Trades und Closings zu erleichtern, bietet Cassandre eine Klasse für die automatisierte Positionsverwaltung.
Um es zu verwenden, erstellen Sie zunächst Regeln für die Position mit der Klasse PositionRulesDTO, zum Beispiel:
Als Nächstes erstellen wir ein Element mit dieser Regel:
An diesem Punkt wird Cassandre eine Kauforder von 0,01 BTC erstellen. Der Positionsstatus ist OFFEN und wenn alle relevanten Transaktionen eingegangen sind, ändert sich der Status in OFFEN. Von nun an berechnet Cassandre für jeden erhaltenen Ticker automatisch mit dem neuen Preis, ob das Schließen einer Position zu diesem Preis eine unserer beiden Regeln auslösen würde (4% Stop Gain oder 25% Stop Loss).
Wenn eine Regel ausgelöst wird, erstellt Cassandre automatisch eine Verkaufsorder von 0,01 BTC. Der Positionsstatus ändert sich in GESCHLOSSEN, und wenn alle relevanten Transaktionen eingegangen sind, ändert sich der Status in GESCHLOSSEN.
Hier ist der Code, den wir haben werden:
Zusammenfassend:
– Für jeden neuen Ticker prüfen wir, ob der Kurs niedriger als 56.000 ist – Wenn wir genug USDT auf unserem Handelskonto haben, eröffnen wir eine Position bei 0,01 BTC. – Von nun an für jeden Ticker: – Wenn der berechnete Gewinn mit dem neuen Preis mehr als 4% des Gewinns oder 25% des Verlustes beträgt, schließt Cassandre die Position, die wir durch den Verkauf der gekauften 0,01 BTC geschaffen haben.
7. Verfolgen Sie die Entwicklung von Journaleinträgen
Schließlich werden wir onPositionStatusUpdate () implementieren, um zu sehen, wann Positionen geöffnet / geschlossen werden:
8. Historische Überprüfung
Kurz gesagt, das Testen historischer Strategien ist der Prozess des Testens einer Handelsstrategie über einen früheren Zeitraum. Der Handelsbot Cassandre ermöglicht es uns, die Reaktionen von Bots auf historische Daten zu simulieren.
Der erste Schritt besteht darin, unsere historischen Daten (CSV- oder TSV-Dateien) in unserem Ordner src / test / resources abzulegen.
Wenn wir Linux verwenden, ist hier ein einfaches Skript, um sie zu generieren:
Es wird eine Datei namens tickers-btc-usdt.tsv erstellt, die den historischen BTC-USDT-Kurs vom Startdatum (vor 3 Monaten) bis zum Enddatum (jetzt) enthält.
Der zweite Schritt besteht darin, Salden auf unseren virtuellen Konten zu erstellen, um die genaue Höhe der Vermögenswerte zu simulieren, die wir investieren möchten.
In diesen Dateien legen wir die Salden jeder Kryptowährung für jedes Konto fest. Dies ist beispielsweise der Inhalt von user-trade.csv, der die Vermögenswerte unseres Handelskontos simuliert:
Diese Datei muss sich auch im Ordner src / test / resources befinden.
Jetzt können wir einen Test hinzufügen:
@Import von TickerFluxMock lädt historische Daten aus unserem Ordner src / test / resources und sendet sie an unsere Strategie. Wir verwenden dann die await () -Methode, um sicherzustellen, dass alle aus den Dateien geladenen Ticker an unsere Strategie übergeben wurden. Am Ende zeigen wir geschlossene Positionen, noch offene Positionen und den globalen Gewinn an.
9. Fazit
In diesem Tutorial wurde veranschaulicht, wie Sie eine Strategie erstellen, die mit einem Kryptowährungsaustausch funktioniert, und diese anhand von historischen Daten testen.
Natürlich war unser Algorithmus einfach; Im wirklichen Leben besteht das Ziel darin, vielversprechende Technologien, einen guten Algorithmus und gute Daten zu finden, um zu wissen, wann wir eine Position schaffen können. Zum Beispiel können wir die technische Analyse verwenden, weil Cassandre ta4j integriert.
In the event you loved this post and you wish to receive more details concerning pop over to this web-site i implore you to visit the internet site.