Hier sind der neue MetaTrader 5 und MQL5

Yuriy Zaytsev | 11 Januar, 2016

Ich beschreibe nur kurz ein paar wichtige Momente.


Abb. 1. Das ist nicht Photoshop. Das ist MQL5.

Fast alles, woran ich und andere in MQL5 und MT5 interessiert waren, wurde auf einem sehr hohen Niveau umgesetzt.

Die grundlegende Veränderung in MQL5 ist das Erscheinen der objektorientierten Programmierung. Ich werde nicht zu tief in die Details gehen, sondern merke nur an, dass erfahrene Programmierer mehr Möglichkeiten erhalten. Für all jene, die MQL4 mochten und OOP nicht kennen, habe ich gute Neuigkeiten: Die Entwickler lassen die Möglichkeit offen, MQL5 im Stil von MQL4 ohne OOP zu schreiben. Der Unterschied liegt in der Funktionalität, die neu erlernt werden muss.

Nehmen wir ein einfaches Beispiel: Die Variablen Ask und Bid existieren nicht mehr. Um die Bid-Werte zu erhalten, sollte die folgende Funktion aufgerufen werden:

SymbolInfoDouble(Symbol(),SYMBOL_BID);

Die häufig verwendeten Low[0] oder iLow ( Symbol(), PERIOD_D1, 0 ) existieren nicht mehr, doch Sie können sie einfach rekonstruieren. Die neuen Funktionen für die Arbeit mit historischen Daten schaffen Möglichkeiten, die historischen Daten von einem Punkt zu einem anderen, von einem bestimmten Bar oder von einem bestimmten Zeitpunkt zum anderen bestimmten Zeitpunkt in den Speicher einzulesen. Vorher wurde beim Lesen einer Datenserie der gesamte sichtbare Bereich in den Speicher geladen. Die Daten wurden eingelesen, ob Sie es wollten oder nicht. Und wenn Sie M1 lesen mussten, wurde es von 1999 (sofern eine Historie verfügbar war) bis zum aktuellen Datum, der aktuellen Stunde und der aktuellen Minute gelesen.

Jetzt ist es möglich, nur den erforderlichen Bereich zu lesen, wodurch viel Zeit und Speicher gespart wird.

MqlRates rates_arrayG[];
Int Bar=30; // read only 30 bars stating from the zero one
iCopBar=CopyRates(Symbol(),PERIOD_M1,0,Bar,rates_arrayG);

Diese Funktion spart Zeit und Speicher.

Sie brauchen keine Angst vor dieser Änderung der Funktionalität zu haben. Wir werden einfach etwas Zeit brauchen, um die neuen entsprechenden Funktionen zu lernen.

Einige funktionale Innovationen, die ich von MQL erwartet habe:

Gehen wir kurz darauf ein.

Die OnTimer()-Funktion wird aufgerufen, wenn der Timer vorher in der voreingestellten OnInit-Funktion (Verarbeiter von Initialisierungsereignissen des EA) initialisiert wird.

