Optimierung dauert plötzlich ewig

 

Hallo, da ich nicht mehr weiter weiß und in meinem Umfeld auch keine Freunde/Bekannte habe, die sich mit dem algorithmischen Handel bzw. mit dem MetaTrader5 und dem Editor beschäftigen, frage ich hier mal nach ob jemand einen Tipp für mich hat.

Zum Einen muss ich sagen, dass ich maximal Basiswissen habe, was Computer und Hardware betrifft. Bitte berücksichtigen wenn jemand eine Idee dazu hat.

Ich schreib seit einiger Zeit eigene Programme für den MetaTrader5 mit dem Editor. Hab ganz simple Programme mit maximal 300-400 Zeilen, inklusive den Trailingstop-Schleifen für offene Positionen und Schleifen für das Nachziehen von plazierten Order-Typen.

Mit dem Strategietester seh ich mir dann an ob die Dinger potential haben oder nicht. Dazu verwende ich neben der Visualisierung über einen Symbol-Chart auch gerne mal die "Vollständige Optimierung" --> "Langsamer vollständiger Algorithmus" und stelle auf "Balance max".

Seit einiger Zeit braucht dieser aber sowas von lange, dass es sehr schwer ist anständig damit zu arbeiten. Für einen simplen Code, der mir bei der Wende des MA Trades eröffnet, hat es zu beginn etwa 2-3 Stunden gebraucht, bis ein Zeitraum von 12-18 Monaten durch war. Nun dauert das knappe 40-50 Stunden wenn nicht länger, obwohl es der gleiche Algorithmus ist. Ich hab den Code auch nicht verändert. Der ist 1:1 der selbe, nur die Dauer des Durchlaufens hat sich massiv verschlechtert.

Ich habe den MetaTrader neu installiert. In einem Fachhandel Bios und alle Treiber 2 mal neu installieren bzw. aktualisieren lassen, jedoch ohne Verbesserung. Ich habs im Fachhandel nach dem ersten mal testen dürfen und da sich nix geändert hat, wurde es ein 2tes mal durchgeführt.

Meine 64Gig Arbeitsspeicher laufen nach wenigen Sekunden auf 99%, CPU sowieso auf 100% Auslastung wenn ich den Strategietester öffne und die Tests starte, daher wundert mich die Dauer eigentlich jetzt weniger. Aber ich habe keine Ahnung warum der das nun so macht. Mir konnte im Fachhandel auch keiner weiterhelfen oder sagen ob oder wohin das nun ausgelagert wird wenn der Arbeitsspeicher auf 99% geht.

Die Visualisierung auf einem Chart läuft normal ab, wie vorher, nur die Optimierung streikt und dauert ewig, dabei ist es unabhängig ob ich nur einen Parameter optimieren möchte oder mehrere.

Hat jemand dazu eine Meinung/Idee/Hilfe? Ich wäre wirklich dankbar für sinnvolle Antworten ohne dass mir jemand sagt, dass ich ein Idiot bin. Das weiß ich schon länger ;)

Danke im voraus.

Mfg Tom

Strategietester - Algorithmisches Trading, Handelsroboter - MetaTrader 5 Hilfe
  • www.metatrader5.com
Der Strategietester erlaubt das Testen von Strategien mit Handelsrobotern ( Expert Advisors ) vor der Nutzung im Live-Trading. Während des...
 
  1.  Im Editor gibt es den Profiler (mit hist. Daten), um herauszufinden, wo und mit was der EA so seine zeit verbringt oder verliert.
  2. Graphische verlangsamt mit unter stark!
  3. Schalte mal im Journal des Tester (rechter Mausklick) die ganze Opti.-Logs an!
    Da siehst Du dann welche welche Durchläufe plötzlich viel Zeit verlieren und
    dann kannst in der Ergebnis-Tabelle über das Ergebnis das Setup der Parameter finden und laufen lassen.
  4. Meistens ist der "Langsame vollständige Algorithmus" überflüssig, die genetische Optimierung ist schon ganz gut.
  5. Wenn der RAM zu klein ist (schau im TaskManager), dann beginnt das System zu swappen verliert damit sehr, sehr viel Zeit.
    Entweder die Anzahl der erlaubten Agenten oder den Optimierungszeitraum beschränken.
 
