MetaTrader 5 Hilfe

Tester Features

Die Idee des automatischen Handelns ist attraktive, weil ein Handelsroboter ohne Unterbrechung, rund um die Uhr arbeiten kann. Ein Roboter hat keine Probleme mit Müdigkeit, Zweifel, Angst oder anderen psychologischen Problemen. Sie müssen lediglich klare Regeln zum Handeln im Algorithmus festlegen und der Roboter ist bereit für Sie zu arbeiten. Zuerst müssen Sie jedoch sicherstellen, dass die beiden folgenden Bedingungen zutreffen:

  • Der Expert Advisor führt Trades im Rahmen der Regeln Ihrer Handelsstrategie aus;
  • Die Handelsstrategie zeigt Profite während des Backtests des EAs auf.

Alle diese Fragen können beantwortet werden mit dem eingebauten Strategietester der Handelsplattform.

Order-Auslösund und -Ausführung

Für Nicht-Exchange Instrumente, geschieht das Auslösen aller Orders über den Bid- und Ask-Preis. Die Ausführung wird mit dem aktuellen Bid- und Ask-Preis durchgeführt am Moment des Auslösens.

Für Exchange Instrumente geschieht die Ausführung und Zeichnung der Charts über den Preis des zuletzt ausgeführten Deals. Limit Orders werden ausgelöst mit dem Bid- und Ask-Preis. Dabei werden Limit Orders zu dem Preis ausgeführt, der in der Order (ohne Slippage) angegeben wurde, alle anderen Ordertypen werden zu aktuellen Bid- und Ask-Preisen ausgeführt (Slippage möglich).

Nutzen wir Si-6.16 als Beispiel. Zu den aktuellen Preisen Bid=72570, Ask=72572, und Last=72552, wird eine Buy Stop Order zum Preis von 72580 platziert. Neue Preise treffen ein:

  • Bid=72588
  • Ask=72590
  • Last=72580

Für Exchange Instrumente geschieht die Ausführung über den Preis des zuletzt ausgeführten Deals. Daher wird die Order durch den neuen Last=72580 Preis ausgelöst. Die Order wird zum aktuellen Preis ausgegührt, hier: Ask=72590.

Auslösung und Ausführung einer Buy Stop Order für ein Exchange Instrument

In den Testmodi "Nur Eröffnugspreise" und "1 Minute OHLC" werden Pending Orders und SL/TP Orders zu den in diesen Orders angegebenen Preisen ausgeführt. Der Algorithmus der Ausführung zum Marktpreis, der in den präzisen Modi (alle Ticks und reale Ticks) verwendet wird, passt für die groben Modi nicht. In den letzteren Modi werden keine Zwischenticks generiert, und der angegebene Preis kann sich stark vom Marktpreis im Moment der Ausführung (Open oder OHLC) unterscheiden. Die Ausführung von Trades zu einem angegebenen Preis in den Modi "Nur Eröffnungspreise" und "1 Minute OHLC" liefert genauere Testergebnisse.

Wie Balken geformt werden

Für Börseninstrumente werden Balken im Strategietester mithilfe von Ticks mit einem nonzero Last-Preis geformt. Dabei können Bid- und Ask-Preise eingehen, Indikatoren werden berechnet, aber keine Balken werden geformt. Es gibt keine zero Last-Preise im "Alle Ticks" Modus. Aus diesem Grund wird jedes neue Tick den Balken ändern.

Spread Simulation

Der Unterschied zwischen Bid- und Ask-Preis ist der Spread. Während des Testens wird der Spread von historischen Daten genommen. Wenn der historische Spread kleiner oder gleich null ist, wird der letzte bekannte Spread genutzt.

Im Strategietester wird der Spread immer als variabel angesehen.

Globale Variablen der Handelsplattform

Globale Variablen des Tradings, werden auch während des Tests emuliert, sind jedoch nicht verwandt zu den globalen Variablen der Plattform, welche mit der Taste F3 aufgerufen werden können. Das bedeutet, dass alle Operationen mit globalen Variablen der Handelsplattform nicht während dem Testen von Strategien verwendet werden auf dem testenden Agenten.

