Trading-Attitude
Les meilleurs indicateurs techniques
-

Comment créer un indicateur personnalisé dans MetaTrader

MQL4 trading automatiqueCréer un indicateur personnalisé dans MetaTrader

 

Dans cette nouvelle leçon sur la programmation de robots de trading automatique, nous allons développer un indicateur personnalisé en MQL4 pour le faire fonctionner dans MetaTrader.

Un indicateur est une courbe qui peut être affichée dans la même fenêtre que le graphique ou dans un cadre inférieur.

Attaquons tout de suite.

 

Créer un indicateur personnalisé

Ouvrez MetaEditor et cliquez sur le bouton New (celui avec un Plus).

Dans la fenêtre qui s’ouvre sélectionnez « Custom Indicator » comme radio bouton.

Dans la fenêtre suivante, saisissez le nom MyIndicator1.

Dans la fenêtre suivante ne changez rien. Validez.

Une fenêtre d’édition apparaît.

Vous allez tout sélectionner et remplacer par le code source suivant.

 

Code source MQL4 de l’indicateur personnalisé

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

//#property indicator_chart_window

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_color1 Blue

double iBuffer1[];

int init() {

   SetIndexStyle(0,DRAW_LINE);
   SetIndexBuffer(0,iBuffer1);

   string name = "My Indicator 1";

   IndicatorShortName(name);

   return(1);
}

int deinit() {
   return(0);
}

int start() {
   int countedBars=IndicatorCounted();

   if (countedBars<0) {
      return(-1);
   }

   if (countedBars>0) {
      countedBars--;
   }

   int pos = Bars - countedBars;

   Comment("This comment is in the main chart window");

   while(pos>=0) {
      iBuffer1[pos]= High[pos] - Low[pos];
      pos--;
   }

   return(0);
}

 

Comment faire fonctionner l’indicateur ?

Sauvegardez et compilez l’indicateur.

Le fichier est stocké dans le dossier experts\indicators de l’installation de votre logiciel MetaTrader.

Il apparaît dans le cadre navigateur (tapez Ctrl+N), dans le nœud « Indicateurs programmés« .

Pour l’ajouter au graphique (ouvrez d’abord un graphique s’il n’y en a pas) sélectionnez MyIndicator1 et faites-le glisser sur le graphique.

Une fenêtre de configuration apparaît. Ne changez rien. Validez.

Le graphique apparaît sous le graphique des prix, dans un nouveau cadre.

 

Explication du code de l’indicateur

Directives et variables globales