Carl Schreiber #:
  1.  Im Editor gibt es den Profiler (mit hist. Daten), um herauszufinden, wo und mit was der EA so seine zeit verbringt oder verliert.
  2. Graphische verlangsamt mit unter stark!
  3. Schalte mal im Journal des Tester (rechter Mausklick) die ganze Opti.-Logs an!
    Da siehst Du dann welche welche Durchläufe plötzlich viel Zeit verlieren und
    dann kannst in der Ergebnis-Tabelle über das Ergebnis das Setup der Parameter finden und laufen lassen.
  4. Meistens ist der "Langsame vollständige Algorithmus" überflüssig, die genetische Optimierung ist schon ganz gut.
  5. Wenn der RAM zu klein ist (schau im TaskManager), dann beginnt das System zu swappen verliert damit sehr, sehr viel Zeit.
    Entweder die Anzahl der erlaubten Agenten oder den Optimierungszeitraum beschränken.

Hat etwas gedauert, da ich einiges versucht hab.
Hab den Profiler mit echten und historischen Daten laufen lassen aber Zeit kann ich nicht sehen. Was ich aber schon seh ist, dass die OnTick Function den größten Teil in Anspruch nimmt, falls ich das richtig interpretiere. Aber da steig ich schon mal aus, da ich weder ne Beschreibung darüber finde noch weiß ob ich das richtig versteh.
Bei den Local Agenten arbeiten 12 Kerne, Local Network Farm und MQL Cloud Netzwerk keine bzw. sind nicht verwendet.
Ich werd das mal mit nur einem Agenten versuchen, da Du das in Punkt 5 beschrieben hast, diese zu beschränken.
Bei den RAM hatte ich vorher 8 Gig und das ging anfangs super, als das langsamer wurde hab ich auf 64 Gig nachgerüstet, jedoch kein bisschen besser geworden. Arbeitsspeicher ist trotzdem nach wenigen Sekunden bei 99% Auslastung.
Was ich aber gar nicht verstehe hab ich im folgenden Bild markiert.

Die Rote Markierung zeigt das Symbol das ich ausgewählt hab und den Zeitraum den ich eingestellt habe.
Die blaue Markierung zeigt Symbole und Zeiträume an, die ich nicht eingestellt und zur Zeit auch nicht testen möchte.
Wenn die auch beim Testen aktiv sind, ist mir klar warum das so lange dauert.
Ist das so und wenn ja, wie kann ich die deaktivieren?


 

Es scheint mir, darüber habe auch ich keine Infos, dass diese Tickdaten bereits auf Deinem PC sind - nicht unbedingt, dass sie auch verwendet werden und dann im Ram wären.

Wenn der RAM bei 99% ist verliert die Maschine Zeit beim Swappen, also Daten eines Durchlaufs im Ram werden auf die HD geschrieben, um Platz für die Daten eines anderen Durchlaufs zu machen, die geladen werden, um dann wieder, ....

Stell einfach so lange die Agenten im Tab Agenten ab (disable), bis die Auslastung zB. bei 85%/90% ist:


Deshalb hat MQ die erlaubte Anzahl der Agenten für das Berechnen in der Cloud auf die physikalisch existierenden Kerne begrenzt.
Ich habe 6 Kerne mit je 2 'Hyperthreads' also 12 mögliche Threads (im Bild Cores). Aber ich habe 64GB Ram und die waren bei einem ähnlichen Zeitraum mit Tickdaten zu, ich glaube, 70% ausgelastet.

 
Carl Schreiber #:

Es scheint mir, darüber habe auch ich keine Infos, dass diese Tickdaten bereits auf Deinem PC sind - nicht unbedingt, dass sie auch verwendet werden und dann im Ram wären.

Wenn der RAM bei 99% ist verliert die Maschine Zeit beim Swappen, also Daten eines Durchlaufs im Ram werden auf die HD geschrieben, um Platz für die Daten eines anderen Durchlaufs zu machen, die geladen werden, um dann wieder, ....

Stell einfach so lange die Agenten im Tab Agenten ab (disable), bis die Auslastung zB. bei 85%/90% ist:


Deshalb hat MQ die erlaubte Anzahl der Agenten für das Berechnen in der Cloud auf die physikalisch existierenden Kerne begrenzt.
Ich habe 6 Kerne mit je 2 'Hyperthreads' also 12 mögliche Threads (im Bild Cores). Aber ich habe 64GB Ram und die waren bei einem ähnlichen Zeitraum mit Tickdaten zu, ich glaube, 70% ausgelastet.

Das war echt ein super Tipp. Hab die Kerne jetzt auf 10 beschränkt und der Arbeitsspeicher werkt nun bei maximal 81%, hab das mal ca. 15min beobachtet und nur kurz beim Laden gesehen, dass er da mal höher wird.
Auch die Dauer der Tests hat sich mehr als halbiert.
Vielen vielen Dank für deine Hilfe, allein wär ich da nie draufgekommen. Obwohl sehr wahrscheinlich ist, dass ich Trottl das selber umgestellt hab.
Wieder was gelernt ; )
Schönes Wochenende und Danke nochmal. 
Mfg Tom 
 
