Jump to content
Tom Next - Daytrading Community

Systementwicklung langfristig angehen?


Recommended Posts

Hallo,

trotz meiner nur langsam steigenden mql4 Skills werden meine Codes immer komplexer und fordern dem Rechner bei der Ausführung, ob Backtesting oder live inzwischen immer mehr ab. Im Moment geht das alles noch recht gut aber ich habe Pläne die naturgemäß einfach zu einer sehr viel höherern Anforderung an das Programm führen. Generell habe ich vorsichtig ausgedrückt noch ziemlich verückte Vorhaben die ich mal umsetzten möchte, diese aber meißt durch meinen Codingskill und Zeitmangel begrenzt sind. Um auf es auf den Punkt zu bringen überlege ich, ob ich teile der Codes auslagere oder gar alles aus mql4 auslagere aber trotzdem mt4 als Executor und Wertgeber nutze. Ich hätte zu der Überlegung mal ein paar Fragen da ich programmiertechnisch nicht mehr als mql4 oder C beherrsche.

1. Bringt das Auslagern von Code in zum Beispiel eine dll einen Geschwindigkeitsvorteil bei der Ausführung beim Backtest oder Live? Welche Programmiersprache enthält eigentlich eine dll?
Kann man Code in beliebige Programmiersprachen auslagern? und sind diese dann noch über Metatrader ausführbar -> Backtesting und Live? Kann man überhaupt in Metatrader ein externes Programm einbinden das einen Geschwindigkeitsvorteil bringt im Vergleich zu all-in-mql? Wichtig ist natürlich, dass Metatrader als Executor vorhanden bleibt inklusiv Backtestfunktion. Irgendwie muss das ausgelagerte Programm auch an die Variablen kommen.

2. Ich habe gelesen dass es Programmiersprachen gibt mit vorgefertigten Modulen für unterschiedlichste Berechnungen. Zum Beispiel genetische Algos, NN oder auch einfach gute grafische Ausgabemöglichkeiten oder gar vorgefertigte Auswertungsmöglichkeiten wie man es bei Dataminingsoftware finden kann. Gibt es eine Sprache die in solchen Dingen besonders gut ist bzw mit der man gewisse modulare Möglichkeiten hat ohne jeden komplexen Algo/Formel eigenhändig Coden zu müssen?

3. Welche Programmiersprache ist Zukunftfähig um damit vielleicht ein Leben lang zu arbeiten?

4. Welche Programmiersprache ist besonders schnell und nutzt den CPU (also alle Cores!) effektiv aus?


Grüße

 

 

ps: mq5 unter mt5 kommt für mich derzeit nicht in Frage da ich kein Einfluss auf die Backtestdaten habe und der Backtest nicht offline funktioniert.

Edited by Forex1+
Link to comment
Share on other sites

Hi Forex1+

 

in vielem , was Du da schreibst , finde ich mich wieder . Daher ....

 

- ich denke, dass zwischen der Systementwicklung einerseits und der Ausführung des HS , dem Handel , andererseits zu unterscheiden ist .

- nachdem ich Jahre auf MQL4 und 5 verbracht habe und dann auf eine spezielle Entwicklungssoftware umgestiegen bin , habe ich Vergleich . Ich denke , dass MQL4 / 5 / C++ HS extrem

viel mühsamer und somit langwieriger ist , wenn es um die Entwicklung eines HS geht . Die Zeit , die ich mit Debugg etc verbraucht habe beträgt ein vielfaches dessen, was ich auf MQL4 zur wahren inhaltlichen Entwicklung eines HS investieren konnte .

- es gibt sehr unterschiedliche Softwarepakete , die den Systementwickler erheblich komfortabler unterstützen ... daher vermutlich kosten die dann auch alle etwas . Du findest alle bekannten Pakete hier bei TN .

 

Es gibt einige Plattformen, die relativ günstig sind und dennoch den Entwickler mit so einfachem Code verwöhnen, dass ein Großteil der Zeit des Entwicklers eben in die Entwicklung gesteckt wird , erheblich leichter als MQL4 .

 

Wenn man aber ein System entwickelt hat, "den MACD mit der Stocha und dem SAR gewinnbringend kombiniert hat, alle Settings kennt und auch das RMMM steht " ... dann kann man ja auf MQL übersetzen, wenn man will . Und dann kann man einen Vorteil nutzen, den ich so nur bei MQL4 kennen gelernt habe : Die unglaubliche Flexibilität von MQL4 unterschiedlichste Ideen zu realisieren . Aber für mich ist das dann ehen die Kirsche auf dem HS , als das eigentliche HS .

 

