Testen des neuen MQL5-Compilers für x64-Plattformen - 2 bis 10 Mal schnellere Berechnungen! - Seite 14

 

Ich wollte die Beschleunigung der Berechnungen auf meinem Expert Advisor heute in Erwartung der super Geschwindigkeit (ich habe sogar eine schnellere CPU) und... Aus irgendeinem Grund lief der optimierte Expert Advisor im Testgerät dreimal langsamer. Ist Ihnen das noch nie passiert? Sobald ich das Problem lokalisiert und reproduziert habe, werde ich den Code veröffentlichen. Dort gibt es keine Systemaufrufe, sondern nur Operationen mit einer Reihe von Arrays und grundlegende arithmetische Operationen.

Außerdem gibt es einige Anfragen:

1. Wir können die Möglichkeit hinzufügen, das Skript vom Editor aus ohne Debugging zu starten, d.h. so, als ob es vom Navigator aus gestartet würde. Diese Art des Starts ist in jeder Entwicklungsumgebung vorhanden. Ich wollte eigentlich Strg + F5 vorschlagen, wie in sys, aber die Kombination ist bereits von Ihnen besetzt :)

2. Hinzufügen des Aufrufs von wind's console stdout aus dem Skript, um zu vermeiden, dass man jedes Mal zum Terminal wechselt, um das Ergebnis des Skripts zu sehen. So wie ich es verstehe, können Sie jedoch versuchen, es über WinAPI aufzurufen.

3. Fügen Sie zumindest einige Einstellungen zur genetischen Optimierung hinzu. Zum Beispiel kann die Anzahl der Kombinationen 1e35 sein und 10k Durchläufe sind nicht immer genug (der Optimierer generiert nicht einmal neue Durchläufe nach 10k), Sie verstehen, dass 20-30k genug wären, aber Sie können es nicht abstimmen. Andererseits, wenn man einige Parameter festlegt und einige für die Feinabstimmung und das Studium der Verteilung übrig lässt... Wenn also die Anzahl der Kombinationen klein ist, z. B. 50k, bietet der Optimierer für GA nur 2k Durchläufe an - und das ist auch nicht genug für diese spezielle Aufgabe - um das Verhalten der Funktion bei diesen Parametern besser zu untersuchen. D.h. es ist dumm, alle 50k durchzugehen, während GA nur 2k Läufe erzeugt und kein ausreichendes Bild liefert. Ich hoffe, Sie verstehen, wovon ich spreche.

 
Renat Fatkhullin:

Verbesserungen werden sicher kommen.

Hat schon jemand das Debugging für den Verlauf im Strategietester getestet?

Ich denke, viele würden es gerne testen, aber die Schwierigkeit und die Realität ist, dass man normalerweise dort testet, wo man den Code schreibt und zu handeln beabsichtigt. Es gibt nur sehr wenige Broker, die MT5 anbieten, was das Testen aller neuen Funktionen durch die Händler verlangsamt und die Entwicklung von MT5 unweigerlich verlangsamt. Vielleicht macht es also Sinn, nach einer nicht-trivialen Lösung zu suchen, die dieses Problem löst und die Motivation zur Nutzung von MT5 erhöht.
 
Renat Fatkhullin:

Verbesserungen werden sicher kommen.

Hat schon jemand das Debugging für den Verlauf im Strategietester getestet?

Irgendetwas mache ich falsch. Mein Visualisierer öffnet sich einfach und funktioniert wie gewohnt. Der Haltepunkt liegt genau auf der ersten Anweisung in OnInit() - aber es funktioniert nicht.
 
Renat Fatkhullin:

Verbesserungen werden sicher kommen.

Hat schon jemand das Debugging auf der Historie im Strategietester getestet?

Es wäre auch schön, wenn man im Kontextmenü "Verwendungen suchen" auswählen könnte.

Ich weiß, es ist ein bisschen off-topic, aber ich brauche keine Änderungen zu schreiben, aber es ist schön für Entwickler, solche Dinge zu haben.

Ich habe Moving Average, MACD Sample auf dem neuen Compiler überprüft, aber ich habe keine Unterschiede gefunden. Ich werde es bei meinen EAs ausprobieren.

 

Ich habe den Fehler noch nicht vollständig behoben und gefunden (auf sehr unterschiedliche Weise), aber bisher habe ich die folgenden Probleme mit Optimize=1 gefunden. Ich möchte Ihnen gleich sagen, dass mein Expert Advisor etwa 100 Eingabeparameter hat und viel mit Arrays arbeitet. Außerdem wird nicht gehandelt, sondern es werden nur Berechnungen durchgeführt.

Ich werde die Reihenfolge meiner Handlungen beschreiben:

1. Ich starte das Terminal, wähle im Tester "Optimierung = Deaktiviert" und gebe einen Satz von Eingabeparametern ein. Das Prüfgerät liefert das richtige Ergebnis.

