Christian
Christian
Aktuelles Projekt:

MT5 in Kombination mit MatLab auf Basis eines neuronalen Netzes(BILSTM).

Anbindung an MT5 über API

https://github.com/vdemydiuk/mtapi




Erfahrung in: C/C++/MQL5/MatLab/Python

Kontakt:
Telegram t.me/ZeHaBee
Christian
Christian
Letze Woche wollte ich noch einen Langzeit Test zeigen . Es treten aber momentan mit den 2 Grafikkarten diverse Bugs auf die den Test verhindern. Ich arbeite dran.

Hie ein Test als einzel Loop.
Training 100k min Bars
Trading 40k min Bars.

Ich habe mal zum Spass die Output Neuronen auf 1000 gesetzt. Somit besitze das Netz ca 1000 x 126 = 126000 Neuronen.
Zeit waren 4h die aber auf einem Laptop mit GTX 960m durchgeführt wurde.
Ergebniss sieht sehr gut aus. Etwas zu viele Trades. Mit knapp 28/Tag
Da geht zu viel an Commission verloren. Aber es sieht gut aus und zeigt die richtige Richtung.

Daten :

Start at Time: 16:47:00 Tick: 100000
End at Time: 13:57:00 Tick: 140000
*******************************************************
Simulator End!
*******************************************************
Results:
End Balance : 23100
Balance High : 45040
Balance Low : -1660
Profit : 23100
Profit Forward : 23100
Comission : 30320
Trades : 758
Trades Long : 379
Trades Short : 379
Elapsed time is 12795.142048 seconds.

Ich hoffe am Wochenende einen langen Test zu zeigen
Christian
Christian
und die aus Loop 7 die ja um 1000 Bars weiter verschoben ist.
Wichtig ist mir dabei das die Ergebnisse reproduzierbar sind.

Man sieht deutlich das das Netz die Entscheidungen sehr gut gelernt hat und nicht mehr so zufällig agiert
Christian
Christian
Das sind die Trades aus Loop 6
Christian
Christian
Die Hardware wurde um eine GTX1070ti erweitert. Jeder weiß ja wie schwierig es momentan ist eine Grafikkarte zu bekommen. Netter Nebenverdienst lässt sich mit Mining einfahren. So nun aber zum Thema

Unten zu sehen ist das Ergebniss einen Loop Test über 8 Train-Trade Phasen.
Training Phase 30k minBars 10k Validierung minBars
Trade Phase 8k minBars
Die Phasen sind jeweils um 1000 minBars iteriert. Sprich der Gewinn ist nicht in der Zeit generiert worden sondern dient dem Testen des Konzeptes. Aktuell erreiche ich eine Accuracy füe die Erkennung der 4 Klassen des Kurses von 0.65-0.7.

Es ist nur ein kleiner Test der aber schon 2h dauerte. der nächste folgt heute Abend.
Christian
Christian
Ein Beispiel wie Overfitting aussieht. Im ersten Moment unbrauchbar aber es lässt sich auch mit übertrainierten NN Profit generieren
Christian
Christian 2018.01.22
Technische Daten dazu. Ticks sind 1min Bars

Results:
End Balance : 172930
Balance High : 208850
Balance Low : -12600
Profit : 172930
Profit Forward : -26380
Comission : 26240
Trades : 656
Trades Long : 328
Trades Short : 328
>> run_TradeSim_1

Training = 60000 1Min Bars
Trade 0-120000 1Min Bars
Christian
Christian
Ich baue den Simulator nun etwas um.
Die nächsten Ergebnisse werden Langzeit Test sein . Zum Bsp über ein Jahr.
Was dann ca 500 Training/Trade Phasen sind.
Nun kommt leide die schwache Hardware zum Tragen.
Eine GTX1080 in Kombination mit Ryzen 1700x und 32 GB Ram würde für diesen Test ca 1000 Stunden dauern.
Deswegen versuche ich nun so viel wie möglich des Codes in CUDA zu schreiben/konvertieren lassen . Damit die Sache dann etwas fahrt bekommt. Matlab bietet in der Hinsicht eine enorme Hilfe an in dem man sich die SCRIPT Funktionen in Code gießen lassen kann. C/C++/CUDA . Leider muss dann auf vieles verzichtet werden da sich nicht jede Funktion umwandeln lässt.

