und werden Sie Mitglied unserer Fangruppe
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Bewerten Sie es im Terminal MetaTrader 5
TesterBenchmark - Bibliothek für den MetaTrader 5
- Ansichten:
- 943
- Rating:
- Veröffentlicht:
- 2017.11.09 08:07
- Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Wenn Sie verschiedene Codeversionen schreiben, könnte Sie deren Auswirkungen auf die Gesamtleistung des Expert Advisors im Tester interessieren. Damit können Sie im Vergleich zu anderen Programmen verstehen, wie optimal der Code ist und das schafft die Voraussetzung für eine weitere Optimierung des Expert Advisors Dieser Ansatz ermöglicht es uns, den "Engpass" in der EA-Performance zu identifizieren.
Der MetaTrader 5 bietet eine exzellente Funktion zur Profilierung des Expert Advisors mit historischen Daten. Aber es gibt einige Nachteile: Es ist langsam (im visuellen Modus), und das Endergebnis wird in relativen Größen dargestellt, d. h. es ist nicht möglich, die Leistung in absoluten Zahlen zu vergleichen.
In MetaTrader 5 wird der EA auf einem lokalen Agenten auch während eines einzelnen Laufs ohne Visualisierung ausgeführt. Manchmal wird ein großer Teil der Testzeit in Anspruch genommen, um das Terminal mit einem entsprechenden lokalen Agenten zu synchronisieren. Dazu werden Zeiten aus folgenden Zeilen verwendet
Core 1 EURUSD,M1: 3387955 ticks, 52608 bars generated. Environment synchronized in 0:00:01.389. Test passed in 0:00:09.422 (including ticks preprocessing 0:00:00.187). Core 1 EURUSD,M1: total time from login to stop testing 0:00:10.811 (including 0:00:01.389 for history data synchronization)
sie bieten eine schlechte Darstellung der Netto-EA/Tester-Performance und können sich in den verschiedenen Durchläufen stark unterscheiden.
Die Netto-Operationsdauer des Strategy Tester ist die Zeit vom ersten Tick-Ereignis (dem ersten OnTick) bis zum letzten Tick im getesteten Intervall. Unmittelbar nach dieser Pause ruft der Tester OnTester auf (gefolgt von OnDeinit).
Die Nettolaufzeit eines Tests im Strategie Tester
Die Bibliothek kann durch eine Zeile vom EA verwendet werden
#include <TesterBenchmark.mqh>
und es werden die Daten der Nettolaufzeit ins Log geschrieben.
Core 1 2017.07.21 23:59:59 Interval = 8.842 s., Count = 3387955, 383166.1 unit/sec Core 1 EURUSD,M1: 3387955 ticks, 52608 bars generated. Environment synchronized in 0:00:01.389. Test passed in 0:00:09.422 (including ticks preprocessing 0:00:00.187). Core 1 EURUSD,M1: total time from login to stop testing 0:00:10.811 (including 0:00:01.389 for history data synchronization)
Außerdem, wenn Sie im Tester von einem einzelnen Lauf in einen Optimierungsmodus wechseln (es ist nicht nötig, Optimierungsbereiche für MetaTrader 5 anzugeben), führt die Bibliothek den EA für die angegebene Anzahl von Zeiten aus und erstellt die Testerleistungsstatistik, auf deren Grundlage Sie die reine Leistung des Testers verstehen können.
------ OnTesterInit i = 0 Pass = 0 OnTester = 8.687 s.: Count = 3387955, 390002.9 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 i = 1 Pass = 1 OnTester = 8.702 s.: Count = 3387955, 389330.6 unit/sec, Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 iMin = 0 Results[iMin] = 8.687s. iMax = 1 Results[iMax] = 8.702s. Amount = 2 Mean = 8.694 s. - 83.89% OnTesterDeinit ------ Interval = 20.729 s., Count = 0, 0.0 unit/sec
In diesem Fall ist es klar, dass es zwei Starts auf ein und demselben lokalen Agenten gab. Es werden die minimale, maximale und durchschnittliche Berechnungszeit angezeigt. Zusätzlich wird die Gesamtzeit der Optimierung (Intervall) angezeigt. Die prozentuale Kennlinie (83,89%) zeigt an, wie viel Prozent der Gesamtzeit des Optimierers im Durchschnitt vom reinen Betrieb des Testers eingenommen wird (die Zeit, die für die Synchronisierung mit Agents benötigt wird, wird berücksichtigt).
OnTick Profilierung
Durch eine weitere Zeile
#define PROFILER_OnTick // Measures the net time of all OnTick executions, may slightly slows down the total operation #include <TesterBenchmark.mqh>
sehen Sie die Zeit, die für die Ausführung von OnTick aufgewendet wurde, ohne Berücksichtigung der Zeit, die für die Simulation von Handelsumgebung, Performance usw. aufgewendet wurde.
------ OnTesterInit i = 0 Pass = 0 OnTester = 9.540 s.: OnTick Profiler: Count = 3387955, Interval = 8.079 s., 419359.4 unit/sec , Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 i = 1 Pass = 1 OnTester = 9.471 s.: OnTick Profiler: Count = 3387955, Interval = 8.029 s., 421956.9 unit/sec , Agent = C:\Program Files\Alpari Limited MT5\Tester\Agent-127.0.0.1-3000 iMin = 1 Results[iMin] = 9.471s. iMax = 0 Results[iMax] = 9.540s. Amount = 2 Mean = 9.505 s. - 98.86% OnTesterDeinit ------ Interval = 19.231 s., Count = 0, 0.0 unit/sec
Beispiel
Die Bibliothek wird mit einem Beispiel-EA (MQL4/5) mit Header ausgeliefert, das hilft, eine der praktischen Anwendungen der Bibliothek zu verstehen.
#include <TesterBenchmark.mqh> // Wenn beide folgenden Include-Zeilen kommentiert werden, dann wird die Trade-Logik in purem MQL5 - trade API geschrieben // Andernfalls ist eine unkommentierte Zeile der verwendete API-Wrapper. // TesterBench zeigt die Performance der drei APIs an. // #include <MT4Orders.mqh> // https://www.mql5.com/de/code/16006 // #include <Trade\Trade.mqh>
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/18804
Das Skript sichert den aktuellen Chart als Template unter angegebenen Namen.
ReportDie Bibliothek für MetaTrader 4/5 erlaubt das Erstellen eines Berichtes auf Grund der Handelshistorie.
Dieser Indikator zeigt Stärke und Richtung eines Trends von vier gleitenden Durchschnitte an.
Mikahekin_HTFDer Mikahekin Indikator mit der Möglichkeit den Zeitrahmen in den Eingabeparameter zu bestimmen.