Historiendownload während dem Testen

Die Handelsplattform synchronisiert und lädt die Historie eines Symbols automatisch vom Handelsserver herunter vor dem Test. Vor dem ersten Test lädt die Plattform einmalig alle verfügbaren historischen Daten eines Symbols herunter. Im Nachhinein müssen nur noch neue Daten heruntergeladen werden.

Ein Test-Agent erhält die historischen Daten eines Symbols direkt nach dem Start des Tests. Wenn Daten von anderen Instrumenten während des Tests genutzt werden (bspw. bei Multi-Währungs-Expert Advisors), fragt der Agent die benötigten historischen Daten während des ersten Aufrufs dieser Daten an. Die historischen Daten werden, wenn verfügbar, dem Agenten zur Verfügung gestellt. Wenn Daten nicht verfügbar sind, versucht die Plattform diese vom Handelsserver herunterzuladen und dem Agenten zur Verfügung zu stellen.

Daten von zusätzlichen Instrumente werden auch benötigt für das Berechnen von Trades mit unterschiedlichen Währungen. Wenn bspw. eine Strategie im EURCHF getestet wird, die Kontowährung jedoch USD ist, benötigt der Strategietester Daten der Währung EURCHF und USDCHF vor dem ersten Trade, auch wenn das Symbol USDCHF nicht direkt genutzt wird für das Eröffnen von Trades.

Die zusätzlichen Handelshistorie kann beim Aufruf bestimmter Funktionen aus einem MQL5-Programm geladen werden:

Upload erfolgt

Upload erfolgt nicht

Beim Aufruf von SymbolInfoDouble mit den Parametern:

  • SYMBOL_BID
  • SYMBOL_BIDHIGH
  • SYMBOL_BIDLOW
  • SYMBOL_ASK
  • SYMBOL_ASKHIGH
  • SYMBOL_ASKLOW
  • SYMBOL_LAST
  • SYMBOL_LASTHIGH
  • SYMBOL_LASTLOW
  • SYMBOL_TRADE_TICK_VALUE
  • SYMBOL_TRADE_TICK_VALUE_PROFIT
  • SYMBOL_TRADE_TICK_VALUE_LOSS

Beim Aufruf von SymbolInfoInteger mit den Parametern:

  • SYMBOL_VOLUME
  • SYMBOL_VOLUMEHIGH
  • SYMBOL_VOLUMELOW
  • SYMBOL_TIME
  • SYMBOL_SPREAD

При вызове SymbolInfoTick

Beim Aufruf von:

  • SymbolInfoString
  • SymbolName
  • SymbolSelect
  • SymbolInfoMarginRate
  • SymbolInfoSessionQuote
  • SymbolInfoSessionTrade
  • Andere Funktionen
  • SymbolInfoDouble und SymbolInfoInteger mit anderen Parametern, die links nicht angegeben sind

Vor dem Testen eine Strategie mit mehreren Währungen, ist es empfohlen alle nötigen historischen Daten im Vorfeld herunterzuladen in der Handelsplattform. Dies hilft Verzögerungen bei der Optimierung vorzubeugen. Sie können historische Daten zum Beispiel herunterladen, indem Sie ein Chart öffnen und bis zum Ende der Historie scrollen.

Der Test-Agent erhält die historischen Daten von der Plattform in komprimierter Form. Bei erneuten Tests, müssen historische Daten nicht erneut heruntergeladen werden.

  • Die Plattform lädt historische Daten nur einmal vom Handelsserver herunter, wenn der Agent auf diese zum ersten Mal zugreift. Die Historie wird in komprimierter Form heruntergeladen.
  • Ticks werden nicht gesendet, sondern automatisch bei den Agenten generiert.

Testen mehrerer Währungen

Der Strategietester erlaubt das Testen von Strategien die mehrere Handelssymbole betrachten. Solche EAs werden als Multi-Currency Expert Advisor bezeichnet, da dies in älteren Versionen der Plattform nicht möglich war und nur ein Symbol gehandelt werden konnte. Im Strategietester, können alle verfügbaren Instrumente getestet werden.

