Einen Krypto-Trading-Bot auf Cloud Foundry betreiben

Alle reden über Bitcoin und seine Schwesterwährungen. Der Hype ist so gross, dass selbst Kleinanlegerinnen und -anleger ohne Ahnung von Finanzkonstrukten – so wie ich – auf den Investment- und Trading-Zug aufspringen wollen. Deshalb habe ich kürzlich beschlossen, mir ein eigenes Konto bei GDAX zu erstellen und mein Glück zu versuchen.
Traden hat anfangs Spass gemacht, aber ich habe ziemlich schnell gemerkt, dass ich nicht der Typ Mensch bin, der alle fünf Minuten auf sein Dashboard schauen will. Ausserdem habe ich keine klare Strategie, wann ich in was investieren und wann ich wieder aussteigen soll. Preis-Charts richtig lesen zu können, erfordert viel Übung und Wissen. Es gibt aber Muster, die sich erkennen lassen. Da das reine Analysearbeit ist, dachte ich mir, dass das der perfekte Job für einen Computer wäre. Also habe ich mich online umgesehen und mit Zenbot meine Antwort gefunden. Es ist ein quelloffener, cloud-tauglicher Trading-Bot für Kryptowährungen. Deployen wir ihn auf Cloud Foundry.
Wichtig: Die vorgestellte Software und die Konzepte sind noch sehr jung. Bitte nutze sie mit grosser Vorsicht und investiere nicht gleich zu Beginn hohe Beträge.
Repo klonen
Zuerst müssen wir das Repo von GitHub
klonen. Es empfiehlt sich, den neuesten Tag auszuchecken, damit du nicht dein
ganzes Geld einem möglicherweise instabilen master-Branch anvertraust.
Services erstellen
Zenbot hat zwei Abhängigkeiten, die es zum Funktionieren braucht. Die erste ist MongoDB. In den meisten Cloud-Foundry-Installationen bekommst du die mit einem einfachen Befehl wie diesem:
$ cf create-service mongodb small zenbot-db
Die nächste Abhängigkeit ist ein GDAX-API-Client. Jede der grossen Trading-Plattformen tut es, aber ich nutze der Einfachheit halber GDAX. Hier findest du eine Liste der unterstützten Plattformen. Um GDAX zu nutzen, besuche deren Website und erstelle ein Konto. Der Prozess ist etwas mühsam, weil du einen Lichtbildausweis hochladen und ein paar weitere Verifizierungsschritte durchlaufen musst. Aber glaub mir, am Ende lohnt es sich. Nach der Anmeldung wählst du oben links das Produkt, das du handeln willst (z.B. BTC/EUR), und überweist etwas Geld auf dein Konto (entweder per Kreditkarte, ab einem Bankkonto oder von einem bestehenden Coinbase-Konto).
Danach gehst du in die API-Einstellungen und erstellst ein neues Set von API-Keys mit der Berechtigung «Trade». Notiere dir die Credentials und erstelle dafür einen User-Provided Service (beachte: Damit können alle mit den entsprechenden Berechtigungen in Cloud Foundry deine API-Credentials sehen):
$ cf create-user-provided-service zenbot-gdax -p '{"key":"YOUR-API-KEY","b64secret":"YOUR-API-SECRET","passphrase":"YOUR-API-PASSPHRASE"}'
Falls du eine andere Trading-Plattform nutzt, erstellst du einen ähnlichen User-Provided Service mit deren API-Credentials.
Den Bot konfigurieren
Jetzt, wo die Services eingerichtet sind, müssen wir Zenbot sagen, dass es sie
verwenden soll. Kopiere conf-sample.js nach conf.js und füge die folgenden
Zeilen hinzu, damit die entsprechenden Konfigurationswerte automatisch aus der
Umgebungsvariable VCAP_SERVICES gelesen werden, die Cloud Foundry
bereitstellt:
// Diesen Teil nach der bestehenden MongoDB-Konfiguration einfügen
if (process.env.VCAP_SERVICES) {
const creds = JSON.parse(process.env.VCAP_SERVICES).mongodb[0].credentials;
c.mongo.host = creds.host;
c.mongo.port = creds.port;
c.mongo.db = creds.database;
c.mongo.username = creds.username;
c.mongo.password = creds.password;
}
// Diesen Teil nach der bestehenden GDAX-Konfiguration einfügen
if (process.env.VCAP_SERVICES) {
const creds = JSON.parse(process.env.VCAP_SERVICES)["user-provided"][0]
.credentials;
c.gdax.key = creds.key;
c.gdax.b64secret = creds.b64secret;
c.gdax.passphrase = creds.passphrase;
}
Damit wird die Konfiguration automatisch aus der Umgebung gelesen, sofern die
Variable VCAP_SERVICES vorhanden ist.
Ausserdem machen wir es möglich, das gehandelte Produkt und die verwendete Strategie über Umgebungsvariablen zu konfigurieren. Ändere dazu die folgenden Zeilen:
// default selector. only used if omitting [selector] argument from a command.
c.selector = "gdax.BTC-USD";
// name of default trade strategy
c.strategy = "trend_ema";
zu diesen:
// default selector. only used if omitting [selector] argument from a command.
c.selector = process.env.ZENBOT_SELECTOR || "gdax.BTC-USD";
// name of default trade strategy
c.strategy = process.env.ZENBOT_STRATEGY || "trend_ema";
So können wir den Selector (also das Produkt) und die Trading-Strategie, die der Bot verwenden soll, über Umgebungsvariablen setzen. Eine Liste der möglichen Werte erhältst du mit den folgenden Befehlen im Root-Verzeichnis des Repos:
$ ./zenbot.sh list-selectors
$ ./zenbot.sh list-strategies
Manifest erstellen
Der letzte Schritt vor dem Pushen deines Bots ist, eine Datei manifest.yml zu
erstellen, um das Setup deines Deployments zu automatisieren. Sie sollte so
aussehen:
applications:
- name: zenbot
memory: 256M
buildpacks:
- https://github.com/cloudfoundry/nodejs-buildpack.git
no-route: true
health-check-type: process
services:
- zenbot-db
- zenbot-gdax
env:
ZENBOT_SELECTOR: "gdax.BTC-EUR"
Ersetze den Selector durch das Produkt, das du handeln willst, und füge eine weitere Zeile hinzu, falls du nicht die Standard-Trading-Strategie verwenden willst.
Pushen
Jetzt musst du nur noch cf push ausführen, um deinen Bot zu deployen. Nach
einem erfolgreichen Deployment kannst du mit folgendem Befehl einen Live-Log-
Stream abgreifen und genau sehen, was dein Bot handelt:
$ cf logs zenbot --recent
Unter Reading the Console Output findest du eine Anleitung, wie diese Logs zu interpretieren sind. Im Kern gilt: Wenn die letzte Zahl grün ist, solltest du mit dem Bot zufrieden sein – und wenn die zweitletzte Zahl grün ist, solltest du generell zufrieden sein ;-)