Voici les nouveaux MetaTrader 5 et MQL5

Yuriy Zaytsev | 22 décembre, 2021

Je vais donner juste une brève description de quelques moments.


Fig. 1. Ce n'est pas Photoshop - c'est MQL5.

Presque tout ce qui m'a intéressé, ainsi que d'autres, dans MQL5 et MT5 est implémenté à un très haut niveau.

Le changement de base dans MQL5 est l'apparition de la programmation orientée objet. Je n'entrerai pas en profondeur dans la POO - c'est juste que les programmeurs expérimentés ont plus de possibilités. Pour ceux qui ont aimé MQL4 et ne connaissent pas la POO, les développeurs ont laissé la possibilité d'écrire en MQL5 en utilisant le style de MQL4 sans OOP. La différence réside dans la fonctionnalité qui doit être réapprise.

Prenons un exemple simple : les variables Ask et Bid n'existent plus. Afin d'obtenir les valeurs Bid, la fonction ci-dessous doit être appelée :

SymbolInfoDouble(Symbol(),SYMBOL_BID);

Il n'y a pas de Low[0] ou iLow fréquemment utilisés ( Symbol(), PERIOD_D1, 0 ), mais vous pouvez facilement les reconstruire. Les nouvelles fonctions fonctionnant avec les données historiques donnent la possibilité de lire en mémoire les données historiques d'un point à un autre, d'une certaine barre à une autre certaine barre ou de l'heure sélectionnée à l'autre heure sélectionnée. La lecture préalable d'une série de données permet de charger en mémoire toute la gamme visible. Peu importe que vous en ayez besoin ou non, mais la lecture a été faite ; et si vous aviez besoin de lire M1, la lecture a été faite depuis 1999 (dans le cas où il y avait un historique disponible) jusqu'à la date, l'heure et la minute actuelles.

Désormais, seule la gamme nécessaire peut être lue, ce qui économise considérablement du temps et de la mémoire.

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

Cette fonction permet d'économiser du temps et de la mémoire.

Un tel changement de fonctionnalité ne fait pas peur. Nous aurons simplement besoin de temps pour apprendre de nouvelles fonctions-analogues.

Quelques innovations fonctionnelles que j'attendais de MQL :

Attardons-nous un peu sur ces derniers.

La fonction OnTimer() est appelée si le timer est pré-initialisé dans la fonction prédéfinie OnInit (processeur des événements d'initialisation EA).

Exemple :

//+------------------------------------------------------------------+
//|                                                                  |
//+------------------------------------------------------------------+
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()
           );
  }

Ainsi, le contrôle peut être obtenu non seulement à la réception des traits comme c'était le cas auparavant, mais également à partir de la minuterie qui permet d'écrire des programmes gérables en temps réel. Avec cette possibilité, des systèmes plus élaborés peuvent être créés.

J'ai aimé la fonction OnTrade(). Cette fonction est appelée au moment où l'un des événements commerciaux suivants se déclenche : passation d'ordres, activation de StopLoss ou TakeProfit, changement de niveaux StopLoss ou TakeProfit, passation/suppression d'un ordre en attente.

Il est désormais beaucoup plus facile de surveiller les événements liés aux opérations de trade. Désormais, il n'est plus nécessaire de vérifier en boucle le statut des ordres aux traits ou aux barres. De telles boucles sont utilisées en MQL4, ce qui réduit considérablement les performances du programme si importantes en optimisation.

Attardons-nous sur la fonction OnChartEvent(). L'appel de fonction est effectué pour plusieurs événements. Je n'ai pas réussi à tester chacun d'eux, mais la liste est impressionnante :

La possibilité de gérer le trading et les graphiques à un nouveau niveau fonctionnel - c'est ce que les développeurs ont promis.

De nouveaux objets graphiques, boutons, champ de saisie sont apparus. La gestion des graphiques est devenue fantastique, on peut même insérer des images à partir de fichiers - cette option offre beaucoup de possibilités pour ceux qui aiment le design spécial. Ce n'est pas Photoshop, c'est le résultat des possibilités MQL5 et MetaTrader 5. Parmi les nouvelles fonctionnalités, vous pouvez créer vos propres boutons et champs de saisie en ajoutant, par exemple, un bouton pour fermer tous les ordres ouverts, ou le bouton d'achat et de vente rapide avec des paramètres stop et take prédéfinis.


Fig. 2. Des objets graphiques permettant de créer un panneau d'information.

Fig. 2. Les objets graphiques permettant de créer un panneau d'information

Il y a un fait désagréable : les objets ne peuvent pas être créés à partir d'indicateurs. Cela a été fait intentionnellement pour accélérer la performance des indicateurs. La bonne nouvelle est qu'ils le comprennent et, probablement, mettront en œuvre la possibilité de démarrer plusieurs Expert Advisors dans un même graphique. Ainsi, nous pourrons créer des indicateurs EA avec des objets et sans trader. De tels indicateurs peuvent être créés maintenant - ils fonctionneront comme des indicateurs. Maintenant, la tâche est résolue en démarrant un EA de trading dans un graphique et l'EA en créant des objets dans le second, puis en implémentant l'échange entre eux.

Par exemple, j'ai réussi à transformer mon indicateur de percée de MQL4 à MQL5 en quelques heures. Le plus de temps a été pris par la fonction d'apprentissage et de débogage. En MQL5, le code est devenu plus court.

Quant au terminal lui-même, j'ai été impressionné par le nombre de délais. À mon avis, il y a même l'excès. Cependant, l'abondance de délais par minute peut être utile pour certains traders. Eh bien, maintenant, il n'y a qu'une étape pour créer un délai librement configuré. Toutes les données ne sont désormais stockées que sous forme d'une minute, il n'y a donc aucun problème avec la synchronisation de différents délais - il s’agit là d’une solution technologique importante.

Maintenant, il n'y a plus de fichiers pour différents délais dans le catalogue HISTORY



Fig. 3. Tout l'historique est stocké dans un seul fichier.

Une autre introduction agréable est que nous pouvons maintenant effacer les journaux.


Fig. 4. Un seul clic de bouton pour effacer le journal EA, supprimer tous les messages inutiles

Ceci n'est qu'un bref aperçu de MetaTrader 5. Je ne peux pas décrire toutes les nouvelles fonctionnalités du système sur une période aussi courte - les tests ont commencé le 09.09.2009. C'est une date symbolique, et je suis sûr que ce sera un chiffre porte-bonheur. Quelques jours se sont écoulés depuis que j'ai obtenu la version bêta du terminal MetaTrader 5 et MQL5. Je n'ai pas réussi à essayer toutes ses fonctionnalités, mais je suis déjà impressionné.

Les magiciens de MetaQuotes ont créé un produit épatant. Étant un développeur doté de 25 ans d'expérience, j'ai vu le début de nombreux projets et je suis en mesure de conclure ceci avec certitude !

Cordialement,
Yuriy Zaytsev

Skype : yurazyuraz
yzh@mail.ru