Apercu de MQL5 et Metatrader 5


Cet article est la traduction d’un post officiel du Forum MQL4 que vous trouverez en VO ici dont l’auteur fait partie des rares chanceux à participer aux beta tests. Il fait suite d’un premier article présentant la plateforme Metatrader 5 que vous trouverez ici, d’un article parlant de MQL5 et encore un autre évoquant le nouveau système de gestion et de passage des ordres de Metatrader 5.

Non ceci n’est pas un montage photoshop… c’est Metatrader 5.

undefined


MQL5 ou l’arrivée d’un langage de haut niveau

 

Le changement fondamental avec MQL5 est l’apparition de la Programmation Orienté Objet (POO), ce qui donne plus de possibilités aux programmeurs expérimentés (NDLR: En effet tousl les langages informatiques modernes sont des langages orientés objets). Pour ceux qui aimaient MQL4 et ne connaissent rien à la programmation orientée objet, les développeurs ont laissé la possibilité d’écrire du code MQL5 en conservant le style sans objets de MQL4. La différence est dans les fonctionnalités qui doivent être apprises à nouveau.

Prenons un exemple simple, les variables Ask et Bid n’existent plus (NDLR: bel exemple de ce qui ne faut pas faire…). Afin d’obtenir les valeurs Bid, la fonction suivant doit être appelée:

{xtypo_code}SymbolInfoDouble(Symbol(),SYMBOL_BID);{/xtypo_code}

 

Il n’y a plus non plus les Low[0] ou iLow ( Symbol(), PERIOD_D1, 0 ) mais on peut facilement les reconstruire. Les nouvelles fonctions travaillant avec des données historiques donnent la possibilité de lire des données de l’histo d’un point à un autre , d’un certaine barre  à une autre , ou du temps selectionné au suivant. Avant, lire des séries de données nécessitait de toutes les charger en mémoire. Que l’on en ai besoin ou pas, c’était lu, et si vous avez besoin de de lire M1, le système partait de 1999 (dans le acs ou l’historique était disponible) jusqu’à la date courante, heure et minute.

Désormais, seulement l’ensemble nécessaire peut être lu, ce qui fera gagner du temps et de la mémoire.

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

 

Un tel changement de fonctionnalité n’est pas effrayant. Nous aurons simplement besoin de passer un peu de temps pour apprendre les nouvelles fonctions analogues.

Quelques innovations fonctionnelles que j’attendais de MQL

 

  • OnTimer() – fonction permettant de traiter les évènement de timer (il n’est désormais plus nécessaire de mettre tout l’EA dans une boucle pour le faire fonctionner pendant une certaine pèriode indépendante de celles liées à l’arrivée du prochain tick).
  • OnTrade() – fonction traitant les évènements liés aux trades (ouverture, fermeture, changement de volume, etc).
  • OnChartEvent() – fonction traitant les évènements engendrés par la souris ou le clavier.

 

Creusons un petit peu tout ça.

La fonction OnTimer()  est appelée si le timer est pré initialisé dans la fonction OnInit qui traite les évènements d’initialisation.

Exemple:

{xtypo_code}//+——————————————————————+
//|                                                                  |
//+——————————————————————+
int OnInit()
{
EventSetTimer(1); //eà chaque seconde on apelle OnTimer()
}
//+——————————————————————+
//|                                                                  |
//+——————————————————————+
void OnDeinit()
{
//l’annulation de la référence au timer doit être faite à la sortie
EventKillTimer();
}
//+——————————————————————+
//|                                                                  |
//+——————————————————————+
void OnTimer()
{
MqlDateTime str1;
TimeGMT(str1); // nouvelle fonction pour obtenir temps GMT
Comment(str1.hour
,str1.min
,str1.sec
,str1.day
,str1.mon
,str1.year
,str1.day_of_year
,OrdersTotal()
,PositionsTotal()
);
}{/xtypo_code}

 

Le contrôle peut donc être obtenu non seulement à la réception d’un tick comme c’était le cas autrefois, mais aussi par le timer ce qui autorise à écrire des programmes temps réels gérables. 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ù un des évènements suivant se produit: placement d’ordre, activation de StopLoss ou de TakeProfit, changement de StopLoss ou de niveau de TakeProfit, placement ou suppression de pending order, etc.

