Stell mal im Log Full ... an:
Und warte bis einer der 'langen' sich beendet und dann starte den im visuellen Modus. Dann kannst Du sehen zu welchem Zeitpunkt sich etwas verändert und gezielt dort mit dem Debugger starten....
Hallo Carl,
danke für die Info.
Ich habe das eben mal auf Log Full umgestellt.
Nur sind die Logs da auch nicht sehr gesprächig - vorsichtig ausgedrückt.
Was bis jetzt aufgefallen ist: Manche Durchläufe (genetic pass) macht der Tester nicht, sondern stellt sie hinten an. Bis er diese Meldung ins Log schreibt vergehen dann schonmal 6min, was für einen einzigen Durchlauf und fast 5*10^56 Möglichkeiten eine Ewigkeit ist und Stillstand bedeutet:
2023.05.12 17:41:36.909 Core 5 genetic pass (8, 382) returned result 40.68 in 0:00:04.470 2023.05.12 17:41:37.577 Core 6 genetic pass (8, 383) returned result 0.00 in 0:00:03.167 2023.05.12 17:47:18.376 Tester genetic pass (8, 360) not processed and added to task queue 2023.05.12 17:47:18.376 Tester genetic pass (8, 361) not processed and added to task queue 2023.05.12 17:47:18.376 Tester genetic pass (8, 362) not processed and added to task queue 2023.05.12 17:47:18.376 Core 2 genetic pass (8, 360, 1) started 2023.05.12 17:47:18.376 Core 4 genetic pass (8, 361, 1) started 2023.05.12 17:47:18.377 Core 5 genetic pass (8, 362, 1) started 2023.05.12 17:47:20.764 Core 5 genetic pass (8, 362) returned result 37.02 in 0:00:02.381 2023.05.12 17:47:25.243 Core 4 genetic pass (8, 361) returned result 0.00 in 0:00:06.861 2023.05.12 17:53:02.343 Tester genetic pass (8, 360) not processed and added to task queue 2023.05.12 17:53:02.343 Core 4 genetic pass (8, 360, 1) started 2023.05.12 17:58:46.310 Tester genetic pass (8, 360) not processed and added to task queue 2023.05.12 17:58:46.310 Core 5 genetic pass (8, 360, 1) started 2023.05.12 18:04:30.283 Tester genetic pass (8, 360) not processed and added to task queue 2023.05.12 18:04:30.283 Core 6 genetic pass (8, 360, 1) started
Warum er das macht, bzw. welche Parameter er an dieser Stelle anwendet sieht man nicht.
Es gibt im EA auch die Möglichkeit nur halbautomatisch zu handeln, in dem man z.B. Trendlinien einzeichnet, welche dann ein Ereignis auslösen. Diese Möglichkeit ist auch in den zu iterierenden Testparametern mit enthalten, jedoch müsste der Tester ja merken, dass an dieser Stelle kein Trade zustande kommt, so dass er diesen Zweig dann nicht weiter verfolgt.
Der obige Durchlauf (8, 360) taucht in den Optimierungsergebnissen natürlich nicht auf, so dass man hier auch keine Parameter abgreifen kann, um einen Hinweis zu erhalten.
Die Frage ist: wie komme ich an die angewendeten Parameter des Testdurchlaufes (8, 360)?
ABER:
Das mit dem visuellen Modus im Anschluss ist ein echt guter Hinweis. Danke!
Leider wird nicht protokolliert welcher Durchlauf mit welchem Parametersatz gestartet wurde, aber wenn er beendet wurde gibt es so einen Eintrag:
Dann kann man mit Ergebnis (hier 190.846251 ) oder pass (16, 474) die Parameter in der Ergebnistabelle finden. Umständlich zwar, aber es geht.
Noch ein Tipp, wenn der Saldo zB. 10% vom Anfangssaldo erreicht hat, mach einen ExpertRemove(). Das beendet den Lauf und spart Zeit und CO² :)
Die ExpertRemove-Funktion kannte ich noch nicht. Danke.
Die "rechenaufwendigeren" Funktionen laufen jedoch nur 1x pro neuer Kerze. Mit einem ExpertRemove würde der Lauf dann bei Deinem Beispiel bei 10% abbrechen, ich hätte jedoch auch gerne mehr - oder habe ich da einen Denkfehler?
Die ExpertRemove-Funktion kannte ich noch nicht. Danke.
Die "rechenaufwendigeren" Funktionen laufen jedoch nur 1x pro neuer Kerze. Mit einem ExpertRemove würde der Lauf dann bei Deinem Beispiel bei 10% abbrechen, ich hätte jedoch auch gerne mehr - oder habe ich da einen Denkfehler?
Und dann in OnTick(): if ( XRmv > AccountInfoDouble(ACCOUNT_BALANCE) ) ExpertRemove().
Da im Tester alle Zeiten Testzeiten sind müsste man auf kernel32.dll von Windows zurückgreifen: https://www.mql5.com/en/forum/159797/page2#comment_24891782
Dann könntest Du auch ein ExpertRemove() machen, wenn ein Durchlauf zu lange dauert, also zB 10 Mal die Durchschnittszeit eines Durchlaufs - müsst man aber vorher messen und 'hart' programmieren.#
Du könntest es aber auch hiermit ausprobieren: https://www.mql5.com/en/docs/common/getmicrosecondcount - da steht nix, dass der Tester die Zeit modelliert.
Ich hoffe, dass auch bei ExpertRemove ein entsprechender Eintrag in der Tabelle erfolgt - das habe ich noch nicht getestet.
- 2016.08.04
- www.mql5.com
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Moin allerseits,
bei einigen selbstentwickelten EAs habe ich hin und wieder das Problem, dass der Strategietester bei der genetischen Optimierung mittendrin "stehenbleibt".
D.h., er rechnet an einer Stelle x nicht mehr weiter, ist jedoch noch lange nicht fertig. Die Anzeige der einzelnen CPU-Kerne im Tester bleibt dann auch mittendrin stehen. Es deutet nichts auf eine Endlosschleife hin, da die entsprechenden Prozesse in der CPU-Anzeige des OS (Linux) keine/kaum Last anzeigen.
Im Journal steht nichts außergewöhnliches. Kein Hinweis.
Der MT5 reagiert einwandfrei und der Testlauf lässt sich auch problemlos beenden.
Es scheint so, dass es den Tester an irgendeiner Stelle stört, wenn ich das prozentuale Risiko (Lotgröße) und den Take Profit (%) gleichzeitig optimiere. Wahrscheinlich spielen andere Faktoren auch noch eine Rolle ... *kopfkratz*
Die EAs laufen sonst problemlos und einwandfrei, CPU-Last auch normal niedrig. Es gibt auch keinen eingebauten OnTest-Event im EA.
Hat hier jemand dieses Problem auch schon mal gehabt?
Irgendein Tip?
Vielen Dank für die Aufmerksamkeit.