Jump to content
Jokin

Workshop: Wir basteln uns einen Tradingbot (Lektion 7)

Empfohlene Beiträge

Hallo zusammen, 

nach der sechsten und vorletzten Lektion (https://coinforum.de/topic/16076-workshop-wir-basteln-uns-einen-tradingbot-lektion-6/) geht es heute weiter mit der letzten und nicht minder interessanten Lektion 7:

Lektion 7: Hallo Cronjob

1. Cronjob einrichten (Automatisierung)
2. Setup eines eigenen Raspberry Pi
3. Weiterführende Informationen

1. Cronjob einrichten (Automatisierung)

Es gibt höchst unterschiedliche Möglichkeiten einen Tradingbot zu automatisieren. Ich werde hier auf die zeitgesteuerte Variante eingehen, die in definierten Zeitintervallen eine Webseite (unser PHP-Skript) aufruft und sich danach wieder schlafen legt. Das ist die einfachste Variante, da sie lediglich den manuellen zyklischen Aufruf der Webseite automatisiert.

Je nach persönlicher Situation gibt es unterschiedliche Möglichkeiten dies zu realisieren, daher solltet Ihr nun schauen was auf Euch zutrifft:

1.a) Cronjob auf Windows (für XAMPP-Nutzer)
1.b) Cronjob auf Webserver (für Webspace ohne Crondienst)
1.c) Cronjob auf VPS / Raspberry Pi (für Linuxinstallationen)

1.a) Cronjob auf Windows (für XAMPP-Nutzer)

Windows stellt dafür das Programm „Aufgabenplanung“ zur Verfügung. Einfach im Suchfeld nach „Aufgabenplanung“ suchen und das Programm starten.

„Aktion“ -> „Einfache Aufgabe erstellen...“
... Name eingeben (z.B. BalanceBot)
... Trigger kann „täglich“ sein (es wird sich kaum lohnen den Computer Tag und Nacht laufen zu lassen)
... Aktion „Programm starten“
... Programm suchen (z.B. „C:\Program Files (x86)\Mozilla Firefox\firefox.exe")
… und dann Argumente hinzufügen (z.B. „http://localhost/BalanceBot/index.php“)
=> fertig.

Soll das doch stündlich laufen, dann kann nach dem Anlegen der Aufgabe der Trigger auch so eingestellt werden, dass die Aufgabe stündlich wiederholt wird.

1.b) Cronjob auf Webserver (für Webspace ohne Crondienst)

https://cron-job.org/de/ ist in der Lage Cronjobs mit einer Ausführungsdauer von bis zu 30 Sekunden gratis zu hosten. Die Ausgabe der aufgerufenen Webseite darf jedoch nicht größer als 1 kB sein. Daher sollten alle Ausgaben (echo / print_r) des BalanceBots auskommentiert (mit „//“ oder „/*  ... */“) werden.

Auf der Webseite registrieren, dann bei "Cron-Jobs" auf "Cron-Job erstellen" klicken. Internet-Adresse eingeben und stündliche Ausführung wählen (das reicht völlig aus).

1.c) Cronjob auf VPS / Raspberry Pi (für Linuxinstallationen)

Cronjobs werden auf den meisten Linuxsystemen in der Datei „/etc/crontab“ eingetragen, das macht man mit dem folgenden Befehl (das $-Zeichen wird nicht eingegeben). Mit „sudo“ greift man auf Dateien mit root-Rechten zu (sudo = „super-user do“). „nano“ ist ein Texteditor auf Kommandozeilenebene, der auf vielen Linux-Systemen vorhanden ist.

$ sudo nano /etc/crontab    

Dort wird diese Zeile eingetragen:

0 * * * * root wget -O /dev/null -o /dev/null http://localhost/BalanceBot/index.php

„0 * * * *“ steuert wann der Job ausgeführt wird, siehe auch https://crontab-generator.org/ oder Google „crontab“.
„wget“ ist der Kommandozeilenbrowser, der die Datei downloaden wird.
„-O /dev/null“ schickt die downgeloadete Datei direkt ins Nirvana
„-o /dev/null“ schickt auch Statusmeldungen ins Nirvana

Gespeichert wird mit „Strg+X“, bestätigen mit „Y“ (oder „J“ ... einfach mal unten gucken) und „enter“.

Und das war’s auch schon – fortan wird stündlich der Job ausgeführt.

2. Setup eines eigenen Raspberry Pi

