English Русский 中文 Español 日本語 Português 한국어 Français Italiano Türkçe
Der Algorithmus der Tick-Erzeugung im Strategietester des MetaTrader 5 Terminals

Der Algorithmus der Tick-Erzeugung im Strategietester des MetaTrader 5 Terminals

MetaTrader 5Tester | 5 Mai 2016, 10:41
1 554 0
MetaQuotes
MetaQuotes

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

Der erste Strategietester erschien mit dem MetaTrader 3 Terminal. Nach modernen Maßstäben war das ein relativ simpler Tester: Er testete auf Basis von drei Modellen der Preisentwicklung im Balken:
  • 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:
  1. Gingen in eine Richtung und kehrten zum Niveau von Open zurück




  2. Gingen in eine Richtung, fielen zurück und erreichten das Niveau von Open




  3. Gingen in eine Richtung, fielen zurück, erreichten aber nicht das Niveau von Open




  4. 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 - 3
2 - 6 - 2
2 - 5 - 2
2 - 4 - 2
2 - 3 - 2
1 - 4 - 1
1 - 3 - 1
1 - 2 - 1
1 - 1 - 1
Wenn der Kerze einer der Schatten fehlt, erhält die Spannweite der Kerze die Unterstützungspunkte dieses Schattens.



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.

Die Werte der Unterstützungspunkte stellen den Unterschied zwischen dem Preis des Unterstützungspunkts und dem Öffnungspreis der Kerzen dar. Die ideale Verteilung (3-5-3) von Unterstützungspunkten für eine haussierende (weiße) Kerze ist die folgende:




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:





Der schließende Schatten wird auf ähnliche Weise erzeugt.

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:

  1. Erster Schritt. Variable prev = Low = 1,3100, Eintritt in den Zyklus.
  2. 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;
  3. 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;
  4. 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 Kopieren des Handels aus MetaTrader 5 nach MetaTrader 4
Ist es möglich, heute auf einem echten MetaTrader-5-Konto zu handeln? Wie organisiert man solchen Handel? Dieser Beitrag behandelt die Theorie hinter diesen Fragen und die Arbeitscodes zum Kopieren von Abschlüssen aus dem MetaTrader 5 Terminal nach MetaTrader 4. Dieser Beitrag wird sowohl für Entwickler von Expert Advisors als auch für praktizierende Händler hilfreich sein.
MetaTrader AppStore - Ergebnisse für  Q3/2013 MetaTrader AppStore - Ergebnisse für Q3/2013
Ein weiteres Quartal des Jahres ist vorbei. Eine gute Gelegenheit für uns, die Ergebnisse des MetaTrader AppStore zusammenzufassen - der größte Platz für Handelsroboter und technische Indikatoren für MetaTrader Plattformen. Zum Ende des abgelaufenen Quartals haben mehr als 500 Entwickler über 1200 Produkte in Market platziert.
MetaQuotes-ID im MetaTrader Mobil-Terminal MetaQuotes-ID im MetaTrader Mobil-Terminal
Auf Android und iOS basierende Geräte bieten uns viele verschiedene Features, die vielen von uns weitgehend unbekannt sind. Eines davon stellen die sogenannten Push Notifications dar, die dazu genutzt werden können, private Nachrichten zu empfangen - und zwar unabhängig von unserer Telefonnummer beziehungsweise unserem Mobilfunkbetreiber. MetaTrader Mobil-Terminal kann bereits heute schon derartige Nachrichten direkt seitens Ihres Trading Roboters empfangen. Sie müssen lediglich die MetaQuotes-ID Ihres Geräts kennen. Zum heutigen Zeitpunkt haben bereits mehr als 9 000 000 Mobil-Terminals eine derartige ID erhalten.
Wie Sie mit den MetaTrader AppStore und Handelssignalen-Services Geld verdienen können, ohne Verkäufer oder Anbieter zu sein Wie Sie mit den MetaTrader AppStore und Handelssignalen-Services Geld verdienen können, ohne Verkäufer oder Anbieter zu sein
Auf MQL5.com können Sie direkt Geld verdienen, ohne dazu Verkäufer von Market-Anwendungen oder ein profitabler Signale-Anbieter sein zu müssen. Wählen Sie die Produkte, die Ihnen gefallen und stellen auf verschiedenen Webressourcen entsprechende Links dazu ein. Ziehen Sie potenzielle Kunden an und der Gewinn gehört Ihnen!