Schau, wie man Roboter kostenlos herunterladen kann

Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können

Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5

Bibliotheken

TesterBenchmark - Bibliothek für den MetaTrader 5

fxsaber | German English Русский 中文 Español 日本語 Português

Ansichten:
303
Rating:
Stimmen: 20
Veröffentlicht:
2017.11.09 08:07
\MQL5\Include\\MQL5\Experts\

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>

Die Übersetzung aus dem Russischen wurde durch die MetaQuotes Software Corp. ausgeführt
Originalpublikation: https://www.mql5.com/ru/code/18804

Chart Save Template Chart Save Template

Das Skript sichert den aktuellen Chart als Template unter angegebenen Namen.

Report Report

Die Bibliothek für MetaTrader 4/5 erlaubt das Erstellen eines Berichtes auf Grund der Handelshistorie.

Four_MA_Strength Four_MA_Strength

Dieser Indikator zeigt Stärke und Richtung eines Trends von vier gleitenden Durchschnitte an.

Mikahekin_HTF Mikahekin_HTF

Der Mikahekin Indikator mit der Möglichkeit den Zeitrahmen in den Eingabeparameter zu bestimmen.