Vous avez peut-être remarqué une nouvelle directive (une directive c’est les instructions précédées par le signe # – dièse).

#property indicator_separate_window : elle indique que l’indicateur se trouvera dans un cadre séparé.

On peut choisir

#property indicator_chart_window

pour que l’indicateur soit dans le même cadre que le graphique des prix.

 

Un indicateur peut contenir jusqu’à 8 lignes.

La directive #property indicator_buffers 1 indique qu’il n’y en aura qu’une seule.

 

#property indicator_color1 Blue indique que la couleur de la première ligne sera le bleu.

 

La variable iBuffer1 est un tableau. Il contiendra les valeurs des points de l’indicateur.

 

Initialisation de l’indicateur

On doit utiliser la fonction init() pour déclarer l’indicateur.

SetIndexStyle(0,DRAW_LINE); indique que la première ligne (index 0, comme en langage C) sera de type DRAW_LINE.

Les types disponibles sont :

  • DRAW_LINE
  • DRAW_SECTION,
  • DRAW_HISTOGRAM,
  • DRAW_ARROW,
  • DRAW_NONE.

La fonction SeIndexStyle a la signature suivante (paramètres acceptés) :

void SetIndexStyle( int index, int type, int style=EMPTY, int width=EMPTY, color
clr=CLR_NONE)

Les valeurs par défaut sont indiquées après le signe =.

On n’est pas obligé de renseigner tous les paramètres.

Les styles disponibles sont :

  • STYLE_SOLID
  • STYLE_DASH
  • STYLE_DOT
  • STYLE_DASHDOT
  • STYLE_DASHDOTDOT
  • EMPTY

Le paramètre width est l’épaisseur.

Le paramètre clr est la couleur de la ligne.

 

La fonction bool SetIndexBuffer(int index, double array[]) indique que le premier tableau pour l’indicateur est iBuffer1. Le 0 indique le premier (cela vient du langage C, cette habitude de commencer par zéro).

 

void IndicatorShortName(string name) permet de donner un nom à l’indicateur.

 

Le calcul des valeurs de l’indicateur

Nous abordons maintenant le cœur du programme, l’endroit où nous calculons les valeurs prises par l’indicateur.

Mais tout d’abord…

 

Un point délicat

Il y a un petit passage difficile. Il se trouve au tout début de la fonction start().

On appelle, en effet, IndicatorCounted().

C’est une fonction de MQL4 qui

renvoie le nombre de barres (une barre = une bougie) comptées pour  l’indicateur la dernière fois qu’il a été appelé.

En clair, c’est le nombre de barres qu’il y avait au dernier lancement de l’indicateur. S’il n’y a pas eu d’erreur, la différence entre cette fois-ci et la précédente est d’une barre si on a changé de barre.

Si l’historique a beaucoup changé ou si l’indicateur est rechargé, elle retourne 0.

 

En fait, comme la fonctions start() est appelée à chaque tick (voir remarque plus loin), la dernière barre change à chaque tick. Donc, cette fonction renvoie Bars – 1 pour que la dernière barre soit toujours considérée comme nouvelle (afin qu’elle soit recalculée).

C’est pour une raison d’optimisation de calcul. La plupart des barres ne sont pas recalculées (l’indicateur n’est pas recalculé sur toutes les barres pour que cela aille plus vite).

 

Remarque importante à propos de la fonction start() d’un EA :

  • elle est exécutée quand un nouveau tick arrive. Mais si elle est en cours d’exécution lorsque le tick arrive, le tick n’est pas traité !

 

L’instruction suivante retourne -1 si cette fonction à donné un nombre inférieur à 0 (ce qui est anormal).

Ensuite, si countedBars est positif strictement supérieur à zéro, on le décrémente (a– est la même chose que a = a – 1). C’est parce que on veut être sûr de recalculer la valeur de l’indicateur pour la dernière barre.

 

Le calcul proprement dit

On a ensuite le calcul proprement dit. On initialise la variable « pos » avec le nombre de barres du graphique, donné par la variable MQL4 prédéfinie Bars.

On part de Bars – countedBars et on calcule la valeur jusqu’à la dernière.

On place le résultat du calcul dans chaque case du tableau.

Attention, le tableau qui va contenir les valeurs de l’indicateur, iBuffer1 est indexé comme les variables prédéfinies High, Low, Close, Open, …

 

Remarque sur la variable prédéfinie High, qui est un tableau :

  • la barre la plus récente possède l’indice 0 (la dernière case du tableau)
  • la barre la plus ancienne (la première dans le graphique, à gauche) se trouve à l’indice Bars – 1.

High[0] est la barre la plus récente.

Hight[Bars-1] est la plus ancienne.

 

Attention, c’est contre intuitif : de même, la valeur la plus récente de l’indicateur sera celle située à l’indice 0 !

 

Un petit éclaircissement s’impose
Cas n°1

Pas de changement de barre.

La fonction IndicatorCounted() retourne Bars – 1.

countedBars = Bars – 2

pos = 2

On va donc calculer iBuffer1[2], puis iBuffer1[1] et enfin iBuffer1[0].

 

calcul indicateur mql4

Remplissage du tableau de l’indicateur

 

Cas n°2

La fonction IndicatorCounted() retourne Bars – 2.

countedBars = Bars – 3

pos = 3

On va donc calculer :

  • iBuffer1[3]
  • iBuffer1[2]
  • iBuffer1[1]
  • iBuffer1[0]

 

L’affichage de l’indicateur dans MetaTrader

Voilà, nous avons programmé notre premier indicateur en MQL4.

Une fois attaché à un graphique cela donne quelque chose comme ce qui est décrit dans la capture d’écran suivante.

 

 

indicateur : le résultat

Le rendu dans MetaTrader

 

On remarquera :

  • le commentaire affiché dans le cadre du graphique des prix, en haut à gauche
  • le nom de l’indicateur, en haut à gauche dans le cadre de l’indicateur, avec sa dernière valeur
  • la courbe de l’indicateur, en bleu.

 

Nous voici armés pour pouvoir concevoir nos propres indicateurs et les utiliser dans nos propres Expert Advisors.

 

Si vous appréciez cet article, utilisez les boutons de partage sur les réseaux sociaux.

 

Vous pouvez aussi apprendre par vous-même grâce à ces livres :

ou cette formation sur MQL4 en vidéos

 

Pour aller plus loin

À quoi bon scalper si le spread vous prend une bonne partie de vos gains ? J’ai écrit un article sur une solution facilement adoptable pour :

  • trader avec un spread réduit
  • et limiter son risque très simplement.

Comments ( 3 )

  1. yoann
    Bonjour, Merci pour ce tutoriel bien expliqué. J'aimerais savoir, comment fait-on pour afficher 2 courbes en même temps? Je n'y arrives pas. Merci pour tes explications
    • Michel
      Bonjour, dans MT4, il faut chercher du côté de cet indicateur : https://www.mql5.com/en/code/7933 Ou http://www.forexagone.com/forum/experiences-trading/superposition-des-devises-3233 Dans PRT c'est un indicateur sur la fenêtre du prix qui s'appelle valeur comparée.
  2. yoann
    C'est bon j'ai trouvé entre temps. j'avais oublié d'initialisé la couleur de la seconde courbe. Merci aussi pour les liens

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