Übergang von MQL4

Die SpracheMQL5 ist Entwicklung ihres Vorgaengers  – der Sprache MQL4, in der viele Indikatoren, Scripts und Experten geschrieben werden. Obwohl die neue Programmiersprache mit der Sprache der früheren Generation maximal kompatibel ist. Es gibt es eine Reihe der Unterschiede zwischen diesen Sprachen. Bei der Portierung de Programme muss man diese Unterschiede kennen.  

In diesem Abschnitt gibt es die notwendige Information, um die Adaptierung der Kodes zur neuen Sprache MQL5 für Programmierer, die MQL4 gut kennen, zu ermöglichen.    

Vor allem muss bemerkt werden:

  • Funktionen start(), init()und deinit() fehlen;
  • Anzahl der Indikatorpuffer ist nicht begrenzt;
  • Ladung dll erfolgt sofort nach der Ladung von Experten (oder eines anderen mql5-Programms);
  • Pruefung der logischen Bedingungen ist verkuerzt;
  • die laufende Durchführung wird bei der Grenzenüberschreitung des Feldes gestoppt (kritisch - mit Fehlerausgabe) ;
  • Prioritaet der Operationen wie in C ++;
  • Explizite Typenreduzierung (auch von der Zeile in die Zahl);
  • Lokale Variablen werden automatisch nicht initialisiert (ausser Zeilen);
  • Normale lokale Felder werden automatisch entfernt.

Sonderfunktionen init, start und deinit

In de Sprache MQL4 gab es nur drei vorbestimmte Funktionen, die im Kode eines Indikators, Ratgebers oder Scripts sein konnten (nicht beachtet Include-Dateien *.mqh und Bibliothekdateien). Diese Funktionen fehlen in MQL5, aber ihre Analoge gibt es. In der Tabelle ist die ungefaehre Entsprechnung dieser Funktionen dargestellt.  

MQL4

MQL5

init

OnInit

start

OnStart

deinit

OnDeinit

Funktionen OnInit und OnDeinit spielen dieselbe Rolle wie die Funktionen init und deinit in MQL4 – sie sind bestimmt für Positionieren des Kodes, der bei der Initialisierung und bei der Deinitialisierung des mql5-Programms durchgeführt werden muss. Sie können diese Funktionen entsprechenderweise umbenennen oder lassen sie wie sie sind, aber in entsprechenden Stellen den Aufruf zuzufuegen.

Beispiel:

void OnInit()
  {
//--- Funktion wird bei der Initialisierung aufgerufen 
   init();
  }
void OnDeinit(const int reason)
  {
//--- Funktion wird bei der Deinitialisierung aufgerufen 
   deinit();
//---
  }

 

Funktion start wird durch die Funktion OnStart nur in Scripts ersetzt, für Experten und Indikator muss sie in OnTick und OnCalculate umbenennen. Der Kode, der innerhalb des  mql5-Programms durchzuführen ist, muss in diesen drei Funktionen sein :

mql5-Programm

Hauptfunktion

Script

OnStart

Indikator

OnCalculate

Expert

OnTick

Wenn die Hautfunktion im Kode des Indikators oder Scripts fehlt oder sich der Name dieser Funktion von dem eforderlichen Namen unterscheidet, wird diese Funktion nicht aufgerufen. D.H. wenn es im Ausgangskode des Scripts die Funktion OnStart fehlt, wird dieser Kode als Ratgeber compilert.

Wenn die Funktion OnCalculate im Kode des Indikators fehlt, ist die Compilierung dieses Indikators unmoeglich.  

Vorbestimmte Variablen

In MQL5 gibt es keine solche Variablen wie Ask, Bid, Bars. Die Schreibweise der Variablen Digits und Point ist etwas verändert, wie es in der Tabelle gezeigt ist.

MQL4

MQL5

Digits

_Digits

Point

_Point

 

_LastError

 

_Period

 

_Symbol

 

_StopFlag

 

_UninitReason

Zugang zu Zeitreihen

In MQL5 gibt es keine vorbestimmte Zeitreihen Open[], High[], Low[], Close[], Volume[] und Time[]. Die notwendige Tiefe der Zeitreihe kann selbsstaendig durch die entsprechenden Funktionen für Zugang zu Zeitreihen vorgegeben werden.

Ratgeber (Experten)

Experten in MQL5 brauchen nicht unbedingt die Funktion-Bearbeiter des Ereignisses haben, wenn neues Tick OnTick empfangen wird,wie es in    MQL4 der Fall war (Funktion start in MQL4 wird beim Empfang neues Ticks aufgerufen), denn jetzt können Experten in MQL5 vorbestimmte Funktionen-Bearbeiter mehrerer Typen der Ereignisse haben:

  • OnTick – Empfang eines neuen Ticks;
  • OnTimer – Ereignis des Timers;
  • OnTrade - Handelsereignis;
  • OnChartEvent – Ereignis der Eingabe von Keyboard und Maus, Ereignis der Verschiebung des graphischen Objektes, Ereignis der Beendigung der Textbearbeitung im Feld der Ogjektausgabe;
  • OnBookEvent – Ereignis der DOM Veränderung (Depth of Market).

Benutzerindikatoren

In MQL4 ist die Anzahl von Indikatorpuffer begrenzt und kann nicht mehr als 8 sein. In MQL5 gibt es keine solche Einschraenkung, aber man muss sich daran erinnern, dass jeder Indikatorpuffer  ein bestimmtes Volumen des Operativspeichers erfordert, darum muss man die neue Moeglichkeit nicht missbrauchen.

Außerdem gab es in MQL4 nur 6 Typen der Zeichnung des Benutzerindikators, in MQL5 gibt es nun 18 Zeichnungsstile. Obwohl sich die Namen der Zeichnungstypen nicht verändert haben, hat sich die Ideologie der graphischen Darstellung der Indikatoren wesentlich verändert.

Richtung des Indizierens in Indikatorpuffern unterscheidet sich auch. In MQL5 haben alle Puffer dasselbe Verhalten, wie normale Felder, d.h. Element mit dem Index 0 ist das aelteste in der Geschichte, beim Steigen des Indexes bewegen wir von den aeltesten Daten zu den letztesten.

Die einzige Funktion für die Arbeit mit Benutzerindikatoren, die sich aus MQL4 erhaelt ist SetIndexBuffer. Aber ihrer Aufruf hat sich verändert, nun muss man Typ der Daten, die im Feld aufbewahren werden angeben, verbunden mit dem Indikatorpuffer.

Außerdem haben sich die Eigenschaften der Benutzerindikatoren verändert und erweitert, Funktionen für Zugang zu Zeitreihen erschienen,darum muss der ganze Algorithmuss der  Berechnung vollstaendig neu überlegt werden.

Graphische Objekte

Die Anzahl der graphischen Objekte in MQL5 ist wesentlich gestiegen. Außerdem ist Positionieren der graphischen Objekte  in der Zeit mit der Genauigkeit bis auf die Sekunde ist auf dem Chart jeder Periode moeglich geworden - jetzt werden Bezugspunkte von graphischen Objekten mit der Genauigkeit bis auf die Eroeffnungszeit der Bar im laufenden Preischart nicht ausgerunden.

für Objekte Arrow, Text und Label ist es moeglich geworden, Weg der Verbindung anzugeben, und für Obkekte Label, Button, Chart, Bitmap Label und Edit ist es moeglich, Chartwinkel, zu dem Objekt gebunden ist vorzugeben .