Il passaggio da MQL4 ad MQL5

MQL5 è l'evoluzione del suo predecessore - il linguaggio di programmazione MQL4, in cui sono stati scritti numerosi indicatori, script e Expert Advisor. Nonostante il fatto che il nuovo linguaggio di programmazione sia massimamente compatibile con il linguaggio della precedente generazione, ci sono ancora alcune differenze tra questi linguaggi. E quando si trasferiscono i programmi, queste differenze devono essere notate.

Questa sezione contiene informazioni destinate a facilitare l'adattamento dei codici al nuovo linguaggio MQL5 per i programmatori che conoscono MQL4.

Prima di tutto va rilevato che:

  • Il nuovo linguaggo non contiene le funzioni start(), init() e deinit().
  • Non ci sono limiti per il numero di buffer di indicatori.
  • LE DLL vengono caricate immediatamente dopo il caricamento di un Expert Advisor (o qualsiasi altro programma mql5).
  • La verifica delle condizioni logiche è stata abbreviata.
  • Quando i limiti di un array vengono superati, la performance corrente viene terminata (criticamente - con l'uscita di un errore).
  • Precedenza degli operatori come in C + +.
  • Il linguaggio offre il tipo di cast implicito (anche da stringa ad un numero).
  • Le variabili locali non vengono inizializzate automaticamente (tranne che per le stringhe).
  • Comuni array locali vengono cancellati automaticamente.

Funzioni speciali init, start e deinit

Il linguaggio MQL4 conteneva solo tre funzioni predefinite che potevano essere utilizzate nell' indicatore, script o Expert Advisor (non tenendo conto del file include i file *.mqh e dei file della libreria). In MQL5 non esistono tali funzioni, ma ci sono loro analoghi. La tabella mostra la corrispondenza approssimativa delle funzioni.

MQL4

MQL5

init

OnInit

start

OnStart

deinit

OnDeinit

Le funzioni OnInit e OnDeinit svolgono lo stesso ruolo di init e deinit in MQL4 - sono progettati per individuare il codice, che deve essere eseguito durante l'inizializzazione e deinizializzazione dei programmi MQL5. Di conseguenza è possibile rinominare solo le funzioni, o lasciarle come sono, ma aggiungere chiamate di queste funzioni nei posti corrispondenti.

Esempio:

void OnInit()
  {
//--- Richiamo della funzione in fase di inizializzazione
   init();
  }
void OnDeinit(const int reason)
  {
//--- Chiamata di Funzione su deinizializzazione
   deinit();
//---
  }

La funzione start, è sostituita da OnStart solo negli script. Negli Expert Advisors ed Indicatori dovrebbe essere rinominata OnTick ed OnCalculate, rispettivamente. Il codice che deve essere eseguito durante un'operazione del programma mql5 dovrebbe essere collocato in queste tre funzioni:

mql5-program

main function

script

OnStart

indicatore

OnCalculate

Expert Advisor

OnTick

Se l'indicatore o il codice script non contengono la funzione principale, o il nome della funzione differisce da quella richiesta, la chiamata di questa funzione non viene eseguita. Significa, che se il codice sorgente di uno script non contiene OnStart, tale codice verrà compilato come un Expert Advisor.

Se un codice indicatore non contiene la funzione OnCalculate, la compilazione di tale indicatore è impossibile.

Variabili predefinite

In MQL5 non ci sono tali variabili predefinite come Ask, Bid, Bars. Le variabili Point e Digits hanno una nomenclatura leggermente diversa:

MQL4

MQL5

Digits

_Digits

Point

_Point

 

_LastError

 

_Period

 

_Symbol

 

_StopFlag

 

_UninitReason

Accesso alle TimeSeries

In MQL5 non ci sono tali timeseries predefinite come Open[], High[], Low[], Close[], Volume[] e Time[]. La profondità necessaria di una TimeSeries può ora essere impostata tramite le corrispondenti funzioni per accedere alle timeseries.

Expert Advisors

gli Expert Advisors in MQL5 non richiedono la presenza obbligatoria di funzioni che gestiscono gli eventi di una ricezione di un nuovo tick - onTick, come era in MQL4 (la funzione di start in MQL4 viene eseguita quando un nuovo tick viene ricevuto). In MQL5 gli Expert Advisor possono contenere predefinite funzioni di gestione di diversi tipi di eventi:

  • OnChartEvent - eventi di input dalla tastiera e mouse, eventi di un oggetto grafico in movimento, eventi di completamento di modifica del testo nel campo di immissione dell'oggetto LabelEdit;
  • OnBookEvent - eventi di cambio di status del Depth of Market.

Custom Indicators

In MQL4, il numero di buffer indicatore è limitato e non può superare 8. In MQL5 ci sono limitazioni, ma va ricordato che ciascun buffer indicatore richiede l'allocazione di una certa parte di memoria per la sua posizione nel terminale, così la nuova possibilità non verrebbe abusata.

MQL4 offriva solo 6 tipi di plottaggio di indicatore personalizzato, mentre MQL5 offre ora 18 stili di disegno. I nomi dei tipi di disegno non sono cambiati, ma l'ideologia della rappresentazione grafica degli indicatori è cambiata significativamente.

La direzione di indicizzazione nei buffers indicatore anche, è diversa. Per impostazione predefinita, in MQL5 tutti i buffer indicatore hanno il comportamento di comuni array, cioè l' elemento indicizzato 0 è il più antico della cronistoria, e con l'aumento di indice, si passa dai dati più vecchi a quelli più recenti.

L'unica funzione per lavorare con gli indicatori personalizzati che è stata preservata dall' MQL4 è SetIndexBuffer. Ma la sua chiamata è cambiata, ora è necessario specificare il tipo di dati da memorizzare in un array, associato al buffer indicatore.

Le proprietà degli indicatori personalizzati anche si sono modificate ed ampliate. Nuove funzioni per accedere alle timeseries sono state aggiunte, quindi il totale algoritmo di calcolo deve essere riconsiderato.

Oggetti grafici

Il numero di oggetti grafici in MQL5 è stato notevolmente aumentato. Inoltre, gli oggetti grafici possono essere posizionati nel tempo con la precisione di un secondo in un grafico di qualsiasi timeframe - ora i punti di ancoraggio oggetto non sono arrotondati al tempo di barra di apertura nella tabella prezzi.

Per gli oggetti freccia, di Testo e Label ora è possibile specificare metodi di legatura, e per gli oggetti Label, Button, Chart, Bitmap Label ed Edit, è possibile impostare l' angolo del grafico a cui è collegato un oggetto.