Hier sind der neue MetaTrader 5 und MQL5

11 Januar 2016, 09:10
Yuriy Zaytsev
0
849

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:

  • OnTimer() – Funktion zum Verarbeiten von Timer-Ereignissen (Sie müssen keine Schleife des Expert Advisors mehr ausführen, damit er unabhängig von eingehenden Ticks mit einer bestimmten Periodizität arbeitet);
  • OnTrade() – Funktion zum Verarbeiten von Handelsereignissen – Öffnung oder Schließung einer Handelsposition oder Änderung des Volumens;
  • OnChartEvent() – Verarbeitung von Ereignissen mit der Maus oder Tastatur.

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:

  • CHARTEVENT_KEYDOWN – Knopfdruck-Ereignis;
  • CHARTEVENT_OBJECT_CLICK – Mausklick-Ereignis auf einem grafischen Objekt, das Teil eines Diagramms ist;
  • CHARTEVENT_OBJECT_DRAG – Ereignis der Verschiebung eines grafischen Objekts mit der Maus;
  • CHARTEVENT_OBJECT_ENDEDIT – Ereignis der Beendigung der Textbearbeitung;
  • CHARTEVENT_CUSTOM+n – Identifikator eines benutzerdefinierten Ereignisses;
  • CHARTEVENT_CUSTOM_LAST – das letzte Ereignis.

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

Übersetzt aus dem Russischen von MetaQuotes Software Corp.
Originalartikel: https://www.mql5.com/ru/articles/1

Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil XVI): Ereignisse der Kollektionssymbole Bibliothek für ein leichtes und schnelles Entwickeln vom Programmen für den MetaTrader (Teil XVI): Ereignisse der Kollektionssymbole

In diesem Artikel werden wir eine neue Basisklasse aller Bibliotheksobjekte erstellen, die die Ereignisfunktionen allen ihren Nachkommen hinzufügt, und die Klasse zur Verfolgung von Ereignissen der Kollektionssymbole auf der Grundlage der neuen Basisklasse entwickeln. Wir werden auch die Konto- und Ereignisklassen für die Entwicklung der neuen Basisobjektfunktionalität ändern.

Entwicklung eines plattformübergreifenden Grid-EAs (Letzter Teil): Diversifikation als Mittel zur Steigerung der Profitabilität Entwicklung eines plattformübergreifenden Grid-EAs (Letzter Teil): Diversifikation als Mittel zur Steigerung der Profitabilität

In früheren Artikeln dieser Serie haben wir verschiedene Methoden ausprobiert, um einen mehr oder weniger profitablen Grid-Expertenberater zu erstellen. Jetzt werden wir versuchen, die EA-Profitabilität durch Diversifikation zu steigern. Unser oberstes Ziel ist es, einen Jahresgewinn von 100% zu erreichen, wobei der maximale Drawdown des Saldos nicht mehr als 20% beträgt.

Eine neue Schiene: Benutzerdefinierte Indikatoren in MQL5 Eine neue Schiene: Benutzerdefinierte Indikatoren in MQL5

Ich werde nicht alle neuen Möglichkeiten und Funktionen des neuen Terminals und der Sprache aufzählen. Sie sind zahlreich und einige der Neuheiten sind eine Diskussion in einem eigenen Beitrag wert. Auch gibt es hier keinen Code, der mit objektorientierter Programmierung geschrieben wurde. Das Thema ist zu wichtig, um es nur im Kontext zusätzlicher Vorteile für Entwickler zu erwähnen. In diesem Beitrag gehen wir auf Indikatoren, ihre Struktur, Zeichnung, Typen und Programmierdetails im Vergleich zu MQL4 ein. Ich hoffe, dass dieser Beitrag für Einsteiger und erfahrene Entwickler hilfreich sein wird. Vielleicht entdeckt auch jemand etwas Neues.

MQL5: Erstellen Ihres eigenen Indikators MQL5: Erstellen Ihres eigenen Indikators

Was ist ein Indikator? Es ist ein Satz berechneter Werte, die auf praktische Weise auf dem Bildschirm angezeigt werden sollen. Sätze von Werten werden in Programmen als Arrays dargestellt. Somit bedeutet das Erstellen eines Indikators, einen Algorithmus zu schreiben, der bestimmte Arrays bearbeitet (Preis-Arrays) und die Ergebnisse der Bearbeitung für andere Arrays (Indikator-Arrays) aufzeichnet. Durch die Beschreibung der Erstellung des True Strength Index zeigt der Autor, wie Indikatoren in MQL5 geschrieben werden.