Désormais, c’est beaucoup plus facile de contrôler les évènements connectés aux opérations de trading. Il n’y a désormais plus besoin de boucles vérifiant l’état des ordres au niveau des ticks ou barres. De telles bocles étaient utilisées dans MQL4, ce qui réduisait considérablement les performances des EAs et leur optimisation.

Concentrons nous sur la fonction OnChartEvent(). L’appel de la fonction est réalisé pour de nombreux évènements. je ne suis pas parvenu à tester chacun d’entre eux, mais la liste est impressionnante :

  • CHARTEVENT_KEYDOWN — évènement d’appuie de bouton;
  • CHARTEVENT_OBJECT_CLICK — évènement d’un clic de souris sur un objet graphique appartenant à la fenêtre.
  • CHARTEVENT_OBJECT_DRAG — évènement de déplacement d’un objet graphique par la souris.
  • CHARTEVENT_OBJECT_ENDEDIT — évènement de fin d’édition d’un texte.
  • CHARTEVENT_CUSTOM+n — identifiant d’un évènement sur mesure.
  • CHARTEVENT_CUSTOM_LAST — le dernier.

 

La possibilité de gérer le trading et les graphiques sur une nouvelle base plus fonctionnelle était une des promesses des développeurs

 

Des nouveaux objets graphiques, des boutons et des champs d’entrées sont apparus. Le management des fenêtres est devenu fantastique, et l’on peut même insérer des images à partir de fichiers (cette option offre de nombreuses possibilités pour ceux qui aiment les designs spéciaux. Ce n’est pas Photoshop mais le résultat des possibilités de MQL5 et Metatarder 5. Parmi les nouvelles fonctionnalités, il est à noter que l’on put désormais créer ses propres boutons et champs d’entrées. par exemple un bouton qui ferme tous les ordres ouverts ou un quick Buy ou Sell configuré avec les valeurs des paramètres (stops et TP) par défauts.

undefined

Fig. 2. Les objets graphiques permettent de créer un espace informationnel.

Il y a un point qui me gêne cependant: les objets ne peuvent pas être créés à partir des indicateurs. Ceci a été fait intentionnellement dans  le but d’accélérer les performances des indicateurs. La bonne nouvelle est qu’ils l’ont compris et vont probablement implémenter la fonctionnalité pour démarrer plusieurs EAs dans une seule fenêtre. Nous serons capables de créer des EA-Indicateurs avec des objets et sans trader. De tels indicateurs peuvent être créer maintenant. Pour le moment le problème est résolu en ouvrant un EA dans une fenêtre et l’EA créant les objets dans une seconde fenêtre et puis ensuite implémenter les échanges entre eux.

Par exemple, je suis parvenu à transformer mon “breakthrough” indicateur de MQL4 à MQL5 en plusieurs heures. La plupart du temps a concerné l’apprentissage des fonctions et le debuggage. En MQL5 le code est devenu plus concis.

 

Pour parler du terminal en lui même, j’ai été impressionné par le nombre de timeframe. D’après moi, il n’y en a même trop, bien que l’abondance de timeframes minute peut être utile à certains traders. Bien, désormais il n’y a plus qu’un pas à faire pour arriver à la création d’un ensemble de timeframe libre. Désormais toutes les données de l’historique sont sauvegardées sous formes de minutes, et il n’y a donc pas de problèmes de synchronisation des différents timeframe (ceci est une solution technologique importante).

 

Désormais il n’y a plus de fichiers différents pour chaque timeframe dans le répertoire de l’historique.

undefined

Fig. 3. Tout l’historique est sauvé dans un seul fichier

Une autre nouveauté utile est la possibilité d’effacer les logs.

undefined

Fig. 4. Utilisez un bouton pour effacer tous les journaux de l’EA et supprimer les messages inutiles.

Ceci est juste un aperçu rapide de MetaTrader 5. Je ne peux décrire toutes les nouvelles caractéristiques en si peu de temps puisque les tests n’ont commencé que le 9 septembre. Je n’ai pas pu pour le moment tout essayer mais je suis déjà impressionné.

[…]

Yuriy Zaytsev
Skype: yurazyuraz
yzh@mail.ru

 

Traduction: Nicolas Vitale
“MQL5 and Metatrader  are trade marks of MetaQuotes Software Corp. and all related materials are reserved for MetaQuotes”

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>