Gruß Christian
Christian
Christian
Auch ein mehrfaches Testen der selben Parameter bringt ein ähnliches Resultat.
Christian
Christian
Training 100000 Bars
Trading die nächsten 20000 Bars
Christian
Christian
Nach längerer Suche bin ich nun dem Problem auf die Schliche gekommen. Ich berichtete ja das die durchaus sehr positiven Ergebnisse im Langzeittest ( mehrere Training und Trade Phasen hintereinander) die doch sehr wackelig waren. Ein und der selbe Test ging einmal im Plus und dann mal wieder im gleich großen Minus zu Ende.

Es liegt an der Anzahl der Training Beispiele sprich die Anzahl der Bars/Training. Stabilere Ergebnisse kommen zum Beispiel erst ab ca 50000 1min Bars. Besser noch mit 100000 Bars. Die Training Zeit schnellt nun von Minuten auf 1-2h pro 10000 Bars Trading Zeit. Der Trainig Algo kann es anhand der wenige Beispiele nicht generalisieren und ein Model erstellen was robust genug ist.

Das alles wurde mit einer Testversion von Matlab2017b und einem LSTM Netzwerk mit ca 20-200 Outputneuronen erstellt. Zugrunde legt dann aber ein Classification Netzwerk. Timeseries als Input und 4 Klassen als OutPut.
Ich habe den Kurs auf folgende Klassen reduziert. ( Anmerkung mit mehren Klassen geht es besser)

Trendwende BUY
Trend Buy
Trendwende Sell
TrendSell

Gehandelt wirt nur die Klassen Trendwende Buy/Sell als Einstiegstsignal.

Hier ein paar Resultate.
Christian
Christian
Bin eben auf ein sehr interessantes Projekt gestoßen.
http://mtapi4.net/

Wer reinschauen möchte -> Github: https://github.com/vdemydiuk/mtapi

Ist eine komplette APi in Form von .NET für den MT4 und zum Teil für den MT5

Das würde mir die Option eröffnen den kompletten EA in Matlab zu schreiben und nur den MT5 als Brücke zum Broker.

hier mal ein bsp Code um in Matlab Quoten zu erhalten.
Christian
Christian
Hier ein Schema das Neuronalen Netzes. Ob das die Ideale Form ist weiß ich nicht aber es bringt sehr gute Ergebnisse.
Technisch sollen ja LSTM Netze mit "Speicher Funktion" besser für Zeitreihen sein. Aktuell unterstützt Matlab erst ab der Version 2017b LSTM Netze
Christian
Christian
Natürlich ist trotz aller Euphorie der Knackpunkt nicht weit.
Derselbe Test ein 2. Mal ausgeführt kann zu einem kompletten anderem Ergebnis führen.
Daran arbeite ich gerade . Es liegt in der Natur eines Training Algos und der Neuronalen Netze das er immer etwas anders ist . Jedes mal ist das netz auch mit fast gleichen Ziel Parametern doch immer etwas anders. Dort versuche ich gerade den "Zufallscharakter" einzukreisen und zu reduzieren.

Wer Interesse oder Ideen hat der möge es mir mitteilen.
Christian
Christian
Hier ein Bild der gehandelten Signale. Ich möchte dazu sagen das das neuronale Netz die Daten noch nie gesehen hat. Was viele beim Testen von Strategien falsch machen.
Wer genau hinsieht erkennt das Potential von solch einem Gespann.
Rotes Dreieck -> Short
Grünes Dreieck -> Long
Christian
Christian
Hier ein Bild der Signale die vom Netz kommen. Trigger Level für long/short ist jeweils 0.8 und - 0.8
Deutlich ist die schärfe der Signale zu erkennen was nur mit Neuronalen Netzen möglich wird.
Jeder der mit Indikatoren zu Tuhen hat kennt das Problem der Verzögerung weil die Daten geglättet werden müssn.
Christian
Christian
Oberfläche des Result Viewer