Ich code unglaublich gerne . Heute muss ich sagen, dass ich aus dieser Freude heraus mehr am Code herumgespielt habe , als das ich ein HS entwickelt hätte . Eigentlich schön, es hat mir ja Spaß gemacht . Und meine grauen Zellen trainiert , dass hat es auch . Aber effizient war es nicht , jedenfalls wenn es um die inhaltliche HS Entwicklung geht . nictation.gif

 

Achtung : Ich habe (noch) kein funktionierendes HS , der finale Beweis fehlt also noch , aber meine Ideen kann ich heute sehr sehr viel leichter und schneller auf anderer Plattform testen als mit MQL .

 

My2C .... wir haben einige MQL4- Guru´s hier , die - glaube ich - auch viele andere Code beherrschen und daher spezieller antworten können .

 

KB

  • Upvote 3
Link to comment
Share on other sites

Hi,

 

bin kein Experte im Bereich dll aber ein paar fragen kann ich vielleicht beantworten.

- AFAIK kannst du in MQL4 nur per DLL externen Code einbinden. Rein theoretisch kann man über ein dll vermutlich beliebigen anderen Code ausführen (über cmd-line befehle etc.) aber das wird dann vermutlich etwas zu fancy und performance mäßig nicht wirklich besser.

- Ich weiß das man c/C++ code in dlls kompilieren kann, ich vermute C# geht auch. Weitere sprachen womöglich, aber weiß ich nichts von.

- Es gibt keine "Sprache" die gut/schnell in so Dingen wie NNs ist. Wie du schreibst geht es hier immer um die Module die jemand anders in der Sprache geschrieben hat und zur Verfügung stellt bzw. das Framework rundherum. Matlab zB wird teils als eigene Programmiersprache gehandelt, aber du benötigst Matlab selbst um es auszuführen und kannst somit die Matlab-module (für NN etc.) nutzen.

- Zukunftsfähig... Es gibt viele moderne Sprachen die manche Dinge komfortabler können. Umgekehrt bin ich mir sicher das es auch in 20 Jahren noch C/C++ entwickler geben wird und die Sprache aktiv genutzt wird. Geschwindigkeitsmäßig ist C/C++ soweit ich weiß derzeit relativ unschlagbar.

- thema Multicore: wenn du es in MT4 einbindest bist du grundsätzlich mal single-threaded. Theoretisch kannst du natürlich in der DLL das ganze aufsplitten, parallel rechnen lassen und zusammenwarten, aber bedenke das du das alles selber implementieren musst. Hier ist C sicher eine der komplizierteren Sprachen um sowas umzusetzen. Moderne Sprachen liefern bereits komfortable tools für Multithreading, aber am Ende bleibt es dennoch bei dir die Logik selbst zu bauen und parallelisierbar zu machen. Der Teil darf nicht unterschätzt werden ;)

 

hth

  • Upvote 4
Link to comment
Share on other sites

@KB ich vermute du spielst auf Investox an? Ich habe auch immer mal wieder überlegt auf andere Plattformen umzusteigen aber am Ende war MT durch die Flexibilität und Kostenfreiheit immer mein persönlicher Sieger. Ich kenne zwar nicht die genauen Möglichkeiten andere Plattformen aber am liebsten weiß ich genau was der entsprechende Algo macht bzw ich möchte es im Code nachschauen können oder selber Coden.

Die Richtung der Überlegung soll eher dazu führen, dass ich mich von Plattformen unabhängig mache wobei das natürlich nur begrenzt möglich ist mit dem Anspruch darauf das der Backtest usw mit der genutzten Plattform trotzdem noch funktioniert. Wäre ich Berufsprogger hätte ich mir wahrscheinlich schon längst eine eigene Plattform gebastelt ;)

 

@Mythos sehr interessante Infos. C/C++ in dlls das ist schon mal gut sowie die gute Geschwindigkeit. Das mit Multicore wusste ich auch nicht, also das die Aufgaben verteilt werden müssen, ich hatte gedacht das eine Aufgabe dann zB schneller bearbeitet wird aber im Prinzip ist es logisch jeder Kern nimmt eigene Aufgaben entgegen, wenn sie zusammenarbeiten sollen muss das programmtechnisch gesteuert werden was sicher kompliziert ist (aber spannend). Es gibt ja Leute die nutzen sogar ihre Grafikkarte für sowas.

Edited by Forex1+
Link to comment
Share on other sites

Jup, das ist immer das Problem mit Parallelität: Die Logik muss erstmal parallelisierbar sein.

Also wenn du in deiner Programmlogik viele kleine Berechnungen hast die voneinander unabhängig sind und wo erst am Ende aller Berechnungen die Ergebnisse kombiniert werden müssen, dann ist parallelisierung sinnvoll, ggf. auch auf die Grafikkarte ;) (Eine GPU besteht aus vielen kleinen Prozessoren die selber nicht gravierend schnell sind, aber durch die masse extrem viel gleichzeitig schaffen).

