Fehler, Irrtümer, Fragen - Seite 2667
Sie verpassen Handelsmöglichkeiten:
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Registrierung
Einloggen
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Es stellt sich heraus, dass der Profiler für das Skriptprojekt nur dann Ergebnisse anzeigt, wenn die Optimierung deaktiviert ist, wenn die Optimierung aktiviert ist, läuft alles, funktioniert, aber ohne Ergebnisse.
Ich hatte einen Fehler in MT5 (Build 2345) und verstand nicht, warum der Profiler zwar läuft und funktioniert, aber keine Ergebnisse angezeigt werden.
Es stellt sich heraus, dass der Profiler für das Skriptprojekt nur Ergebnisse anzeigt, wenn die Optimierung deaktiviert ist, wenn die Optimierung aktiviert ist, dann läuft alles und funktioniert, aber ohne Ergebnis.
Der Profiler funktioniert nicht für alle Indikatoren (ohne Optimierung). Ich habe zweimal im Forum darüber geschrieben und den Code per PM an die Entwickler geschickt - keine Antwort.
Grob gesagt, habe ich mich gefragt, warum zwei Algorithmen bei unterschiedlichen Geschwindigkeiten am Ende das gleiche Ergebnis liefern, nämlich einen 1,7-fachen Drawdown im Optimierungsmodus.
So konnten wir praktische Erfahrungen mit dem MT5-Profiler sammeln und eine Reihe von Mängeln in seiner Funktionsweise feststellen.
Da nicht klar ist, ob die Entwickler an diesen Informationen interessiert sind, und man nicht stundenlang Zeit für die Lokalisierung von Fehlern aufwenden möchte, werden nur kurze Informationen über die gefundenen Probleme gegeben:
1) Es gibt keine Möglichkeit, die Geschwindigkeiten der verschiedenen Algorithmen zu vergleichen.
So kann ein Algorithmus, der dreimal so schnell ist wie andere, sowohl mit als auch ohne aktivierte Optimierung, im Profiler als der langsamste erscheinen.
Offensichtlich gibt es eine Art von Profiler-Overhead, der sich auf die Ausführungszeit von Algorithmen auswirkt. In diesem Fall hat es keinen Sinn, die Leistungsgeschwindigkeit von Algorithmen im Profiler zu vergleichen.
2) Falscher Zählwert in den Tooltips des Histogramms auf dem Bildschirm.
Der Profiler sagt, dass die Funktion 80K mal gestartet wurde und nicht 20K mal wie erwartet, zur gleichen Zeit innerhalb der Funktion für verschiedene Zeilen überschreitet Count mehrere Male, für einige Zeilen drei Mal und für andere zwei Mal.
3) Falscher Wert für Zeit in den Histogramm-Tooltips auf dem Bildschirm.
Es gibt Fälle, in denen der Profiler anzeigt, dass der Algorithmus in 99,90 % der Fälle in die Bedingung eintrat, obwohl dies in Wirklichkeit nur einmal bei 20 000 Durchläufen der Fall ist.
Das ist kein Fehler, sondern eher ein Kommentar!
mt 5 build 2340.
Als ich gestern das Datenverzeichnis öffnete, habe ich nicht bemerkt, dass der Ordner "Indicators" in den Ordner "Experts" verschoben wurde. Dann habe ich mt5 deaktiviert und heute wieder aktiviert, die Indikatoren können auch vom Navigator aus verwendet werden, als ob nichts passiert wäre. Wenn ich jedoch den Datenordner erneut öffne, gibt es einen leeren Indikatorenordner, und wenn ich einen Indikator dorthin verschiebe, wird er nicht im Navigator angezeigt. Sie wird nicht im Navigator angezeigt. Die Rückkehr des Ordners Indicators zurück zu MQL5\Indicators löst das Problem.
MT5 (Build 2347) Warum ist der Overhead so groß, wenn man ein Element nach dem anderen zu einem Array mit ArrayResize hinzufügt, wenn der Speicher für diese Elemente im Voraus reserviert wurde?
Bitte erwägen Sie die Verbesserung des internen Reservierungsalgorithmus mit ArrayResize.
Bei Klassen können wir beispielsweise davon ausgehen, dass sie neben dem Konstruktoraufruf eine Art "internes Register in Listen" durchführen.
Und im Rahmen der Reservierung mit ArrayResize kann man neben der direkten Speicherzuweisung versuchen, den Prozess zu optimieren:
- Daten aus dem benachbarten erstellten Element übernehmen (z. B. Zeiger auf eine virtuelle Funktionstabelle);
- eine Vorabregistrierung oder eine Platzreservierung für die "interne Registrierung" von Klassen, die noch nicht erstellt wurden;
MT5 (Build 2347) Warum ist der Overhead so groß, wenn man ein Element nach dem anderen zu einem Array mit ArrayResize hinzufügt, wenn der Speicher für diese Elemente im Voraus reserviert wurde?
Selbst das hilft nicht.
Es macht einfach keinen Sinn. Anstatt sich zu beschleunigen, wird sie nur langsamer.
ZZZ Seltsam, das Ergebnis des Beispiels aus der Dokumentation ist Null.
Arbeitet mit Profiler in MT5 (Build 2345),
Grob gesagt, habe ich mich gefragt, warum zwei Algorithmen, die am Ende das gleiche Ergebnis liefern, mit unterschiedlicher Geschwindigkeit laufen, nämlich mit einem Drawdown von 1,7 Mal im Optimierungsmodus.
...
MT5 (Build 2347) Warum ist der Overhead so groß, wenn man ein Element nach dem anderen zu einem Array mit ArrayResize hinzufügt, wenn der Speicher für diese Elemente im Voraus reserviert wurde?
Wenn Sie vergleichen wollen, sollten Sie das tun:
Wenn Sie vergleichen wollen, sollten Sie das tun:
Auf meiner Seite war der Vergleich so, wie er sein sollte.
Ich weiß, wie viele Elemente in das Array eingefügt werden sollen, und statt sie alle auf einmal zu erstellen, reserviere ich Speicher für nicht erstellte Elemente.
Das Problem ist, wenn ich Speicher reservieren und Array-Elemente nacheinander zu erstellen, dauert es viele Male länger als nur erstellen sie alle auf einmal.
Bei Strukturen ist es also 7 Mal langsamer.
Und bei den Datentypen class und int ist es doppelt so langsam.
Dies ist ein sehr großer Unterschied, den die Entwickler meines Erachtens beseitigen können, wenn sie dies wünschen.