Trading-Attitude
Les meilleurs indicateurs techniques
-

Les instructions de base de MQL4

MQL4 trading automatique

Apprenez à coder en MQL4

leçon n°2 : les instructions de base

 

Nous voici dans la seconde leçon sur MQL4. Nous allons aborder les mots-clés de base.

Ces mots-clés sont similaires à ceux du langage C. Ils permettent de coder un programme, un algorithme, qui sera la base de votre Expert Advisor.

Attaquons tout de suite.

 

Les tests

On appelle test un embranchement dans l’algorithme du programme. En clair, c’est une instruction du genre : si … sinon  …

On l’écrit :

if (ma_variable == valeur) {
  ...
} else {
  ...
}

 

Les … sont d’autres instructions. Si ma_variable vaut valeur, le premier bloc d’instructions est exécuté, sinon c’est le second.

Notez que l’égalité se note ==. Le signe = tout seul est une affectation. Par exemple, maVar = 2; affect la valeur 2 à la variable maVar.

À la place de == on peut utiliser <=, >=, >, < ou != (non égal à).

 

Les accolades ne sont pas nécessaires, mais je vous conseille de toujours les mettre. Cela renforce la lisibilité et cela vous évitera quelques bugs.

 

Vous noterez qu’il ne faut pas mettre de point-virgule après l’accolade fermante.

 

On peut aussi utiliser des fonctions dans le test : if (maFonction() > 3) {…}.

Dans le cas d’expressions booléennes on peut utiliser l’opérateur ! pour obtenir la négation :

bool done = false;

if (!done) {...}

Les boucles

Une boucle va permettre d’exécuter un bloc d’instructions plusieurs fois.

La boucle for

Par exemple :

double maVar2 = 0;

for (int i=0;i<10;i++) {
  maVar2 = maVar2 + i;
}

 

Ce programme va ajouter à la variable maVar2 la valeur de, i variant de 0 à 9 de un en un.

À la fin, maVar2 vaudra 45 (1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 = 45).

 

La boucle while

On peut obtenir la même chose avec l’instruction while (tant que).

      int j = 0;

      while (j<10) {
         maVar2 = maVar2 + j;
         j = j + 1;
      }

 

Sortir d’une boucle

Pour sortir d’une boucle avant la fin on peut utiliser l’instruction break.

while (true) {
   ...
   if (maVar2 > 10) {
     break;
   }
}

 

Ici, on sort de la boucle infinie (while(true)) dès que maVar2 est strictement supérieur à 10.

Attention, while(true) est une boucle infinie. Telle quelle le programme n’en sort jamais.

 

Passer à l’itération suivante

Si on ne veut pas exécuter le reste du code d’une boucle et passer tout de suite à l’itération suivante (valeur de i suivante), on peut utiliser l’instruction continue.

      int maVar2 = 0;

      for (int i=0;i<10;i++) {
         maVar2 = maVar2 + i;
         continue;
      }

Imbrication

Comme vous l’avez vu, on peut imbriquer les boucles et les tests autant de fois que l’on veut.

Pour des raisons de lisibilité du code limitez-vous à 2 ou 3 niveaux max.

 

Voilà, c’est a peu près toutes les instructions de base de MQL4 dont vous aurez besoin pour créer un Expert Advisor dans MetaTrader.

Le reste ce sont des instructions propres à MQL4 qui servent à passer des ordres. Nous les aborderons dans une leçon prochaine – dans pas très longtemps.

 

Exécution de votre premier programme MQL4

Nous allons maintenant créer un petit programme et l’exécuter.

Créez un nouvel EA dans MetaEditor (voir comment faire dans la leçon 1). Nommez-le lecon2.

Effacez son contenu et collez à la place :

 

#property copyright "Copyright © 2013 Trading Attitude"
#property link      "http://www.trading-attitude.com"

double maVar = 2.0;
bool done = false;

int start()
  {

   if (!done) {
      int maVar2 = 0;
      for (int i=0;i<10;i++) {
         maVar2 = maVar2 + i;
         continue;
      }

      Print("maVar2=" + maVar2);

      int j = 0;
      while (j<10) {
         maVar2 = maVar2 + j;
         j = j + 1;
      }

      Print("maVar2=" + maVar2);
      done = true;
   }
   return(0);
  }

 

Sauvegardez le fichier (dans MetaEditor).

 

Compilez-le en cliquant sur le bouton Compile.

bouton compiler de MetaEditor

 

Vérifiez en bas de MetaEditor qu’il n’y a pas d’erreur de compilation.

MetaEditor erreurs

