Le passage de MQL4

Le langage MQL5 est le développement du prédécesseur — le langage MQL4, dans laquel de nombreux indicateurs, des scripts et des experts ont été écrits. Malgré que  le langage moderne de programmation est au maximum compatible avec  le langage de la génération précédente, néanmoins il y a une série de différences entre ces langages. Et il faut connaître ces différences au transfert des programmes.

Dans ce paragraphe on a rassemblé l'information, qui est appelée à faciliter l'adaptation de ses codes à  ces programmeurs qui savent bien MQL4, au langage nouveau  MQL5.

Tout d'abord il est nécessaire de noter:

  • Les fonctions start(), init() et deinit() manquent;
  • Le nombre de tampons d'indicateur n'est pas limitée;
  • Le chargement dll se passe à la fois après le chargement de l'expert (ou n'importe quel autre programme mql5);
  • La vérification raccourcie des conditions logiques;
  • À la sortie au-delà du tableau l'exécution courante se cesse (critiquement - avec la sortie de l'erreur);
  • La priorité des opérations comme dans C++;
  • La réduction implicite des types travaille (même de la chaîne dans le nombre);
  • Les variables locales ne sont pas initialisées automatiquement (excepté les chaînes);
  • Les tableaux ordinaires locaux sont supprimés automatiquement.

Les fonctions spéciales init, start et deinit

Dans le langage MQL4 était seulement trois fonctions prédéterminées, qui pouvaient  être dans le code de l'indicateur, le conseiller ou le script (sans prendre en compte les fichiers inclus *.mqh et les fichiers des bibliothèques). Ces fonctions sont absentes à MQL5, mais il y a leurs analogues. Dans le tableau on présente la conformité approximative des fonctions.

MQL4

MQL5

init

OnInit

start

OnStart

deinit

OnDeinit

Les fonctions OnInit et OnDeinit  jouent le même rôle que les fonctions init et deinit dans MQL4 — elles se sont destinées au placement du code, qui doit être accompli à l'initialisation et la déinitialisation des programmes mql5. Vous pouvez tout simplement rebaptiser ces fonctions de la bonne façon, ou les laisser comme elles sont, mais ajouter l'appel de ces fonctions dans les espaces correspondants.

Exemple:

void OnInit()
  {
//--- appelons la fonction à l'initialisation
   init();
  }
void OnDeinit(const int reason)
  {
//--- appelons la fonction à la déinitialisation
   deinit();
//---
  }

 

La fonction start est remplacée sur OnStart seulement dans les scripts,  mais pour l'expert et l'indicateur il est nécessaire de la rebaptiser conformément à OnTick et OnCalculate. Notamment dans ces trois fonctions il est nécessaire d'installer le code, qui doit être accompli au temps de travail du programme mql5:

programme mql5

fonction principale

le script

OnStart

l'indicateur

OnCalculate

l'expert

OnTick

Si la fonction principale manque dans le code exécuté de l'indicateur ou le script, ou le nom de cette fonction se distingue de demandé, l'appel d'une telle fonction n'est pas produit. C'est-à-dire, si dans le code source du script il n'y a pas de fonction OnStart, un tel code sera compilé comme le conseiller.

Si dans le code de l'indicateur il n'y a pas de fonction OnCalculate, la compilation d'un tel indicateur est impossible.

Les variables prédéterminées

A MQL5 il n'y a pas de telles variables prédéterminées comme Ask, Bid, Bars. Les variables Digits et Point  ont changé un peu dans l'orthographe, comme c'est montré dans le tableau.

MQL4

MQL5

Digits

_Digits

Point

_Point

 

_LastError

 

_Period

 

_Symbol

 

_StopFlag

 

_UninitReason

L'accès aux séries temporelles

A MQL5 il n'y a pas des séries temporelles prédéterminées Open[], High[], Low[], Close[], Volume[] et Time[]. On peut spécifier la profondeur nécessaire de la série temporelle indépendamment à l'aide des fonctions correspondantes pour l'accès aux séries temporelles.

Les conseillers (les experts)

Les experts dans MQL5 doivent avoir pas absolument la fonction-gestionnaire de l'événement de l'entrée du nouveau tick OnTick, comme c'était à MQL4 (la fonction start dans MQL4 est appellée pour l'exécution à l'entrée du nouveau tick), parce que maintenant les experts dans MQL5  peuvent contenir les fonctions-gestionnaire de quelques types des événements:

  • OnTick — L'entrée du nouveau tick;
  • OnTimer —l'événement du minuteur;
  • OnTrade - l'événement commercial;
  • OnChartEvent — Les événements de l'entrée du clavier et de la souris, les événements de la navigation de l'objet graphique, l'événement de la fin de l'édition du texte dans la zone de l'entréé de l'objet LabelEdit;
  • OnBookEvent — l'événement du changement de l'état du profondeur de marché (Depth of Market).

Les indicateurs d'utilisateur

A MQL4 le nombre de tampons d'indicateur est limitée et ne peut pas être plus que 8. Il n'y a pas de tel bornage dans MQL5, mais il faut se rappeler que chaque tampon d'indicateur demande la sélection du volume défini de la mémoire vive sous son placement dans le terminal, c'est pourquoi il ne faut pas abuser d'une nouvelle possibilité ouverte quand même.

En outre, dans MQL4  il y avait seulement 6 types du dessin de l'indicateur d'utilisateur, dans MQL5 maintenant il y a 18 styles du dessin. Et bien que les noms des aspects du dessin n'ont pas changé, l'idéologie de l'image graphique des indicateurs a changé beaucoup.

Se distingue également la direction de l'indexation dans les tampons d'indicateur. Dans MQL5 tous les tampons se comportent par défaut comme les tableaux ordinaires, c'est-à-dire l'élément avec l'index 0 est plus vieil à l'histoire, à l'augmentation de l'index nous nous avançons des données les plus vieilles vers les données dernières.

La seule fonction  du travail avec les indicateurs d'utilisateur, qui a été préservé de MQL4 — c'est SetIndexBuffer. Mais son appel a changé aussi, maintenant il faut indiquer le type de données, qui se trouveront dans le tableau , lié au tampon d'indicateur.

En outre ont changé et se sont élargies les propriétés des indicateurs d'utilisateur, il y avait des fonctions de l'accès aux séries temporelles, c'est pourquoi il est nécessaire entièrement de repenser tout l'algorithme de calcul.

Les objets graphiques

Le nombre d'objets graphiques à MQL5 s'est élargie beaucoup. En outre le positionnement des objets graphiques dans le temps est devenu possible avec l'exactitude d'une seconde dans un graphique de n'importe quelle période —  maintenant on ne produit pas l'arrondissement des points d'attachement  des objets graphiques avec l'exactitude jusqu'au temps de l'ouverture de la barre sur le graphique du prix courant.

Pour les objets Arrow, Text et Label il y avait une possibilité d'indiquer le moyen du rattachement, et pour les objets Label, Button, Chart, Bitmap Label et Edit il y a la possibilité de spécifier l'angle du graphique, auquel l'objet est attaché.