Wenn die Logik aber komplett seriell ist, bringen mehr Kerne nicht mehr Geschwindigkeit. Wenns um NNs etc. geht kann Parallelisierung möglich sein und Sinn machen, oder wenn man zB viele Inputs von unterschiedlichen Quellen zuerst auswertet und dann kombiniert. Aber wenn die Berechnung so aufwändig ist das Parallelisierung nötig ist, ist es vermutlich sowieso zu lahm für automatisiertes System. Und wenn der kleine Zugewinn durch parallelisierung wirklich eine Rolle spielt, ist vermutlich der Zeitverlust durch Brokerlatenz etc. im Realtrading viel massiver...

Link to comment
Share on other sites

Hi,

 

bin kein Experte im Bereich dll aber ein paar fragen kann ich vielleicht beantworten.

- AFAIK kannst du in MQL4 nur per DLL externen Code einbinden. Rein theoretisch kann man über ein dll vermutlich beliebigen anderen Code ausführen (über cmd-line befehle etc.) aber das wird dann vermutlich etwas zu fancy und performance mäßig nicht wirklich besser.

- Ich weiß das man c/C++ code in dlls kompilieren kann, ich vermute C# geht auch. Weitere sprachen womöglich, aber weiß ich nichts von.

- Es gibt keine "Sprache" die gut/schnell in so Dingen wie NNs ist. Wie du schreibst geht es hier immer um die Module die jemand anders in der Sprache geschrieben hat und zur Verfügung stellt bzw. das Framework rundherum. Matlab zB wird teils als eigene Programmiersprache gehandelt, aber du benötigst Matlab selbst um es auszuführen und kannst somit die Matlab-module (für NN etc.) nutzen.

- Zukunftsfähig... Es gibt viele moderne Sprachen die manche Dinge komfortabler können. Umgekehrt bin ich mir sicher das es auch in 20 Jahren noch C/C++ entwickler geben wird und die Sprache aktiv genutzt wird. Geschwindigkeitsmäßig ist C/C++ soweit ich weiß derzeit relativ unschlagbar.

- thema Multicore: wenn du es in MT4 einbindest bist du grundsätzlich mal single-threaded. Theoretisch kannst du natürlich in der DLL das ganze aufsplitten, parallel rechnen lassen und zusammenwarten, aber bedenke das du das alles selber implementieren musst. Hier ist C sicher eine der komplizierteren Sprachen um sowas umzusetzen. Moderne Sprachen liefern bereits komfortable tools für Multithreading, aber am Ende bleibt es dennoch bei dir die Logik selbst zu bauen und parallelisierbar zu machen. Der Teil darf nicht unterschätzt werden ;)

 

hth

 

per DLL-Injection geht das in MetaTrader auch und du kannst sogar, soweit in der DLL alles definiert, deine Indikatoren, Crosses, Arrows, etc. ... in die NN´s aus MT4 laden für einen definierten Zeitraum (Trainingszeitraum) und das trainierte NN im Anschluß für einen Forward-Test hernehmen.

 

Geht in C/C++, C#, R oder anderen Algo-NN-Sprachen. Für Multithreading sollten dann aber die entsprechenden Prozessor-und GPU-CUDA-Bibliotheken mit kompiliert werden und in dieser DLL-Injection nur beim Training ausserhalb von MT4 laufen.

 

Multicore mit GPU macht halt auch nur Sinn, wenn du mehr als 1 Mrd. Kombinationen, Kursmuster oder sonstige Vorhersage-Parameter hast. Da bringt es enorm was, in Bezug auf Dauer der Eltern-Kind-Input-Kind-Neuronen. Aber nicht vergessen, dass du auch ein Rauschen der Kurse von mind. 3-5% per Random-Engine mit einbaust, damit die NN´s nicht "auswendig" lernen, weil diese immer die gleichen Kursreihen bekommen. Eine zusätzliche Dämpfung von

Indikatoren macht auch Sinn um hier das maximale Potential aus den NN´s ziehen kannst.

 

Wenn du NN´s trainierst, dann kannst du ja die NN´s nicht nur auf die Kursreihen beziehen sondern auch auf Indikatoren oder Kursmuster. Mit etwas Geschickt und Rechenpower kommen teilweise super Kombinationen heraus, wo Kursmuster mit technischen Indi´s hervorragend zusammenspielen in bestimmten Märkten.

 

Willkommen und viel Spaß und Ausdauer in der "Unendlichkeit" der Kombinationen mit NN´s good.gif

  • Upvote 3
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...