2. Ich wähle "Optimierung = Schnell (genetischer Algorithmus)", starte es - das Prüfprogramm erzeugt nicht einmal den ersten Schritt. Die Agenten (Verarbeiter) reagieren nicht. Zuerst dachte ich, dass es sich um Berechnungsfehler mit falschen Parametersätzen handeln könnte und das Prüfgerät einfach abstirbt.

3. Wieder wähle ich "Optimierung = Deaktiviert" und gebe erneut die Referenzmenge an. Jetzt zeigt das Testgerät überhaupt keine Ergebnisse mehr an.

4. ich öffne den EA-Code im Editor und drücke F5, um einen nicht optimierten Code zu erzeugen. Ich führe es erneut im Tester aus und verwende den Referenzsatz - voila, es gibt ein Ergebnis. Nun, irgendetwas ist im Expert Advisor aufgrund der Optimierung nicht in Ordnung.

Ich habe eine Funktion hinzugefügt, die die Eingabeparameter des Expert Advisors in eine Datei protokolliert. In Schritt 2 (die Optimierung läuft und die Schritte des Testers werden fast nicht generiert) tauchten zufällige Werte für einige Parameter auf, die gar nicht vorgesehen sind, weil der Parameter entweder unveränderbar ist oder der Wert außerhalb des festgelegten Bereichs liegt. Ich hatte z. B. einen Parameter auf 80 gesetzt, und er war unveränderlich. Im Protokoll wurde er auf 0,01355835795402527 (?) gesetzt. Der andere wurde auf 0 gesetzt und als 4,940656458412465e-324 protokolliert; beide Parameter waren doppelt. Aber dann habe ich herausgefunden, dass es auch für int völlig ungeeignete Werte gibt.

Zweitens habe ich den "unnötigen" EA-Code herausgeschnitten, so dass nur der Code übrig bleibt, der ebenfalls einen Fehler verursacht. Dennoch ist es ziemlich viel geworden. Außerdem gab die Protokollierungsfunktion den Wert ALLER Parameter aus. Als ich jedoch die meisten Parameter entfernte (und sie weniger als 64 oder 80 wurden), starb das Testgerät nicht. Allerdings habe ich auch eine seltsame Verbindung zwischen dem Fehler und meiner Protokollierungsfunktion gefunden. Wenn er auskommentiert ist (d. h. alle Parameter werden NICHT im Code verwendet), stirbt der Prüfer. Wenn es protokolliert wird, stirbt das Prüfgerät. Sehr seltsam.

Und drittens. Ich habe festgestellt, dass die Parallelisierung von Berechnungen nicht zu einer linearen Erhöhung der Gesamtgeschwindigkeit der Läufe führt. Ich füge zum Beispiel folgende Dateien bei: ein Skript und einen Expert Advisor mit demselben Code. Dies ist ein echtes Stück Code, das aus meinem Expert Advisor herausgeschnitten wurde, aber die Arrays sind umbenannt. Wenn Optimize=1, läuft mein Skript in 156 ms, d.h. vielleicht 6 Durchläufe pro Sekunde. (Ohne Optimize dauert es 3 mal länger). Ich habe 8 Threads, d.h. es sind theoretisch 48 Durchläufe pro Sekunde möglich. Wenn ich den Expert Advisor im Tester laufen lasse (Slow Optimize ausführen, den Dummy-Parameter aktivieren, z.B. für 2000 Durchläufe), erhalte ich nur etwas mehr als 4 Durchläufe pro Sekunde, d.h. sogar langsamer als auf einem einzelnen Kern! Obwohl im Task-Manager ehrlich gesagt 8 Prozesse hängen blieben. Warum ist das so? Mehrere Prozesse blockieren den Zugriff auf den Speicher? Lange Initialisierung von Arrays? (Zugegeben, Arrays sind dort nicht groß).

Wenn wir einen einzelnen Test im Prüfgerät durchführen, wird der Ausdruck 156 ms betragen. Das heißt, dass mit dem Expert Advisor alles normal zu sein scheint.

Übrigens, wird es jemals Zeiger in MQL geben? :) Denn ich musste Arrays - Kopien - erstellen.

 
xfo:

Aus irgendeinem Grund arbeitete expert mit Optimierung im Testgerät 3 Mal langsamer.

Jetzt verstehe ich, warum es langsamer wird - nur ein Agent (zufällig) funktioniert, die anderen scheitern, also ständig ein Versuch alle paar Sekunden. Aus dem Protokoll des Testers geht nichts hervor. Wenn der letzte Agent ebenfalls fehlschlägt, passiert das, worüber ich vorhin geschrieben habe: Die Prüfschritte werden überhaupt nicht erzeugt.

Build 1117 hat nicht alle oben beschriebenen Probleme gelöst (einschließlich struct array).

 