Beispiel:

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
int OnInit()
  {
   EventSetTimer(1); //each second we'll refer to OnTimer()
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnDeinit()
  {
   EventKillTimer(); // canceling of timer reference must be called at exit
  }
//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
void OnTimer()
  {
   MqlDateTime str1;
   TimeGMT(str1); // new function to get GMT time
   Comment(str1.hour
           ,str1.min
           ,str1.sec
           ,str1.day
           ,str1.mon
           ,str1.year
           ,str1.day_of_year
           ,OrdersTotal()
           ,PositionsTotal()
           );
  }

Auf diese Weise haben Sie nicht nur bei eingehenden Ticks die Kontrolle, wie es früher der Fall war, sondern auch über den Timer, der das Schreiben von in Echtzeit verwaltbaren Programmen ermöglicht. Mit dieser Möglichkeit können ausgeklügeltere Systeme erschaffen werden.

Mir hat die OnTrade()-Funktion sehr gut gefallen. Diese Funktion wird aufgerufen, wenn eines der folgenden Handelsereignisse ausgelöst wird: Platzierung eines Auftrags, Aktivierung von StopLoss oder TakeProfit, Änderung der StopLoss- oder TakeProfit-Niveaus, Platzierung/Löschung eines ausstehenden Auftrags.

Es ist nun viel einfacher, Ereignisse im Zusammenhang mit Handelstätigkeiten zu überwachen. Es sind keine Überprüfungsschleifen für den Status von Aufträgen bei Ticks oder Bars mehr erforderlich. Solche Schleifen werden in MQL4 eingesetzt und verringern die Performance des Programms deutlich, die für die Optimierung sehr wichtig ist.

Gehen wir näher auf die OnChartEvent()-Funktion ein. Die Funktion wird bei diversen Ereignissen aufgerufen. Ich habe es nicht geschafft, sie alle zu testen, doch die Liste ist beeindruckend:

Die Möglichkeit, Handel und Grafiken auf einer neuen funktionalen Ebene zu verwalten – genau das, was uns die Entwickler versprachen.

Es gibt neue grafische Objekte, Buttons und Textfelder. Die Diagrammverwaltung ist fantastisch, es können sogar Bilder aus Dateien eingefügt werden. Diese Option bietet Personen, die spezielle Designs mögen, zahlreiche Möglichkeiten. Das ist nicht Photoshop. Das ist das Ergebnis der Möglichkeiten, die MQL5 und MetaTrader 5 bieten. Zu den neuen Funktionen gehört, dass Sie Ihre eigenen Buttons und Textfelder erstellen können, beispielsweise einen Button zum Schließen aller offenen Aufträge oder einen Button zum schnellen Kaufen und Verkaufen mit voreingestellten stop- und take-Parametern.


Abb. 2. Grafische Objekte ermöglichen die Erstellung eines Informationsfelds.

Abb. 2. Grafische Objekte ermöglichen die Erstellung eines Informationsfelds

Es gibt einen kleinen Makel: Es können keine Objekte aus Indikatoren erstellt werden. Das war so beabsichtigt, um die Performance der Indikatoren zu erhöhen. Die gute Nachricht ist, dass die Entwickler das verstehen und wahrscheinlich die Möglichkeit einbauen werden, mehrere Expert Advisors in einem Diagramm zu starten. So wird es uns möglich sein, EA-Indikatoren mit Objekten und ohne Handel zu erstellen. Solche Indikatoren können jetzt schon erstellt werden. Sie fungieren einfach als Indikatoren. Das Problem kann aktuell umgangen werden, indem man einen Handels-EA in einem Diagramm und den EA zum Erstellen von Objekten im zweiten startet und anschließend einen Austausch zwischen ihnen einrichtet.

Beispielsweise konnte ich meinen Durchbruchsindikator innerhalb von mehreren Stunden von MQL4 in MQL5 transformieren. Die meiste Zeit wurde vom Erlernen von Funktionen und vom Debugging beansprucht. Der Code wurde in MQL5 kürzer.

Was das Terminal selbst betrifft, war ich von der Anzahl von Timeframes beeinflusst. Meiner Meinung nach sind es sogar zu viele. Doch der Reichtum an Minuten-Timeframes kann für einige Händler nützlich sein. Es gibt nur noch einen Schritt zur Erstellung eines frei eingestellten Timeframes. Alle Daten werden jetzt nur noch als Minuten-Timeframes gespeichert. Somit gibt es keine Probleme mit der Synchronisierung unterschiedlicher Timeframes. Das ist eine sehr wichtige technologische Lösung.

Im HISTORY-Katalog gibt es jetzt keine Dateien für unterschiedliche Timeframes



Abb. 3. Die gesamte Historie wird in einer einzigen Datei gespeichert.

Eine weitere angenehme Neuerung ist, dass Logs jetzt bereinigt werden können.


Abb. 4. Mit einem Knopfdruck kann das EA-Logbuch bereinigt werden, um alle unnötigen Meldungen zu löschen

Dies ist nur ein kurzer Überblick über MetaTrader 5. Ich kann nicht alle neuen Funktionen des Systems in so kurzer Zeit beschreiben. Die Tests begannen am 09.09.2009. Das ist ein symbolisches Datum und ich bin sicher, dass es eine Glückszahl werden wird. Es sind ein paar Tage vergangen, seit ich die Beta-Version des MetaTrader-5-Terminals und MQL5 bekommen habe. Ich konnte noch nicht alle Funktionen ausprobieren, doch ich bin jetzt schon beeindruckt.

Die Zauberer bei MetaQuotes haben ein großartiges Produkt erschaffen. Ich bin Entwickler mit 25-jähriger Erfahrung, habe den Beginn vieler Projekte gesehen und kann dies mit Sicherheit sagen!

Viele Grüße,
Juri Saizew

Skype: yurazyuraz
yzh@mail.ru