Maintenant le fichier est compilé sous la forme d’un fichier lecon2.ex4.
Vous le trouverez dans le répertoire C:\Program Files\MetaTrader – AAAFx\experts

Maintenant allez dans MetaTrader. Grâce au menu Affichage / Cadre Stratégies (ou Ctrl + R) affichez l’onglet stratégies.

MetaTrader cadre Stratégies

Ctrl + R ouvre le cadre stratégies

 

Dans la liste déroulante Expert Consultant, choisissez lecon2. Les autres paramètres importent peu.

Cliquez ensuite sur le bouton « Valeur initiale ».

Lorsque vous entendez le bruit de canard, le programme est terminé.

Cliquez sur l’onglet « Journal ».

Vous devriez voir dans le journal le résultat des deux appels de la fonction « Print()« .

Le journal de MetaTrader

Le journal de MetaTrader contient les données imprimées par l’expert consultant

 

Analyse du code de l’expert advisor

Chaque fois qu’une cotation arrive dans votre terminal MetaTrader (on appelle cela un Tick) la fonction start() est appelée.

La variable globale done, un booléen (donc, qui prend la valeur true ou false), permet de n’exécuter le code qu’une seule fois.

Donc, la première fois, la boucle « for » est exécutée. Elle imprime ensuite dans le journal le résultat du calcul.

La fonction Print

La fonction Print() permet d’afficher dans les logs une chaîne de caractères.

Le signe + permet la concaténation de chaînes de caractères.

Print(« maVar2= » + maVar2);

affichera donc maVar2=45.

 

Ensuite, le code utilise une boucle « while » pour refaire le calcul. Elle ajoute le résultat au précédent.

On affiche ensuite la valeur.

Et on donne la valeur « true » à la variable « done » de façon à ne plus repasser dans la boucle.

Enfin, on renvoie la valeur 0 grâce à l’instruction « return(0) ».

 

Il faut bien comprendre que cette fonction « start() » est appelée chaque fois qu’un nouveau prix arrive.

 

Conclusion

Nous avançons lentement mais sûrement. Vous possédez maintenant les bases du langage.

Nous verrons dans une prochaine leçon comment passer des ordres.

En attendant, n’hésitez pas à poser des questions sur ces deux premières leçons.

 

Accélérez votre trading grâce à ce robot

Vous voulez sans doute aller plus loin. Voici un robot qui vous permettra d’accélérer votre trading. Tout en réduisant votre risque.

Cliquez ici pour découvrir de quoi il s’agit.

Comments ( 9 )

  1. Nicolas de Robots Trading
    Bonjour, C'est un article vraiment bien réalisé, tu aurais aussi pour le nommer "le MQL4 pour les null". Dommage que le titre soit déjà pris ^^
    • Michel
      Merci Nicolas !
  2. Margot
    Quel est l'intérêt de s'abonner à ta lettre si je reçois tes nouveaux blog plus rapidement par twitter que courriel???
    • Michel
      Merci pour ce feedback, Margot. Vous préférez donc utiliser Tweeter ? Je ne veux pas trop embêter les gens par email. Et puis, avec Tweeter, et autres réseaux, si l'on suit beaucoup de monde, on peut rater des messages. Chacun est libre de faire ses choix. Dès que je trouve le temps je change d'autorépondeur et offre un contenu exclusif par email, dans la durée. À plus.
  3. gilbert
    j'ai repris l'exercice dans son ensemble et aussi par copie/coller mais j'ai double quote needed à deux reprises errors je suis novice et intéressé s'il est possible de m'éclairer cet énigme qui pour l'instant me parais insoluble? cordialement gilbert
  4. Gilles
    bonjour, petite question, j'ai codé ceci : double solde = AccountCredit (); int s=0 ; while ( s < solde /1000) { s = s + 1 ;} lot = s * 0.01 ; mais comme n'avait pas d'ordres qui passaient j'ai rajouté ceci : Print("maVar2=" + solde); (oui j'ai fait un copié collé ^^ ) et la réponse est 0. Le solde du compte n'étant pas nul, quel est le problème? codialement Gilles
    • Michel
      "Any AccountCredit() on the account isn't your money. In effect, it's the broker's money which they are letting you trade with." from https://www.mql5.com/en/forum/153664 Il faut utiliser AccountBalance() ou AccountEquity() Michel Article récent : Volatilité : gagner quand le marché plongeMy Profile
      • Gilles
        super, merci bien!!!

Leave a reply

Your email address will not be published.

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=""> <strike> <strong>

CommentLuv badge