DRAW_LINE

Le style DRAW_LINE dessine par la couleur spécifiée la ligne selon les valeurs du tampon d'indicateur. On peut spécifier l'épaisseur, la couleur et le style de l'affichage de la ligne comme par les directives du compilateur, et dynamiquement à l'aide de la fonction PlotIndexSetInteger(). Le changement dynamique des propriétés de la construction graphique permet de créer les indicateurs "vivants", qui changent leur aspect en fonction de la situation actuelle.

Le nombre de tampons nécessaires pour la construction DRAW_LINE – 1.

L'exemple de l'indicateur dessinant la ligne aux prix de la clôture des barres Close. La couleur, l'épaisseur et le style de la ligne changent chaques 5 ticks par hasard.

L'exemple du style DRAW_LINE

Prêtez attention que primordialement à la construction graphiqueplot1 avec le style DRAW_LINE on spécifie les propriétés à l'aide de la directive du compilateur #property, et puis dans la fonction OnCalculate() ces trois propriétés sont spécifiées par hasard. Le paramètre N est sorti dans les paramètres extérieurs de l'indicateur pour la possibilité de l'installation manuelle (l'onglet "Paramètres" dans la fenêtre des propriétés de l'indicateur).

//+------------------------------------------------------------------+
//|                                                    DRAW_LINE.mq5 |
//|                         Copyright 2000-2024, MetaQuotes Ltd. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2000-2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#property description "L'indicateur pour la démonstration DRAW_LINE"
#property description "Dessine la ligne par la couleur spécifiée selon les prix Close"
#property description "La couleur, l'épaisseur et le style de la ligne change par hasard"
#property description "dans chaques N ticks"
 
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- les propriétés de la ligne sont spécifiées à l'aide des directives du compilateur
#property indicator_label1  "Line"      // le nom de la construction pour "la Fenêtre des données""
#property indicator_type1   DRAW_LINE   // le type de la construction graphique - la ligne
#property indicator_color1  clrRed      // la couleur de la ligne
#property indicator_style1  STYLE_SOLID // le style des lignes
#property indicator_width1  1           // l'épaisseur de la ligne
//--- le paramètre input
input int      N=5;         // le nombre de ticks pour le changement
//--- le tampon d'indicateur pour la construction
double         LineBuffer[];
//--- le tableau pour le stockage des couleurs
color colors[]={clrRed,clrBlue,clrGreen};
//--- le tableau pour le stockage des styles du dessin de la ligne
ENUM_LINE_STYLE styles[]={STYLE_SOLID,STYLE_DASH,STYLE_DOT,STYLE_DASHDOT,STYLE_DASHDOTDOT};
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- le binding du tableau et du tampon d'indicateur
   SetIndexBuffer(0,LineBuffer,INDICATOR_DATA);
//--- l'initialisation du générateur des nombres pseudo-accidentels
   MathSrand(GetTickCount());
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   static int ticks=0;
//--- calculons les ticks pour le changement du style, de la couleur et de l'épaisseur de la ligne
   ticks++;
//--- si le nombre critique des ticks est accumulé
   if(ticks>=N)
     {
      //--- changeons les propriétés de la ligne
      ChangeLineAppearance();
      //---oblitérons le compteur des ticks au zéro
      ticks=0;
     }
 
//--- le bloc du calcul des valeurs de l'indicateur
   for(int i=0;i<rates_total;i++)
     {
      LineBuffer[i]=close[i];
     }
 
//--- rendons la valeur prev_calculated pour un appel suivant de la fonction
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| modifie l'apparence de la ligne affichée dans l'indicateur          |
//+------------------------------------------------------------------+
void ChangeLineAppearance()
  {
//--- la ligne pour la formation de l'information sur les propriétés de la ligne
   string comm="";
//--- le bloc du changement de la couleur de la ligne
//--- recevrons le nombre accidentel
   int number=MathRand();
//--- le diviseur du nombre est égal au montant du tableau colors[]
   int size=ArraySize(colors);
//--- recevrons l'index pour le choix de la nouvelle couleur comme le reste de la division entière
   int color_index=number%size;
//--- définissons la couleur comme la propriété PLOT_LINE_COLOR
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,colors[color_index]);
//--- inscrirons la couleur de la ligne
   comm=comm+(string)colors[color_index];
 
//--- le bloc du changement de l'épaisseur de la ligne
   number=MathRand();
//--- recevrons l'épaisseur comme le reste de la division entière
   int width=number%5; // l'épaisseur est spécifiée de 0 jusqu'à 4
//--- définissons la couleur comme la propriété PLOT_LINE_WIDTH
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,width);
//--- inscrirons l'épaisseur de la ligne
   comm=comm+", Width="+IntegerToString(width);
 
//--- le bloc du changement du style de la ligne
   number=MathRand();
//--- le diviseur du nombre est égal à la taille du tableau styles
   size=ArraySize(styles);
//--- recevrons l'index pour le choix de la nouvelle couleur comme le reste de la division entière
   int style_index=number%size;
//--- définissons la couleur comme la propriété PLOT_LINE_COLOR
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,styles[style_index]);
//--- inscrirons le style de la ligne
   comm=EnumToString(styles[style_index])+", "+comm;
//--- déduisons l'information sur le graphique par le commentaire
   Comment(comm);
  }