![Der Algorithmus der Tick-Erzeugung im Strategietester des MetaTrader 5 Terminals](https://c.mql5.com/i/articles/overlay.png)
Der Algorithmus der Tick-Erzeugung im Strategietester des MetaTrader 5 Terminals
Erstellen von Expert Advisors – automatisierten Handelssystemen in MQL5
Das MetaTrader 5 Terminal enthält eine integrierte Entwicklungsumgebung für die Entwicklung vollautomatischer Strategien (Handelsroboter), die ohne menschliche Eingriffe handeln können. Ein weiterer Name für diese Handelsroboter lautet Expert Advisors. Expert Advisors und technische Indikatoren für das MetaTrader 5 Terminal werden in der Sprache MQL5 geschrieben, die alle Vorteile moderner Programmiersprachen bietet:
- Ausführungsgeschwindigkeit;
- Unterstützung objektorientierter Programmierung (OOP);
- Debugging-Möglichkeit.
Die Möglichkeit, Programme in MQL5 zu debuggen, erlaubt es Ihnen, einen Code mit höchstmöglicher Sicherheitsebene zu erstellen, doch obwohl diese Bedingung erfüllt sein muss, ist sie nicht die einzige Bedingung für die Entwicklung eines profitablen Handelssystems. Handelssysteme, die positive Ergebnisse über ein großes Intervall an historischen Daten liefern können, werden als robust bezeichnet, was in der Programmierung bedeutet, dass sie widerstandsfähig gegen Fehler und Störungen sind.
Testen von Handelsstrategien
Bevor Sie Ihr Kapital einem Expert Advisor anvertrauen, müssen Sie sicherstellen, dass seine Regeln für das Öffnen und Schließen von Positionen sowie seine Regeln für die Kapitalverwaltung eine Gewinnerwartung erlauben. Am einfachsten lässt sich dieser Test durch das Simulieren der Arbeit des Advisors anhand verfügbarer historischer Daten umsetzen.
Das MetaTrader 5 Client Terminal verfügt über eine spezielle integrierte Komponente, einen Strategietester zum Abrufen von Ergebnissen der Arbeit des Advisors mit historischen Daten. Der Prozess des einmaligen Durchlaufs des Expert Advisors auf einem Intervall von Daten wird als Testing des Expert Advisors bezeichnet. Dieser einmalige Test liefert uns eine große Menge an nützlichen Informationen, die wir benötigen, um Schlussfolgerungen über die Robustheit des Expert Advisors ziehen zu können.
Doch um diesen Ergebnissen vertrauen zu können, muss der Testprozess die tatsächliche Arbeitsumgebung, in der der Expert Advisor ausgeführt wird, so nah wie möglich modellieren. Der Tester von MetaTrader 5 nutzt eine Tick-für-Tick-Modellierung der Preise unter Zuhilfenahme der historischen Werte von Spreads für jedes Instrument, auf dem eine Handelsoperation ausgeführt wird.
Zur Geschichte des Strategietesters
MetaTrader 3
- Vier-Preise-Modell – der Preis durchlief konsekutiv Open, Low, High und Close bei haussierenden Kerzen und Open, High, Low und Close bei baissierenden Kerzen;
- Modell "Every 1 point" – nutzt ein 3-5-3-Wellenmodell, in dem der Preis konsekutiv eine Dreier-Welle, eine Fünfer-Welle und eine weitere Dreier-Welle mit einem Inkrement von 1 Punkt durchläuft;
- Modell "Spread/2" – nutzt das gleiche Modell wie "Every 1 point", aber das Preisinkrement ist die Hälfte des vom Benutzer angegebenen Spreads.
Die Preismodellierung basierte immer auf den Balken des getesteten Timeframes. Informationen aus niedrigeren Timeframes wurden nicht genutzt. Der Tester im MetaTrader 3 Terminal hatte viele Unzulänglichkeiten, darunter eine niedrige Testgeschwindigkeit, geringe Genauigkeit und das Fehlen der Möglichkeit, Expert Advisors nach Eingabeparametern zu optimieren.
MetaTrader 4
Das MetaTrader 4 Terminal ersetzte das dritte Terminal und umfasste die neue Kompilierungssprache MQL4 (die vorhergehende MQL-II wurde interpretiert). Zudem wurde eine neue Herangehensweise an das Testing umgesetzt. Das Testing war nun in drei Modi möglich:
- Jeder Tick (Every Tick) – Erzeugung von Ticks innerhalb der Kerze, ermöglicht eine möglichst nahe Modellierung der Arbeit des Expert Advisors am echten Handel innerhalb der Testumgebung;
- Kontrollpunkte (Control points) – ein Kompromiss aus Genauigkeit und Geschwindigkeit des Testings;
- Nach Öffnungspreisen (Open Price) – der Expert Advisor wird nur am Anfang der Kerze gestartet, wodurch eine schnelle Bewertung der Strategie ermöglicht wird.
Ein wichtiger Unterschied zum Tester des dritten Terminals war, dass die Teststrategie des MetaTrader 4 Terminals für die Handelssimulation die Preisdaten des neuesten verfügbaren Timeframes nutzte. Somit sind die Testergebnisse dank des Vorhandenseins der minütlichen Historie im gesamten Testintervall maximal nahe an den online erhaltenen Ergebnissen. Bei fehlenden zugrunde liegenden Timeframes wird die Preisentwicklung innerhalb des Balkens auf die gleiche Weise simuliert wie im Tester des MetaTrader 3 Terminals.
Zusätzlich haben wir eine Möglichkeit erhalten, durch direkte Nummerierung der Eingabeparameter sowie mithilfe eines genetischen Algorithmus zu optimieren. Dies gab uns eine Gelegenheit, den Prozess der Optimierung wesentlich zu beschleunigen, insbesondere bei Strategien mit zahlreichen Eingabeparametern. Es ist nun möglich, das tatsächliche Testing im visuellen Modus durchzuführen. Das war ein großer Schritt, den die Händler zu schätzen wussten.
Das neue MetaTrader-Terminal der 5. Generation basiert auf den Erfahrungen aus der Konzeption der vorherigen Terminals, was auch für den Strategietester gilt. Es gibt nun eine Möglichkeit, Strategien mit mehreren Währungen zu testen, d. h. Strategien, die gleichzeitig auf mehreren Instrumenten handeln.
Die Optimierung von Strategien kann jetzt nicht nur auf allen verfügbaren Prozessorkernen durchgeführt werden, sondern auch auf Remote-Agenten auf anderen Computern im LAN und im Internet. Dadurch können Sie die Leistungsfähigkeit des Testers ausbauen und vorher nicht mögliche Berechnungen in der Cloud direkt in MQL5 durchführen.
Doch für ein grundlegendes Verständnis des Testprozesses im MetaTrader 5 Terminal ist es wichtig, zu verstehen, wie die Preise im Strategietester modelliert werden.
Algorithmus der Tick-Erzeugung
Der Strategietester des MetaTrader 5 Terminals nutzt nur eine Art der Preismodellierung beim Testing – die Erzeugung von Ticks auf Basis bestehender historischer Daten auf minütlichen Timeframes der verwendeten Symbole. Die restlichen Simulationsmodi aus MetaTrader 4 wurden entfernt, da sie trotz ihrer hohen Geschwindigkeit keine genauen Tests liefern konnten.
Der Gebrauch eines M1-Timeframes im Tester ermöglicht eine sehr genaue Simulation der Preisbewegung mit einer minimalen Fehlerquote im Vergleich zur Simulation von Ticks auf Basis älterer Timeframes. Somit ist die Fehlerquote bei der Modellierung von Preisen im Strategietester von MetaTrader 5 unerheblich und die Unterschiede zwischen dem simulierten und realen Preis können nur innerhalb eines Minutenbalkens liegen.
Die Möglichkeit, die Optimierung mit dieser Herangehensweise auf lokalen und Remote-Agenten durchzuführen, kann die steigende Testdauer ausgleichen. Die Erzeugung von Ticks basiert auf den zwischengespeicherten Minuteneinträgen im ganzzahligen Format. Somit werden Ticks sehr schnell erzeugt.
Die Balken aller erforderlichen Timeframes werden in der historischen Datenbank des Testers auf herkömmliche Weise mit dem Empfang der erzeugten Ticks geformt (genauso wie im Client Terminal). Das Tick-Volumen 1 des Minutenbalkens unterliegt keiner Erzeugung und kann mit dem Wert Close erfasst werden.
Ein Balken mit 2 Ticks wird ebenfalls nicht erzeugt. Zuerst wird sein Tick-Wert als Open erfasst, anschließend wird ein Tick mit dem Wert Close erfasst.
Ein Balken mit 3 Ticks wird gemäß einem Schema erzeugt. Für Balken mit drei Ticks gibt es nur 4 Muster der Balkenentwicklung:
- Gingen in eine Richtung und kehrten zum Niveau von Open zurück
- Gingen in eine Richtung, fielen zurück und erreichten das Niveau von Open
- Gingen in eine Richtung, fielen zurück, erreichten aber nicht das Niveau von Open
- Mehrere Punkte in einer Richtung
Unterstützungspunkt
Wenn der Balken mehr als 3 Ticks hat, werden zuerst die Unterstützungspunkte erzeugt. Die Menge der Unterstützungspunkte kann nicht höher sein als das Volumen des Ticks. Der Öffnungspreis ist in der Menge der Unterstützungspunkte nicht enthalten, da er der Ausgangspunkt ist. Die maximale Menge von Unterstützungspunkten beträgt 11.
Unterstützungspunkte werden zwischen dem Öffnungsschatten, der Spannweite der Kerze und dem schließenden Schatten der Kerze verteilt.
Abhängig von der Menge von Ticks folgt die Verteilung der Unterstützungspunkte dem folgenden Schema (Öffnungsschatten - Umfang der Kerze - schließender Schatten):
3 - 5 - 3Wenn der Kerze einer der Schatten fehlt, erhält die Spannweite der Kerze die Unterstützungspunkte dieses Schattens.
2 - 6 - 2
2 - 5 - 2
2 - 4 - 2
2 - 3 - 2
1 - 4 - 1
1 - 3 - 1
1 - 2 - 1
1 - 1 - 1
Der Umfang der Kerze wird durch eine ungerade Menge von Unterstützungspunkten geformt. Wenn der Umfang eine gerade Menge von Unterstützungspunkten hat, erhält den "zusätzlichen" Punkt einer der Schatten unter der Bedingung, dass der Schatten bereits über 2 Punkte verfügt. Andernfalls verschwindet der "zusätzliche" Punkt einfach.
Bei baissierenden (schwarzen) Kerzen werden Unterstützungspunkte nach dem 3-5-3-Muster ähnlich erzeugt:
Falls die Kerze eine Doji ist, das heißt Close == Open, werden die vorherigen Kerzen analysiert, und wenn die vorhergehende Kerze steigend war, gilt diese Doji als fallende Kerze.
Wenn der Schatten durch drei Unterstützungspunkte geformt wird und die ganzzahligen Werte in Höhe von 3/4 der Größe des Schattens und 1/2 der Größe des Schattens gleich sind (das passiert, wenn der Unterschied zwischen Open und Low oder Open und High nicht mehr als 2 Punkte beträgt), verändert sich die Erzeugung des Schattens auf folgende Weise:
Wenn der Schatten durch zwei Unterstützungspunkte erzeugt wird, werden die Unterstützungspunkte auf die folgende Weise angeordnet:
Formierung von Unterstützungspunkten von Low bis High
Der Umfang der Kerze wird durch Impulswellen erzeugt. Die Menge der Wellen wird folgendermaßen errechnet:
Menge der Wellen = (Menge der Unterstützungspunkte im Umfang + 1) / 2.
Wenn die Menge der Unterstützungspunkte im Umfang der Kerze beispielsweise gleich 5 ist (Schema 3-5-3), werden 3 Wellen erzeugt = (5+1) / 2.
Jede Impulswelle hat die Länge step in Punkten, die durch die folgende Formel berechnet wird:
step=(High-Low-1)/(Menge der Wellen)+1
Zum Beispiel: Der Umfang der Kerze (High - Low) = (1,3113 - 1,3100) = 0,0013 beträgt 13 Punkte. Dann ist die Wellenlänge step = (13-1)/3+1 = 5 Punkte.
Nach dem Impuls werden step Punkte um 1 Punkt zurückgefahren. Im weiteren Verlauf des Zyklus werden die Positionen der Unterstützungspunkte berechnet (für eine haussierende Kerze):
prev=low
Zyklus
n1=prev+step
n2=prev+step-1
prev=n2
mit:
- n1 – erster Unterstützungspunkt des Impulses
- n2 – zweiter Unterstützungspunkt – Punkt des Zurückfahrens.
Wenden wir den Algorithmus auf eine haussierende Kerze in einem 3-5-3-Schema an, wobei die Menge der Wellen gleich 3 ist und step = 5 Punkte, Punkt = 0,0001:
- Erster Schritt. Variable prev = Low = 1,3100, Eintritt in den Zyklus.
- Berechnung der Daten für die erste Welle
- Wir berechnen die Position des Punktes n1 = prev + step = 1,3100 + 5 * 0,0001 = 1,3105.
- Wir berechnen die Position des Punktes n2 = prev + step-1 = 1,3100 + 5 * 0,0001-1 * 0,0001 = 1,3104;
- Wir weisen den Wert n2 prev = 1,3104 der Variable prev zu;
- Berechnung der Daten für die zweite Welle
- Wir berechnen die Position des Punktes n1 = prev + step = 1,3104 + 5 * 0,0001 = 1,3109.
- Wir berechnen die Position des Punktes n2 = prev + step-1 + 5 = 1,3104 * 0,0001-1 * 0,0001 = 1,3108;
- Wir weisen den Wert von n2 prev=1,3108 der Variable prev zu;
- Berechnung der Daten für die dritte Welle
- Wir berechnen die Position des Punktes n1 = prev + step = 1,3108 + 5 * 0,0001 = 1,3113.
- Wir verlassen den Zyklus, prev = n2 = 1,3112
In der folgenden Abbildung werden die oben aufgeführten Berechnungen verdeutlicht:
Unterstützungspunkte für baissierende Kerzen werden genauso berechnet:
prev=high
Zyklus
n1=prev-step
n2=prev-step+1
prev=n2
Erzeugung von Ticks auf Basis von Unterstützungspunkten
Zwischen-Ticks zwischen Unterstützungspunkten werden nach den folgenden Regeln erzeugt:- Falls die Menge der Ticks größer ist als die Menge der Punkte zwischen den Unterstützungspunkten, wird eine "Säge" erzeugt.
- Falls es genügend Punkte zwischen den Unterstützungspunkten gibt, wird eine lineare Sequenz von Ticks erzeugt.
Überprüfung der Tick-Sequenz
Lassen Sie uns zum Schluss die Tick-Historie vom Demo-Server von MetaQuotes am 13. Mai 2010 zwischen 13:00 und 13:30 Uhr mit der vom Tester im MetaTrader 5 Client Terminal erzeugten Tick-Sequenz vergleichen. Zum Aufzeichnen von Ticks im Log des Agenten wurde ein Expert Advisor verwendet:
//+------------------------------------------------------------------+ //| Write_Ticks.mq5 | //| Copyright Copyright 2010, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ input datetime start=D'2010.05.13 13:00:00'; input datetime end=D'2010.05.13 14:00:00'; //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { MqlTick tick; datetime time=TimeCurrent(); //--- SymbolInfoTick(Symbol(),tick); Print(time,tick.bid); //--- if(time>end) ExpertRemove(); //--- }
Die Tick-Historie wurde online mithilfe des im Beitrag Erzeugung von Kursschwankungs-Indikatoren in MQL5 beschriebenen Indikators abgerufen.
Beide Tick-Sequenzen – die aus dem Tester und die in einer Datei gespeicherte – werden im Diagramm dargestellt. Ticks, die beim Testen erhalten wurden, werden in Grün dargestellt und Ticks vom MetaQuotes-Demo-Server, die durch den Indikator in der Datei erfasst wurden, werden in Blau dargestellt.
Sie können den Mauszeiger auf einen beliebigen Punkt im Diagramm richten und in Popup-Fenstern Informationen zu jedem Tick lesen:
- Ursprung (Tester oder Historie);
- Zeit des Ticks;
- Preis des Ticks.
Das Diagramm zeigt deutlich, dass die Qualität der Simulation von Ticks im Tester des MetaTrader 5 Client Terminals ein adäquates Testing von Expert Advisors auf historischen Daten ermöglicht.
Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/ru/articles/75
![Kopieren des Handels aus MetaTrader 5 nach MetaTrader 4](https://c.mql5.com/2/0/MetaTrader5_MetaTrader4_MQL5.png)
![MetaTrader AppStore - Ergebnisse für Q3/2013](https://c.mql5.com/2/0/avatar3.png)
![MetaQuotes-ID im MetaTrader Mobil-Terminal](https://c.mql5.com/2/0/MetaQuotes-ID.png)
![Wie Sie mit den MetaTrader AppStore und Handelssignalen-Services Geld verdienen können, ohne Verkäufer oder Anbieter zu sein](https://c.mql5.com/2/0/mql5_share_avatar.png)
![MQL5 - Sprache von Handelsstrategien, eingebaut ins Kundenterminal MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.