Merkmale der Sprache mql5, Feinheiten und Techniken - Seite 84
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
Können Sie den Benchmark-Code zur Verfügung stellen, um dies zu demonstrieren?
Ergebnis(Freigabe)
Und so sieht es aus, wenn Sie das Programm im Profiling-Modus ausführen
Leider kann man dem Profiler in diesem Fall nicht trauen.
Ergebnis ( Freigabe )
HH Und so sieht es aus, wenn ich es im Profiling-Modus ausführe
Es ist nicht nur unmöglich, dem Profiler in diesem Fall zu glauben, sondern Bench1 läuft 10 Mal schneller als in der Release-Version!
Vielen Dank dafür.
Ergebnis ( Freigabe )
Getestet mit Expert Advisor nach Strategie.
2018.04.16 14:24:28.049 Core 1 OnTester result 39725470 (µs bench1)
2018.04.16 14:26:14.629 Core 1 OnTester result 39270950 (µs bench2)
2018.04.16 14:27:13.566 Core 1 OnTester result 20467067 (µs bench3)
Weitere 2 Mal schneller (aber nicht mehr als 10 Mal schneller, was sicherlich auf die Compiler-Optimierung zurückzuführen ist).
Getestet mit einem Strategieberater.
2018.04.16 14:24:28.049 Core 1 OnTester result 39725470 (µs bench1)
2018.04.16 14:26:14.629 Core 1 OnTester result 39270950 (µs bench2)
2018.04.16 14:27:13.566 Core 1 OnTester result 20467067 (µs bench3)
Es ist immer noch 2-mal schneller (aber nicht mehr als 10-mal schneller, was natürlich auf die Compiler-Optimierung zurückzuführen ist).
Sie messen die Zeit für die Tick-Erzeugung, nicht nur für die OnTick-Berechnung.
Hier ist nur die OnTick-Messung
Bank1
Sitzbank3
Um das Dreifache. Sie können nicht 10-mal schneller werden, weil Sie die BenchX-Funktion mehrfach aufrufen. StringToDouble2 selbst ist tatsächlich 10 Mal schneller.
Sie messen die Zeit noch für die Erzeugung von Ticks, nicht nur für die Berechnung von OnTick.
...Sie haben Recht.
Ich bin wirklich überrascht, dass es 10x schneller ist, aber Ihre Funktion kann nur verwendet werden, wenn Sie wissen, dass die Zeichenfolge einen gültigen Doppelwert enthält.
2018.04.16 17: 14: 16.183 170952_180416 (EURUSD, H1) StringToDouble2 (abcdef) = 5456784.0
Danke, aber auch dieses Skript speichert nicht korrekt.
Auf meinem Monitor ist die Begrenzung auf der rechten Seite mit einer vertikalen Linie markiert, und der Screenshot liegt weit jenseits dieser Linie.
Ich zitiere die Antwort des Dienstesk:
In diesem Fall sollte die ChartScreenShot-Hilfe wörtlich genommen werden
align_mode=ALIGN_RIGHT
[in] Modus für eine schmale Screenshot-Ausgabe. Wert der Aufzählung ENUM_ALIGN_MODE. ALIGN_RIGHT gibt die Ausrichtung am rechten Rand an (Ausgabe vom Ende her). ALIGN_LEFT gibt die linke Ausrichtung an.
Das heißt, wenn Sie die Ausrichtung ALIGN_RIGHT angeben, wird das Diagramm zwangsweise an den rechten Rand gescrollt, was der Ausführung des Befehls
Dieses Verhalten wurde vor vielen Jahren eingeführt (also historisch), als es noch keine ChartNavigate()-Funktion gab. Die Einstellung align_mode=ALIGN_RIGHT garantiert, dass genau der rechte Rand des Diagramms entfernt wird.
Als die Funktion ChartNavigate() hinzugefügt wurde, wurde das Verhalten der Funktion ChartScreenShot nicht geändert.
Wenn Sie also den gewünschten Effekt erzielen wollen (das Diagramm wird nicht zum rechten Rand gescrollt), verwenden Sie den Wert ALIGN_LEFT für den Parameter align_mode.
kann Ihre Funktion nur verwendet werden, wenn Sie wissen, dass die Zeichenkette einen gültigen Double-Wert enthält.
2018.04.16 17: 14: 16.183 170952_180416 (EURUSD, H1) StringToDouble2 (abcdef) = 5456784.0
Behoben, jetzt funktioniert es wie das Original
Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien
Merkmale der Sprache mql5, Feinheiten und Tricks
fxsaber, 2018.04.16 13:23
Wenn Sie die hervorgehobene Konstante entfernen, wird sich die Ausführungszeit der Funktion verdoppeln. Dies zeigt, dass der Compiler nicht immer optimalen Code erzeugt und diese Art von Hinweisen benötigt.
Wenn wir das markierte const entfernen, verdoppelt sich die Laufzeit der Funktion. Dies zeigt, dass der Compiler nicht immer einen optimalen Code erzeugt und diese Art von Hinweisen benötigt.
Interessant, danke.
Bitte bearbeiten Sie Ihren Code nicht mehr, wenn Sie bereits eine Antwort erhalten haben. Ich habe keine Benachrichtigung erhalten, dass Sie ihn aktualisiert haben.
Wenn wir das markierte const entfernen, verdoppelt sich die Laufzeit der Funktion. Dies zeigt, dass der Compiler nicht immer einen optimalen Code erzeugt und diese Art von Hinweisen benötigt.
Sehr interessant...
Haben Sie eine Idee, warum das passiert?
Was ist der Mechanismus?
Um die Breite eines mit MQL5 aufgenommenen Screenshots zu bestimmen, der alle Balken für einen bestimmten Zeitraum enthält, wird die folgende Lösung angeboten.
Als Besonderheit hat sich herausgestellt, dass die Breite des Screenshots bei unterschiedlicher Annäherung an das Diagramm korrigiert werden muss.
Es stellte sich heraus, dass die tatsächlichen "Koeffizienten" für die Variante mit und ohne Skala unterschiedlich waren (speziell für mich).