Styles de Dessin

Lors de la création d'un indicateur personnalisé, vous pouvez spécifier l'un des 18 types de dessin (tel qu'affiché dans la fenêtre principale du graphique ou dans une sous-fenêtre), dont les valeurs sont spécifiées dans l'énumération ENUM_DRAW_TYPE.

Dans un indicateur personnalisé, il est possible d'utiliser n'importe quel type de dessin/construction d'indicateur. Chaque type de construction nécessite de spécifier de 1 à 5 tableaux globaux pour stocker les données nécessaires pour le dessin. Ces tableaux de données doivent être limités aux buffers des indicateurs avec la fonction SetIndexBuffer(). Le type de données de ENUM_INDEXBUFFER_TYPE doit être spécifié pour chaque buffer.

Suivant le style de dessin, il peut être nécessaire de spécifier de 1 à 4 buffers de valeurs (marqués avec INDICATOR_DATA). Si un style autorise une alternance de couleurs (tous les styles comporte COLOR dans leur nom), vous aurez alors besoin d'un buffer de couleur supplémentaire (type indiqué INDICATOR_COLOR_INDEX). Les buffers de couleurs sont toujours limités aux buffers de valeurs correspondant au style.

ENUM_DRAW_TYPE

Identifiant

Description

Buffers de données

Buffers de couleurs

DRAW_NONE

Non dessiné

1

0

DRAW_LINE

Ligne

1

0

DRAW_SECTION

Section

1

0

DRAW_HISTOGRAM

Histogramme depuis la ligne zéro

1

0

DRAW_HISTOGRAM2

Histogramme de deux buffers

2

0

DRAW_ARROW

Dessin de flèches

1

0

DRAW_ZIGZAG

Le style Zigzag permet de sectionner verticalement la barre

2

0

DRAW_FILLING

Couleur de remplissage entre deux niveaux

2

0

DRAW_BARS

Affichage sous la forme d'une suite de barres

4

0

DRAW_CANDLES

Affichage sous forme d'une suite de chandeliers

4

0

DRAW_COLOR_LINE

Ligne multi-couleurs

1

1

DRAW_COLOR_SECTION

Section multi-couleurs

1

1

DRAW_COLOR_HISTOGRAM

Histogramme multi-couleurs depuis la ligne zéro

1

1

DRAW_COLOR_HISTOGRAM2

Histogramme multi-couleurs des deux buffers de l'indicateur

2

1

DRAW_COLOR_ARROW

Dessin de flèches multi-couleurs

1

1

DRAW_COLOR_ZIGZAG

ZigZag multi-couleurs

2

1

DRAW_COLOR_BARS

Barres multi-couleurs

4

1

DRAW_COLOR_CANDLES

Chandeliers multi-couleurs

4

1

 

Pour affiner l'affichage du type de dessin sélectionné, les identifiants de ENUM_PLOT_PROPERTY sont utilisés.

Pour les fonctions PlotIndexSetInteger() et PlotIndexGetInteger()

ENUM_PLOT_PROPERTY_INTEGER

Identifiant

Description

Type de la Propriété

PLOT_ARROW

Code de la flèche à dessiner pour le style DRAW_ARROW

uchar

PLOT_ARROW_SHIFT

Décalage vertical pour les flèches pour le style DRAW_ARROW

int

PLOT_DRAW_BEGIN

Nombre de barres initiales sans dessin ni valeurs dans la Fenêtre des Données

int

PLOT_DRAW_TYPE

Type de construction graphique

ENUM_DRAW_TYPE

PLOT_SHOW_DATA

Signe d'affichage des valeurs de construction dans la Fenêtre des Données

bool

PLOT_SHIFT

Décalage du dessin de l'indicateur sur l'axe du temps, en barres

int

PLOT_LINE_STYLE

Style de dessin de la ligne

ENUM_LINE_STYLE

PLOT_LINE_WIDTH

Epaisseur de la ligne de dessin

int

PLOT_COLOR_INDEXES

Nombre de couleurs

int

PLOT_LINE_COLOR

Indice d'un buffer contenant la couleur de dessin

color       modificateur = numéro d'indice des couleurs

 

Pour la fonction PlotIndexSetDouble()

ENUM_PLOT_PROPERTY_DOUBLE

Identifiant

Description

Type de la Propriété

PLOT_EMPTY_VALUE

Valeur vide pour laquelle rien ne sera dessiné

double

Pour la fonction PlotIndexSetString()

ENUM_PLOT_PROPERTY_STRING

Identifiant

Description

Type de la Propriété

PLOT_LABEL

Le nom des séries graphiques de l'indicateur à afficher dans la Fenêtre des Données. L'utilisation de styles graphiques complexes nécessite plusieurs buffers pour l'affichage, les noms des buffers peuvent être spécifiés en utilisant ";" comme spérateur. Le code d'exemple est affiché dans DRAW_CANDLES

string

5 styles peuvent être utilisés pour le dessin des lignes dans les indicateurs personnalisés. Ils ne sont valides que pour une épaisseur de ligne de 0 ou 1.

ENUM_LINE_STYLE

Identifiant

Description

STYLE_SOLID

Ligne solide

STYLE_DASH

Ligne brisée

STYLE_DOT

Ligne pointillée

STYLE_DASHDOT

Ligne tiret-point

STYLE_DASHDOTDOT

Tiret - deux points

 

Pour définir le style de ligne et le type de dessin, il faut utiliser la fonction PlotIndexSetInteger(). Pour l'expansion des Fibonacci, l'épaisseur et le style de dessin des niveaux peuvent être indiqués avec la fonction ObjectSetInteger().

Exemple :

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- buffers de l'indicateur
double         MABuffer[];
//+----------------------------------------------------------------------------------------------------+
//| Fonction d'initialisation d'un indicateur personnalisé                                             |
//+----------------------------------------------------------------------------------------------------+
void OnInit()
  {
//--- Lie le tableau du buffer de l'indicateur avec l'indice 0
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
//--- Définit le style de dessin
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
//--- Définit le style de ligne
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_DOT);
//--- Définit la couleur de ligne
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrRed);
//--- Définit l'épaisseur de ligne
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);
//--- Définit l'étiquette de la ligne
   PlotIndexSetString(0,PLOT_LABEL,"Moving Average");
//---
  }
//+----------------------------------------------------------------------------------------------------+
//| Fonction d'itération de l'indicateur personnalisé                                                  |
//+----------------------------------------------------------------------------------------------------+
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[])
  {
//--- 
   for(int i=prev_calculated;i<rates_total;i++)
     {
      MABuffer[i]=close[i];
     }
//--- retourne la valeur de prev_calculated pour l'appel suivant
   return(rates_total);
  }