Carl Schreiber #:

Es scheint mir, darüber habe auch ich keine Infos, dass diese Tickdaten bereits auf Deinem PC sind - nicht unbedingt, dass sie auch verwendet werden und dann im Ram wären.

Wenn der RAM bei 99% ist verliert die Maschine Zeit beim Swappen, also Daten eines Durchlaufs im Ram werden auf die HD geschrieben, um Platz für die Daten eines anderen Durchlaufs zu machen, die geladen werden, um dann wieder, ....

Stell einfach so lange die Agenten im Tab Agenten ab (disable), bis die Auslastung zB. bei 85%/90% ist:


Deshalb hat MQ die erlaubte Anzahl der Agenten für das Berechnen in der Cloud auf die physikalisch existierenden Kerne begrenzt.
Ich habe 6 Kerne mit je 2 'Hyperthreads' also 12 mögliche Threads (im Bild Cores). Aber ich habe 64GB Ram und die waren bei einem ähnlichen Zeitraum mit Tickdaten zu, ich glaube, 70% ausgelastet.

Carl, wier sind im Jahre 2023 ...die meisten haben eine SSD wo die Auslagerungsdatei verwaltet wird.

Das swappen merkt man heute gar nicht mehr.

 
Christian #:

Carl, wier sind im Jahre 2023 ...die meisten haben eine SSD wo die Auslagerungsdatei verwaltet wird.

Das swappen merkt man heute gar nicht mehr.

Wir sind im jahr 2023, mq aber erst auf den stand von 1980

 
Christian #:

Carl, wier sind im Jahre 2023 ...die meisten haben eine SSD wo die Auslagerungsdatei verwaltet wird.

Das swappen merkt man heute gar nicht mehr.

Naja, das stimmt nicht so. Ich hebe es ja selbst erlebt (mit einer SSD as C:), dass durch Aufträge von Cloud-Agenten bei mir der PC still stand: 12 Agenten auf ihr Maximum und plötzlich konnte ich meinen PC nur noch aus und wieder anschalten. Ram stand bei 100%
 
Carl Schreiber #:
Naja, das stimmt nicht so. Ich hebe es ja selbst erlebt (mit einer SSD as C:), dass durch Aufträge von Cloud-Agenten bei mir der PC still stand: 12 Agenten auf ihr Maximum und plötzlich konnte ich meinen PC nur noch aus und wieder anschalten. Ram stand bei 100%

Ja, das ist der alte Bug, den ich schon nun 3 Jahre kenne.

Ob SSD oder HDD ist dann egal ,weil da müllt ein Agent den Temp Ordner bis zum Rand der Disk voll.

 
Carl Schreiber #:

Es scheint mir, darüber habe auch ich keine Infos, dass diese Tickdaten bereits auf Deinem PC sind - nicht unbedingt, dass sie auch verwendet werden und dann im Ram wären.

Wenn der RAM bei 99% ist verliert die Maschine Zeit beim Swappen, also Daten eines Durchlaufs im Ram werden auf die HD geschrieben, um Platz für die Daten eines anderen Durchlaufs zu machen, die geladen werden, um dann wieder, ....

Stell einfach so lange die Agenten im Tab Agenten ab (disable), bis die Auslastung zB. bei 85%/90% ist:


Deshalb hat MQ die erlaubte Anzahl der Agenten für das Berechnen in der Cloud auf die physikalisch existierenden Kerne begrenzt.
Ich habe 6 Kerne mit je 2 'Hyperthreads' also 12 mögliche Threads (im Bild Cores). Aber ich habe 64GB Ram und die waren bei einem ähnlichen Zeitraum mit Tickdaten zu, ich glaube, 70% ausgelastet.

Ein Tipp zu den Threads/Kernen  Agenten von mir.


Frühere Tests haben erweisen, dass bei halber Anzahl von maximal möglichen Agenten die Optimierung nur 5-10 % langsamer ist aber die Belastung des PCs sich um 50% reduziert.


Weniger ist da mehr.

 
Christian #:

Ein Tipp zu den Threads/Kernen  Agenten von mir.


Frühere Tests haben erweisen, dass bei halber Anzahl von maximal möglichen Agenten die Optimierung nur 5-10 % langsamer ist aber die Belastung des PCs sich um 50% reduziert.


Weniger ist da mehr.

Da fällt mir nur ein zitat ein

oida, was geht da ab