jeudi 1 août 2013

La boucle while en MQL4: initiation à la programmation d'expert advisors

L'avant-dernière instruction indispensable pour programmer: la boucle while. (comme vous pouvez le constater, il n'y a pas beaucoup d'instructions à savoir, le reste n'est que créativité de la part du programmeur). Le but d'une boucle while est de répéter un bloc d'instructions tant qu'une condition est vraie. Le premier piège dans lequel on tombe tous: écrire une condition qui ne sera jamais fausse, donc du coup, la boucle est répétée indéfiniment. Du genre: les paramètres de la condition ne changent pas, et du coup elle sera toujours vraie ! Autre piège: il faut que la condition soit vraie au départ pour au moins rentrer dans la boucle et exécuter au moins une fois le bloc. Voici sa syntaxe:

while(condition) {
   instruction 1;
   instruction 2;
   ...
   instruction n;
}
autres instructions;

On écrit donc le mot while, puis une paire de parenthèses encadrant une condition (sous forme de variable booléenne dont le contenu doit changer, ou sous forme d'expression logique qui donne un résultat vrai ou faux et les paramètres de cette expression doivent aussi varier sinon elle donnera toujours le même résultat). Puis une accolade ouvrante pour débuter la série d'instruction à répéter. On fini évidemment après les instructions avec une accolade fermante. Nous allons appliquer cette instruction à un petit expert advisor qui va à l'initialisation répéter une demande de déblocage de l'expert s'il n'est pas autorisé à travailler. Je m'explique: il y a un bouton bascule dans MetaTrader qui autorise ou non les experts à travailler. Et dans la librairie de fonctions de MQL4, il y a une fonction qui va vérifier si le bouton est enclenché ou non. Elle renvoie vrai ou faux. On va donc l'utiliser comme condition de la boucle, et si l'expert n'est pas autorisé on va faire une alerte pour demander le déblocage. Puis après une pause de quelques secondes dans la boucle, on la recommence. La condition va être de nouveau vérifiée et dans le cas où elle serait encore vraie, le bloc serait encore exécuté: alerte puis pause (La pause c'est pour éviter de provoquer une avalanche d'alertes parce que dès que le bloc est terminé, il recommence. Et tout se passe très, très vite !). La fonction qui nous donne la condition est: IsExpertEnabled(), son nom est explicite (est-ce que l'expert est autorisé) et elle donne vrai si c'est le cas, faux sinon. Nous, on veut "est-ce que l'expert n'est pas autorisé?", donc on doit prendre la négation avec un point d'exclamation devant:  !IsExpertEnabled(). Ce qui donnera vrai si l'expert n'est pas autorisé (bouton non enclenché) et faux s'il l'est. Comme ça, dès que l'expert est autorisé, on sort de la boucle. La fonction qui permet de faire une pause est: sleep(). C'est aussi très explicite ! On doit lui mettre entre parenthèses le nombre de millisecondes de pause désiré. Nous allons utiliser l'expert créé dans le tutoriel précédent: celui qui compte les changements de pente. Voici les étapes à suivre depuis le logiciel MetaTrader 4:

  • Dans le navigateur arborescent, cliquez sur la croix des experts consultants pour les dérouler.
  • Faites un clic-droit sur l'expert DetectionChangementsPente puis Modifier dans le menu contextuel.
  •  L'éditeur de code s'est ouvert avec l'expert advisor. Placez-vous à la fin de la ligne nbHausses = 0; dans la fonction init(). Appuyez sur la touche Entrée pour faire une nouvelle ligne.
  • Saisissez le code suivant:

   while(!IsExpertEnabled()) {
      Alert("il faut autoriser l\'expert !");
      Sleep(5000);
   }

  • Cliquez sur le bouton à la disquette bleue pour enregistrer.
  • Cliquez sur le bouton Compile.
  • Vérifiez qu'il n'y a pas d'erreurs de compilation en bas. Si oui, il faut contrôler ce que vous avez saisi et corriger. Dès que vous n'avez pas d'erreur, ni warning, retournez sous MetaTrader 4.
  • Cliquez sur le bouton Experts Advisors à droite de celui au losange jaune. Il faut qu'il soit désactivé pour ne pas autoriser les experts à travailler.
  • Faites un clic sur l'expert DetecteurChangementsPente dans le navigateur arborescent, et sans relâcher, glissez et déposez-le sur un graphique.
  • Cliquez sur Ok dans la fenêtre de paramétrage pour le lancer.
  • La fenêtre d'alerte doit s'ouvrir et sonner avec le message qu'on a inscrit dans le code. Si ce n'est pas le cas, il faut vérifier que vous n'avez pas oublié le point d'exclamation dans la condition de la boucle.
  • Toutes les 5000 millisecondes, soit 5 secondes, l'alerte se répète. Cliquez alors sur bouton Experts Advisors pour les autoriser de nouveau.
  • Vous pouvez fermer la fenêtre d'alerte.
  • Quand vous arrêtez l'expert, par un clic-droit sur le graphique et Experts Consultants > Retirer, il doit vous indiquer les hausses et baisses et stagnations comme il le faisait avant, dans la fenêtre Experts en bas de MetaTrader.


Et le tout expliqué dans un tutoriel vidéo très court cette fois-ci. Il n'y a pas beaucoup de code à saisir aujourd'hui. Ce code peut très bien s'appliquer à n'importe quel expert advisor. La prochaine fois nous verrons une autre boucle, mais qui compte les répétitions: la boucle 'for'. Errata: J'ai annoncé au début dans le tutoriel vidéo "instruction switch", il faut bien sûr comprendre "instruction while".

Aucun commentaire:

Enregistrer un commentaire