Der Tester lädt automatisch die benötigten historischen Daten des Symbols von der Plattform, nicht dem Handelsserver, herunter beim ersten Aufruf dieser historischen Daten.

Der Testing Agent lädt die fehlenden historischen Daten vor dem Start der Tests herunter, die zur Berechnung von Indikatoren benötigt werden. Für Zeitrahmen von D1 oder niedriger, ist die kleinste Zeitspanne die heruntergeladen wird ein Jahr. Das heißt, wenn Sie bspw. einen Intervall vom 01.05.2015 - 01.06.2015 im M15 testen, fragt der Agent die Historie vom gesamten Jahr 2015 von der Plattform an. Für den W1 (Eine-Woche) Zeitrahmen, fragt der Agent eine Historie von 100 Kerzen an, was etwa 2 Jahre Historie bedeutet. Für den Test im MN, also Monatszeitrahmen, fragt der Agent eine Historie von 8 Jahren an (12 Monate * 8 Jahre = 96 Monate).

Wenn die benötigten Daten nicht zur Verfügung stehen, wird das Startdatum des Tests automatisch nach vorne geschoben um die benötigten Daten zur Verfügung stellen zu können.

Marktübersicht wird auch emuliert während des Testens. Standardgemäß ist nur ein Symbol verfügbar in der Marktübersicht des Testers - das gleiche, auf dem der Tester läuft. Alle benötigten Symbole werden automatisch mit der Marktübersicht des Strategietesters (nicht der Plattform) verbunden.

Bevor Sie starten Experten mit mehreren Währungen zu testen, wählen Sie die benötigten Symbole zum Testen in der Marktübersicht aus und laden die historischen Daten herunter. Während des ersten Aufrufs "fremder" Symbole, wird die Historie automatisch zwischen der Handelsplattform und Agenten synchronisiert. Ein "fremdes" Symbol ist eines, das abweicht, von dem welches Sie testen.

Wenn solch ein Symbol das erste Mal aufgerufen wird, wird der Test unterbrochen und die Historie des Symbols von der Plattform auf den Agenten übertragen. Die Tick-Generierung für das Symbol wird zur gleichen Zeit aktiviert.

Für jedes Symbol wird die Tick-Generierung individuell erstellt, je nach ausgewähltem Generierungsmodus.

Das bedeutet, dass es keinen extra Aufwand benötigt um mehrere Währungen in der Handelsplattform zu testen. Sie müssen nur die entsprechenden Charts in der Plattform öffnen. Die Historie wird für jedes nötige Symbol automatisch heruntergeladen, solange diese zur Verfügung steht.

Zeit Simulation im Strategietester

Während Tests ist die lokale Zeit immer gleich zur Serverzeit. Die Serverzeit entspricht korrespondiert immer mit der GMT Zeit.

Im Strategietester sind Lokal-, Server- und GMT-Zeit identisch, für den Fall, dass keien Verbindung zum Server besteht. Die Testergebnisse sollten daher immer gleich sein, egal ob eine Verbindung zum Server besteht oder nicht. Informationen über die Serverzeit werden nicht lokal gespeichert, sondern vom Server geliefert.

Grafische Objekte beim Testen

Während dem Testen/Optimieren werden keine grafischen Objekte gezeichnet. Dementsprechend erhält ein Expert Advisor den Wert Null zurück, wenn dieser Eigenschaften grafischer Objekte anfragt.

Diese Limitierung existiert nicht im visuellen Modus.

Synchronisierung von Kerzen im Modus "Eröffnungspreise" ("Open prices only")

Der Strategietester erlaubt das Testen von Strategien die mehrere Handelssymbole betrachten. Ein Multi-Währungs-EA ist ein Expert Advisor mit 2 oder mehr Handelssymbolen.

Das Testen von Strategien mit mehreren Symbolen erfordert einige technische Anforderungen für den Tester:

  • Generierung von Ticks für diese Symbole;
  • Berechnung von Indikatorwerten für alle Symbole;
  • Berechnung von Margin-Anforderungen für alle Symbole;
  • Synchronisierung von generierten Tick-Sequenzen für alle Symbole.