Heute auf 1117 aktualisiert, aber Debugging auf historischen Daten - geht immer noch nicht weiter.

Ich nehme ExpertMACD.mt5, setze einen Haltepunkt direkt am Eingang zur Init-Funktion, starte das Debugging auf historischen Daten (drücke den Knopf), das Editor-Fenster schließt sich, die Einstellungen des Strategietesters öffnen sich. Ich stelle den Zeitraum ein (für 2015, Tage, alle Ticks), die Visualisierung - das Kontrollkästchen ist aktiviert, ich drücke die Schaltfläche Start und die Visualisierung beginnt. Der Haltepunkt hat nicht funktioniert.

Was mache ich falsch?

 
George Merts:

Heute auf 1117 aktualisiert, aber Debugging auf historischen Daten - geht immer noch nicht weiter.

Ich nehme ExpertMACD.mt5, setze einen Haltepunkt direkt am Eingang zur Init-Funktion, starte das Debugging auf historischen Daten (drücke den Button), das Editor-Fenster schließt sich, die Einstellungen des Strategietesters öffnen sich. Ich stelle den Zeitraum ein (für 2015, Tagebücher, alle Zecken), die Visualisierung - das Kontrollkästchen ist aktiviert, ich drücke auf die Schaltfläche Start und die Visualisierung beginnt. Der Haltepunkt hat nicht funktioniert.

Was mache ich falsch?

Ich muss ein Demo-Konto aufMetaQuotes-Demo eröffnen, dann

Mein MACD Sample.mq5 auf einem moex-Demokonto das USDRUB_TOM-Symbol funktioniert nicht (es beginnt zu arbeiten, dann stoppt nach ein paar Schritten) und ein einfacher Backtest funktioniert auch nicht.

Aber Moving Average.mq5 auf einem Demokonto moex USDRUB_TOM funktioniert gut (und der einfache Backtest auch).

Auf dem Demoforex-Demokonto funktioniert das EURUSD-Symbol einwandfrei (ebenso wie der einfache Backtest) MACD Sample.mq5 und Moving Average.mq5

Ich habe ein Debugging-Video zum MACD Sample.mq5 EURUSD Symbol auf dem Demoforex-Konto aufgenommen. (täglich funktioniert auch gut)

Dateien:
capture-mt5-1.zip  5457 kb
 
xfo:

Ich habe den Fehler noch nicht vollständig behoben und gefunden (auf sehr unterschiedliche Weise), aber bisher habe ich die folgenden Probleme mit Optimize=1 gefunden. Ich möchte Ihnen gleich sagen, dass mein Expert Advisor etwa 100 Eingabeparameter hat und viel mit Arrays arbeitet. Außerdem wird nicht gehandelt, sondern es werden nur Berechnungen durchgeführt.

........................

.......................

Übrigens, wird es jemals Zeiger in MQL geben? :) Weil ich Arrays - Kopien - erstellen musste.

Hallo, ich würde gerne genauer werden.

1. Ihr Expert Advisor hat Berechnungen durchgeführt, aber noch nicht gehandelt. Was und wie wird der Expert Advisor angezeigt? Was erwarten Sie von dem Expert Advisor, wenn Sie ihn im Strategietester ausführen? Welche Daten erhoffen Sie sich bei den Tests mit der Optimierung? Wir haben beim Testen des beigefügten Expert Advisors keine Fehler gefunden. Haben die von Ihnen beschriebenen Fehler damit zu tun?

2. Schritt für Schritt, was Sie tun und was Sie erwarten, fügen Sie bitte den Code, den Sie verwenden.

3. Können Sie die Testprotokolle mit und ohne Optimierung anhängen?

4. Ihre Terminalversion, OS?

 

Eduard Vavrin, die angehängte Datei hat nichts mit den beschriebenen Fehlern zu tun. Ich werde versuchen, den Code, der zu dem Fehler führt, vorzubereiten und ihn Ihnen zu schicken. Es braucht nur Zeit, und bisher enthält dieser Code zu viel aus dem Quellcode des Expert Advisors.

Zu der von mir angehängten Datei: Sie besagt, dass ein einzelner Durchlauf des angehängten EA 156 ms, d. h. 1/6 einer Sekunde, dauert. Wir können davon ausgehen, dass wir bei 8 Threads 48 Durchläufe pro Sekunde erhalten würden. In Wirklichkeit liefert der Multi-Runner (es gibt den Dummy-Parameter Slow Optimization mode) nur 4-5 Läufe pro Sekunde bei 8 Threads. Die Frage war: Warum nimmt die Geschwindigkeit ab? Auf der Registerkarte Agenten kann ich sehen, dass alle Threads laufen und jeder Thread mehr als 1 Sekunde für einen Lauf benötigt. Was der Expert Advisor zurückgibt rand() ist nur ein Tick, um zu sehen, dass es funktioniert.