Zu sehen ist ein Ergebnis was auf Trainieren mit den letzten 2000 1m Bars beruht und die nächsten 2000 Bars handelt. Lot Größe ist 10 und Kommission von 4€ pro Lot/Trade ist eingerechnet.
Christian
Christian
Oberfläche des Testers
Christian
Christian
Ich werde ab so fort ein wenig über mein Projekt berichten. Da es den experimental Status verlassen hat.

Kurz eine kleine Einführung was ich mache:

Zentraler Punkt ist Matlab welches sich hervorragend für die Entwicklung von Handelsstrategien eignet. Die Möglichkeit schnell und einfach Daten zu Visualisieren kann kein Trading Programm was ich kenne.
Zwei Programme interagieren . MT5 sammelt die Daten und sendet sie zum Matlab Virtualdesktop. Dort werden die Daten zum Training des Netzes und zur Auswertung genutzt. Zurück kommt EIN Signal Short oder Long.
In Moment wird nur der Trade gedreht. Keine Stopps oder Targets. Später kommt sicherlich etwas mehr Trade Logik dazu. Die ersten Anfänge waren so erfolgreich das ich mich damit in Zukunft nur noch beschäftigen werde.

Konkret wird der EA folgendes machen.
1. Daten sammeln ( 2000 x 1min Bar Close)
2. Daten vorbereiten , Targets zum Trainieren berechen.
3. Trainieren mit GPU gestütztem Modus ( GTX 1080 ) ( 10 Schichten a 200 Neuronen) Input 1x200 Bars)
4. Senden der neuen Markt Daten ( jede Minute den Bar Close)
5. Auswerten mit dem Neuronalen Netz und Signal zurück an den MT5
6. MT5 handelt das neue Signal

Der größte Teil ist in Matlab geschrieben und umfasst mittlerweile 55 Dateien mir ca 5MB Source Code .m files
Im Verlauf des Projektes habe ich gemerkt das es zu langsam ist den EA über den MT5 zu testen. Die Kommunikation zu Matlab hat sich als Flaschenhals erwiesen. Im Trading ist es aber kein Problem.Nur das Testen und Optimieren wird quälend langsam da leider der Matlab Desktop kein Multithreading unterstützt. Somit sind lokale Agenten des Cloud Netzes nutzlos.

In folge hab ich einen kompletten Tester in Matlab programmiert mit Oberfläche und Parallel Modus was die Entwicklungszeit doch erheblich beschleunigt. Flaschenhals ist aktuell nur die eine Grafikkarte. Glücklicherweise sind moderne GPUs in der Lage mehrer Aufträge von verschiedenen Prozessen gleichzeitig zu berechen. Der Speicher der GPU ist auch am Limit bei 8 workern in Matlab. Mehr als 16000 Bars mal 8 workern gehen mit 8Gb Speicher nicht.
Ausweichen könnte man auf ein Amazon EC2 GPU Instance die mit 4 x Tesla K100 dem ganzen etwas Feuer gibt.
Nur über die Kosten von ca 3,5€/h muss man sich im klaren sein.

Das nur zum technischen Aufwand den ich betreibe.
Christian
Hat das Thema VS2015 Support demnächst ? hinzugefügt
Mir ist eben die Meldung im Log aufgefallen. 2017.07 . 06 17 : 35 : 06.944 C++ compiler    Microsoft Visual Studio 2015 found Können wir auf eine Unterstützung hoffen ? Weis da jemand eventuell etwas darüber ? Gruß Christian
Christian
Hat das Thema Suche Broker die MT5 UND Level 2 Daten anbieten hinzugefügt
Wenn jemand welche kennt her damit. Google kennt keine.   Bis jetzt habe ich nur Metaqoutes Demo als Lieferant mit Level 2 Daten.  Mir geht es nicht um die Daten an sich sondern die Möglichkeit dann JEDES reinkommende Tick von einer Reihe
Christian
Hat das Thema ObjectFind() hinzugefügt
Hat jemand ne Ahnung warum  ObjectFind() so viel CPU Zeit braucht ? Habe ich im MT zu viele alte Objekte die durchsucht werden müssen ? Oder ist die Funktion so ? Mir viel das im Profiler auf bei der Suche nach unnötiger Rechenzeit und