Der Strategietester generiert Tick-Sequenzen für jedes Instrument, je nach gewähltem Handelsmodus und spielt diese ab. Eine neue Kerzewird für jedes Symbol geöffnet, egal wie die Kerze auf einem anderen Symbol geöffnet wurde. Das bedeutet, dass beim Testen mehrerer Währungen, Situationen auftreten können, bei der eine neue Kerze in einem Symbol geöffnet wird, aber es noch keine neue Kerze auf einem anderen Symbol gibt. Genauso wie bei Realtime-Preisen.

Diese authentische Historien-Simulation im Strategietester verursacht keine Probleme, solange die Modi "Jeder Tick" oder "1 Minute OHLC" als Testmodi ausgewählt sind. Für diese Modi, ist die Anzahl an generierten Ticks für eine Kerze genug um auf die Synchronisierung von Kerzen verschiedener Symbole zu warten. Aber wie testen wir Multi-Währungs-Strategien im "Nur Eröffnungspreise"-Modus, bei dem die Synchronisierung der Kerzen verschiedener Handelsinstrumente benötigt wird? In diesem Modus wird ein EA nur an einem Tick aufgerufen, dem Tick, der die Kerze eröffnet.

Beispiel: Wir testen einen EA auf EURUSD und eine neue Stundenkerze hat sich geöffnet. Diese Tatsache lässt sich ganz einfach erkennen, weil in diesem Modus der Event eines neuen Ticks gleichbedeutend ist mit dem Öffnen einer neuen Kerze. Jedoch gibt es keine Garantie, dass eine neue Kerze eröffnet wurde im GBPUSD, der im EA genutzt wird.

Tester Agenten

Das Testen in der Plattform wird durchgeführt mit Tester Agenten. Lokale Agenten werden automatisch aktiviert und genutzt. Die Anzahl von lokalen Agenten ist gleich mit der Anzahl an Prozessorkernen.

Jeder Agent hat seine eigene Kopie globaler Variablen, die nicht mit der Plattform verwandt sind. Die Plattform fungiert als Manager, welcher Aufgaben an lokale und entfernte (Remote) Agenten verteilt. Sobald ein Agent die Aufgabe erledigt hat mit den angegebenen Parametern, gibt er das Ergebnis an die Handelsplattform zurück. Nur ein einzelner Agent wird einen einzelnen Test genutzt.

Der Agent speichert die Historie, die er von der Plattform erhalten hat in einem separatem Ordner, entsprechend des Symbolnamens, bspw. wird die Historie vom EURUSD im Ordner namens EURUSD gespeichert. Zusätzlich wird die Historie des Instruments je nach Quelle der Historie separat gespeichert. Die Struktur für das Speichern der Historie sieht wie folgt aus:

tester_catalog\Agent-IPaddress-Port\bases\name_source\history\symbol_name

Beispielsweise wird die Historie vom EURUSD, die vom Server "MetaQuotes-Demo" heruntergeladen wurde folgendermaßen gespeichert: tester_catalog\Agent-127.0.0.1-3000\bases\MetaQuotes-Demo\EURUSD.

Ein lokaler Agent geht in den Standby-Modus über und wartet auf die nächste Aufgabe für weitere 5 Minuten, nachdem er eine Aufgabe beendet hat. Nach der Warte-Periode wird der lokale Agent beendet und aus dem CPU-Speicher entfernt.

Wenn der Test unterbrochen wird durch den Nutzer, z.B. durch den "Abbrechen" Button oder durch das Schließen der Plattform, werden alle lokalen Agenten sofort geschlossen und aus dem Speicher entfernt.

Datenaustausch zwischen Plattform und Agenten

Wenn Sie einen Test starten, bereitet die Plattform mehrere Parameter-Blöcke vor, die an den Agenten gesendet werden:

  • Eingabeparameter zum Testen (Simulationsmodus, Testinterval, Instrumente, Optimierungskriterien, etc.)
  • Die Liste an Symbolen, ausgewählt in der Marktübersicht
  • Die Spezifikationen des getesteten Instruments (Kontraktgröße, minimales Stop-Level für Stop Loss und Take Profit, etc)
  • Der zu testende Expert Advisor und die Werte der Eingabeparameter
  • Informationen über zusätzliche Dateien (Bibliotheken, Indikatoren, Daten)