Für Laien mag ein Raspberry Pi als „Hexenwerk“ erscheinen, welches nur IT-Nerds vorbehalten ist, denn einen eigenen Server zu Hause zu haben klingt erstmal „weit weg“ für z.B. Familienväter.

Ich hingegen habe nun das Teilchen kennen gelernt und oh, staune und wunder ... das ist ja alles total easy und simpel gemacht.

Daher meine klare Empfehlung: Investiert mal diese „unter 100 Euro“ und geht das Projekt an einem Abend an während die Familie vorm Fernseher sitzt und Ihr mit dem Notebook mit auf der Couch hockt. (oder mal ein Bundesliga-Spiel nicht schauen :D)

In diesem Ablauf arbeiten wir uns nun da durch:

2.1. Hardware besorgen
2.2. Software besorgen
2.3. Hardware und Software miteinander verbinden
2.4. Webserver installieren
2.5. PHP installieren
2.6. MySQL installieren
2.7. BalanceBot einrichten
2.8. Cronjob einrichten
2.9. Zugriff per VNC (Desktop des Pi)

Los geht’s:

2.1. Hardware besorgen

Benötigt wird folgende Hardware:

1x Raspberrry Pi (ich rate zum aktuellen 3B+)
1x Netzteil (Micro-USB-Ladekabel)
1x 32GB-Micro-SD-Karte (eine zweite Karte braucht es entgegen der Info in der Lektion 6 nicht)
1x passende Adapter um an Eurem Computer die Micro-SD-Karten zu beschreiben.
1x Gehäuse
1x Kühlerset

Das gibt es als Bundle bei diversen Internetanbietern für 80 Euro.
(Tastatur, Maus und Bildschirm mit HDMI-Kabel braucht es in dieser Anleitung NICHT!)

2.2. Software besorgen

Google "Raspbian Stretch Diskimage" laden (knapp 2 GB!)
=> https://www.raspberrypi.org/downloads/raspbian/
(Raspbian Stretch with desktop and recommended software)

Etcher runterladen (damit wird das Image auf die SD-Karte geschrieben)
=> https://www.balena.io/etcher/

Putty runterladen (nur für Windows nötig, der Mac kann das auch so)
=> https://www.putty.org/