Für jeden Block an Parametern, wird ein digitaler Fingerabdruck in Form eines MD5 Hash Wertes erstellt und an den Agenten gesendet. Der MD5 Hash ist einzigartig für jedes Set an Parametern. Seine Größe ist viel kleiner als, wenn alle Informationen zur Berechnung einzeln übertragen werden würden.

Der Agent erhält die Hashes und vergleicht diese mit gespeicherten Sets. Wenn der Fingerabdruck der gegebenen Parameter nicht verfügbar ist auf dem Agenten oder der Hash abweicht, fragt der Agent die Parameter-Blöcke an. Das reduziert den Traffic zwischen Plattform und dem Agenten.

Nach dem Testen gibt der Agent die Ergebnisse an die Plattform zurück, die in den Testergebnissen und Optimierungsergebnissen angezeigt werden: Profit, Anzahl an Orders, Sharpe Ratio usw.

Während der Optimierung verteilt die Plattform die Aufgaben an die Agenten in kleinen Paketen. Jedes Paket enthält mehrere Aufgaben, wobei jede Aufgabe ein einzelner Test mit individuellen Eingabeparametern ist. Das reduziert die Zeit, die zum Datenaustausch zwischen Plattform und Agenten benötigt wird.

Agenten speichern niemals EX5 Dateien, die von der Plattform übermittelt werden (EA, Indikatoren, Bibliotheken, etc.), aus Sicherheitsgründen, sodass ein Computer die Daten nicht selbst nutzen kann. Alle anderen Dateien, inklusive DLL werden in einer Sandbox aufgezeichnet. Sie können Expert Advisor mit DLL-Aufrufen auf Remote-Agenten nicht testen.

Testergebnisse werden zur Plattform in einem speziellen Ergebnis-Cache hinzugefügt, von welchem diese einfach aufgerufen werden können. Für jedes Parameter-Set sucht die Plattform nach Ergebnissen im Cache um wiederholte Testläufe zu vermeiden. Wenn kein Ergebnis gefunden wird für ein Parameter-Set, erhält ein Agent diesen als Testaufgabe.

Der Traffic zwischen Plattform und Agenten ist verschlüsselt.

Ticks werden nicht gesendet, sondern automatisch bei den Agenten generiert.

Nutzung des geteilten Ordners von Handelsplattformen

Alle Agenten sind voneinander und der Handelsplattform isoliert: Jeder Agent hat seinen eigenen Ordner in dem die Logs gespeichert sind. Zusätzlich, werden alle Dateioperationen des Agenten während des Testens im Ordner agent_name/MQL5/Files durchgeführt. Sie können jedoch die Interaktion zwischen lokalen Agenten und der Handelsplattform in einem geteilten Ordner implementieren.

Nutzung von DLLs

Um die Optimierung zu beschleunigen, können Sie Remote Agenten zusätzlich zu lokalen Agenten nutzen. In diesem Fall gibt es einige Limitierungen für Remote Agenten. Ergebnisse der Print() Funktion, sowie Nachrichten über das Schließen und Öffnen von Positionen werden nicht in den Logs der Remote Agenten aufgezeichnet. Nur das Nötigste an Informationen wird den Logs hinzugefügt, um zu verhindern, dass die Festplatte eine gigantische Menge an Nachrichten aufzeichnen muss.

Des Weiteren ist die Nutzung von DLL-Dateien untersagt in Expert Advisors. DLL Calls sind auf Remote Agenten absolut untersagt. Auf lokalen Agenten ist die Nutzung von DLL Calls in Expert Advisors erlaubt, solange "DLL Importe erlauben" aktiviert ist.

Expert Advisors

Wenn Expert Advisor dritter Parteien genutzt werden, die DLL Calls benötigen, sollten Sie sich der Risiken bewusst sein, die diese Optionen mit sich bringt. Egal wie Expert Advisor genutzt werden, zum Testen oder auf dem Chart.