WinSCP laden um Dateien auf den RaspberryPi über das Netzwerk zu übertragen:
=> https://winscp.net/eng/download.php
(Als MacUser benutze ich CyberDuck: https://cyberduck.io/)

2.3. Hardware und Software miteinander verbinden

Das Programm "Etcher" ist recht einfach gehalten: Das geladene Image auswählen, die SD-Karte auswählen und los geht’s!

Danach die Karte nochmal in den Computer stecken und auf das Laufwerk namens „boot“ eine Datei namens „ssh“ legen – der Inhalt ist vollkommen egal. Damit erreichen wir, dass der RaspberryPi direkt nach dem ersten Start einen SSH-Zugang zur Verfügung stellt.

Datei "ssh" anlegen.

Den Raspi ins Gehäuse stecken, die beiden Kühlkörper draufkleben und SD-Karte rein. Netzwerkkabel dran und Stromanschluss dran – das war’s schon, den könnt Ihr nun zu Eurem Internetrouter legen, da müsst Ihr nicht mehr dran.

Mit Putty verbindet Ihr Euch mit Eurem Raspi (der ist binnen weniger Sekunden gebootet).
User: pi
Server: raspberrypi
Passwort: raspberry

Auf dem Mac: Terminal öffnen und "ssh pi@raspberrypi" eingeben.

Nun solltet Ihr schon das erste Erfolgserlebnis haben und seht die Kommandozeile Eures Raspberry! Befehle könnt Ihr einfach per Copy&Paste übernehmen. Aber Achtung! Die Forensoftware setzte bei mir unsichtbare Zeichen in den Text, könnte durch Formatierungen kommen. Wenn etwas nicht tut wie es soll, nicht verzweifeln - Befehle händisch eintippen (beim crontab-Eintrag sieht man das nicht sofort) ... hier im Thread fragen oder an balancebot@gmx.de schreiben.

Nun müssen wir noch die Lokalisierung vornehmen und das Passwort ändern:

$ sudo raspi-config

(mit Tab und Pfeiltasten durchnavigieren)

=> Option 1: Passwort ändern
=> Option 4: dort die passenden Einstellungen vornehmen. (de_DE ISO-8859-1, de_DE)
=> Option 7: Filesystem anpassen "Expand Filesystem"

Dann wird nochmal ein Upgrade und Update macht:

$ sudo apt-get -y upgrade   
$ sudo apt-get -y update   

2.4. Webserver installieren

Nun kommt der Webserver drauf

$ sudo apt-get install -y apache2   

Nun müssen wir noch Apache konfigurieren:

$ sudo nano /etc/apache2/apache2.conf   

Diesen Abschnitt anpassen:

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
</Directory>

Und ganz unten einfügen:

ServerName raspberrypi

(nano mit ctrl+X beenden, dann mit "Y" oder "J" das Überschreiben bestätigen und "enter")

Apache neu starten mit

$ sudo systemctl restart apache2    

Auf dem eigenen PC kann nun im Browser „http://raspberrypi“ aufgerufen werden und der Apache meldet sich direkt.

2.5. PHP installieren

Nun kommt der nächste Schritt – wir installieren PHP (PHP-Modul, und die MySQL-Anbindung:

$ sudo apt-get install -y php  libapache2-mod-php php-mysql     

Das Web-Verzeichnis machen wir für alle schreibberechtigt anstatt nun Extra-User anzulegen (das macht man auf Produktivsystemen nicht!):

$ sudo chmod 777 -R /var/www/html/    

Nun legen wir eine erste PHP-Datei an:

$ echo '<?php phpinfo(); ?>' | tee /var/www/html/info.php  

Und wir müssen die PHP-Config-Datei anpassen (nicht die auskommentierten Zeilen mit ; beginnend ändern, das bringt nix):

$ sudo nano /etc/php/7.0/apache2/php.ini

=> error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT & ~E_NOTICE
=> display_errors = On

Apache neu starten:

$ sudo systemctl restart apache2   

Im Browser nun "http://raspberrypi/info.php" aufrufen und es sollte sich die PHP-Konfiguration zeigen. Das nächste Erfolgserlebnis ist da – und so lange hat das bestimmt auch nicht gedauert?

2.6. MySQL installieren

Nun widmen wir uns dem MySQL-Server. Normalerweise installiert man keine Datenbank auf einer SD-Karte, da SD-Karten sonst zu schnell kaputt gehen. Der Einfachheit halber machen wir es dennoch. Das Schreib-Lese-Aufkommen ist enorm gering, es wird nur stündlich mal was geschrieben, das ist nicht wild.

MySQL-Server (genaugenommen wird damit MariaDB installiert, aber das ist egal) installieren:

$ sudo apt-get install -y mysql-server   

Damit haben wir die Datenbank nun schonmal installiert. Bevor wir sie einrichten installieren wir phpmyadmin:

$ sudo apt-get -y install phpmyadmin php-mbstring php-gettext   


=> "Apache2" mit Leertaste auswählen + enter
=> Passwort aufschreiben!

$ sudo phpenmod mbstring    
$ sudo ln -s /etc/phpmyadmin/apache.conf /etc/apache2/conf-available/phpmyadmin.conf   
$ sudo a2enconf phpmyadmin.conf    
$ sudo systemctl restart apache2   

Nun im Browser aufrufen:

http://raspberrypi/phpmyadmin

Einloggen mit User "phpmyadmin" und dem vergebenen Passwort um das nächste Erfolgserlebnis zu erhalten!

2.7. BalanceBot einrichten

Nun haben wir alles am Laufen, was wir für die Minimallösung brauchen und wir richten uns den BalanceBot auf dem Raspberry Pi ein:

Mit WinSCP verbinden wir uns auf dem Pi (Verbindungsdaten wie für ssh + Port 22).
Eventuell muss der Zugriff über die IP-Adresse erfolgen. Mit

$ ifconfig   

lässt sich die IP-Adresse des RaspberryPi ermitteln.

Die Daten kommen in das Verzeichnis /var/www/html .. am besten dort ein Unterverzeichnis „BalanceBot“ anlegen um Ordnung zu halten, eventuell kommen noch weitere Projekte hinzu. (Das Verzeichnis dann ebenfall „777“ berechtigen – das geht mit WinCSP.

Über SSH legen wir nun einen neuen User und eine Datenbank an:

$ sudo mysql   

> CREATE USER 'balancebot'@'localhost' IDENTIFIED BY 'BalanceBotPasswort';

> GRANT USAGE ON *.* TO 'balancebot'@'localhost' REQUIRE NONE WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0;

> CREATE DATABASE IF NOT EXISTS `balancebot`;

> GRANT ALL PRIVILEGES ON `balancebot`.* TO 'balancebot'@'localhost';

> FLUSH PRIVILEGES;

> exit

Und schwupp, können wir uns in phpmyadmin mit dem User “balancebot” und dem Passwort “BalanceBotPasswort” anmelden.

Nun müsst Ihr noch die Datenbankstruktur in phpmyadmin in der Datenbank „balancebot“ anlegen.

Das war in Lektion 2

CREATE TABLE `tblMessages` (
  `id` int(11) NOT NULL,
  `date_created` datetime NOT NULL,
  `message` text NOT NULL
);

ALTER TABLE `tblMessages` ADD PRIMARY KEY (`id`);

ALTER TABLE `tblMessages` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

Und das in Lektion 6:

CREATE TABLE `tblBalances` (
  `id` int(11) NOT NULL,
  `coin_name` varchar(10) NOT NULL,
  `pair_name` varchar(10) NOT NULL,
  `date_created` datetime NOT NULL,
  `current_balance` double NOT NULL,
  `current_price` double NOT NULL,
  `target_percentage` double NOT NULL,
  `virtual_percentage` double NOT NULL,
  `virtual_balance` double NOT NULL
);

ALTER TABLE `tblBalances` ADD PRIMARY KEY (`id`);

ALTER TABLE `tblBalances` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT;

Nun testet Ihr über den Browser den BalanceBot: http://raspberrypi/BalanceBot/index.php ... das nächste Erfolgserlebnis ist da, wenn keine Fehlermeldungen auftreten und in der .../BalanceBot/show_messages.php korrekte Logdaten stehen.

2.8. Cronjob einrichten

Und nun wird noch der Cronjob eingerichtet – dazu einfach „siehe oben“ bei dem Linux-Part, los geht es mit

$ sudo nano /etc/crontab   

Das hier dort eintragen:

0 * * * * root wget -O /dev/null -o /dev/null http://localhost/BalanceBot/index.php Hinweis: Tippt den Befehl besser händisch ab um undichtbare Formatierungszeichen drin zu haben.

Das war's ... der BalanceBot arbeitet nun jede Stunde seine Punkte ab.

2.9 Zugriff per VNC (Desktop des Pi)

Ja, der Pi hat als noch so kleine Kiste nicht nur Server-Qualitäten sondern der kann auch einen Desktop zur Verfügung stellen. Und das auch ohne Bildschirm, Maus und Tastatur!

Dazu wieder in die Config gehen:

$ sudo raspi-config   

=> Option 7: „Resolution“ auf eine brauchbare Größe setzen, 1024er oder so
=> Option 5: „VNC“ aktivieren

Für den eigenen PC den VNC-Viewer installieren und dann mit dem Raspberry verbinden. Er wird Euch dann nochmal durch den Installationsprozess führen, das könnt Ihr aber dann skippen.

Auch dort könnt Ihr Euch dann das Terminal aufrufen, das wäre dann durch’s Auge in die Brust geschossen weswegen wir das Setup komplett direkt über SSH durchgeführt haben.

Ich habe meinen Internetroute so konfiguriert, dass ich per VPN mit meinem iPhone von überall auf den Desktop des Pi zugreifen kann und im Zweifel Fehler beheben kann - wer eine Anleitung braucht für Fritzbox+iPhone, bitte im Thread hier melden.

3. Weiterführende Informationen

Mit dieser obigen Anleitung haben wir die Minimalversion eines Raspberry-Servers in Betrieb genommen wie es recht schnell auf der Couch vorm Fernseher geht aber wie er auf keinen Fall direkt dem Internet ausgesetzt werden sollte sondern immer nur in einem lokalen Netzwerk hinter einer Firewall stehen sollte.

Ein ganz heißer Tipp ist dieses Github-Repository:

https://github.com/Stadicus/guides/tree/master/raspibolt

Dort lest mal rein, Ihr werden vieles wiedererkennen, was hier in Kurzform schon drin ist was die Einrichtung des RaspberryPi angeht, nur „in sicher“.

Zusätzlich findet Ihr dort die Anleitung wie Ihr einen Bitcoin-Fullnode aufsetzt.

Dazu benötigt Ihr eine externe 3,5“-Festplatte mit eigenem Stromanschluss – auf die kommt dann auch die Datenbank und ein „Swapfile“ was dem Raspi zu deutlich besserer Arbeitsspeicherverwaltung verhilft.

Wer Interesse daran hat, kann sich gern mal daran versuchen - das ist mein nächstes Projekt ☺

... so, damit ist das Projekt „BalanceBot“ abgeschlossen.

Wenn Bugs auftauchen, dann liefere ich die gern nochmal nach. Es schadet also nicht ab und zu mal in die Lektionen hineinzuschauen – ich werde Admins bitten die aktualisierte Lektion direkt im ersten Beitrag zu kennzeichnen und auf den Bugfix-Beitrag in dem Thread zu verweisen.

 

bearbeitet von Jokin
  • Thanks 8

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Hi

hab, falls es von Interesse ist, ein kleines Tool ausprobiert welches ich euch nicht vorenthalten möchte.

Richtet sich an alle die den oder die Bot(s) auf einem Windowsrechner mit xamp nutzen..

Mich hat an der Automatisierung über Aufgabenplaner immer etwas gestört, dass ich nicht vernünftig mit dem Browser oder dem PC selber weiter arbeiten konnte wenn der Aufgabenplaner meinen Bot gestartet hat, weil das (in meinem Fall) Firefoxfenster in den Vordergrund gepopt kam.

Nun habe ich mir das Addon TAB AUTO REFRESH geladen und kann jetzt meine Bot's einmalig je in einen TAB laden und dann den jeweiligen TAB per Tool individuel neuladen lassen. Das funktioniert auch minimiert im Hintergrund prima.

Somit kann ich meine Bot's je nach meiner gewünschten Strategie immer wieder laden lassen und kann trotzdem am PC weiterarbeiten ohne Popup...

Bestimmt gibt es elegantere Lösungen wie z.B. vielleicht per PHP das script automatisch zu reloaden, aber dafür fehlen mir die Programmierkenntnisse...

Vielleicht ist das Tool ja was für jemanden...mir hats geholfen.

Lars

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Wenn Du Cronjobs nimmst, musst Du auch gleichzeitig Deine Uhr immer stellen und synchronisieren. Das war immer ein Problem, also ich das noch verwendet habe. 

Mich wundert, dass PHP das nicht eingebaut hat ??? Bei anderen Sprachen würde ich einfach while true, if time = 16 do ...machen, wenn ich was um 16h starten lassen will.

Aber Cronjob hat sich nicht bewährt, weil die Stabilität fehlt. Putty, jetzt kommen die harten Sachen ?

 

Theo

bearbeitet von Theo Kojak

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen
vor 9 Stunden schrieb creader:

Richtet sich an alle die den oder die Bot(s) auf einem Windowsrechner mit xamp nutzen..

Mich hat an der Automatisierung über Aufgabenplaner immer etwas gestört, dass ich nicht vernünftig mit dem Browser oder dem PC selber weiter arbeiten konnte wenn der Aufgabenplaner meinen Bot gestartet hat, weil das (in meinem Fall) Firefoxfenster in den Vordergrund gepopt kam.

Nun habe ich mir das Addon TAB AUTO REFRESH geladen und kann jetzt meine Bot's einmalig je in einen TAB laden und dann den jeweiligen TAB per Tool individuel neuladen lassen. Das funktioniert auch minimiert im Hintergrund prima.

Jedenfalls unter Windows 7 muss man den URL nicht zwingend von einem Browser aufrufen lassen. CURL.exe tut's auch via Aufgabenplaner. CURL muss man halt vorher installieren.

Mit folgenden Einstellungen poppt auch nichts auf, und die Abfrage läuft regelmäßig im Hintergrund:

Allgemein:

  • Häkchen setzen bei Ausgeblendet

Trigger:

  • Einmal
  • Wiederholen jede {Zeitangabe} für die Dauer von: Sofort

Der Aufgabenplaner registriert dann brav: "Nach Auslösung alle {Zeitangabe} unbegrenzt wiederholen."

Diesen Beitrag teilen


Link zum Beitrag
Auf anderen Seiten teilen

Erstelle ein Benutzerkonto oder melde dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde dich hier an.

Jetzt anmelden

×

Wichtige Information

Wir speichern Cookies auf Ihrem Gerät, um diese Seite besser zu machen. Sie können Ihre Cookie-Einstellungen anpassen, ansonsten gehen wir davon aus, dass Sie damit einverstanden sind. In unseren Datenschutzerklärungen finden sie weitere Informationen.