Styles des indicateurs dans les exemples

Dans le terminal de client MetaTrader 5 il y a 38 indicateurs techniques qui peuvent être utilisés dans les programmes MQL5 à l'aidedes fonctions correspondantes. Mais un principal avantage du langage MQL5 - c'est la possibilité de créer ses propres indicateurs d'utilisateur, qui peuvent ensuite être utilisées dans les conseillers pour recevoir des valeurs ou tout simplement d'imposer sur les graphiques de prix pour l'analyse technique.

On peut recevoir l'ensemble des indicateurs sur la base de quelquesstyles de la dessin, appelés appelé comme les constructions graphiques. La construction est considérée comme le moyen de l'affichage des données, lesquelles l'indicateur calcule, garde et donne selon la demande. Au total il y a sept constructions de base:

  1. la ligne,
  2. la section (le segment),
  3. l'histogramme,
  4. la flèche (le symbole)
  5. le domaine peint (le canal avec le remplissage),
  6. les barres,
  7. les chandeliers japonnais.

Chaque construction exige pour son affichage de 1 à cinq tableauxdu type doubleoù se trouvent les valeurs de l'indicateur. Ces tableaux se connectent aux tampons d'indicateur pour le confort du fonctionnement de l'indicateur. Il faut déclarer le nombre de tampons dans l'indicateur à l'aide de ladirective du compilateur, par exemple:

#property indicator_buffers 3 // le nombre de tampons
#property indicator_plots   2 // le nombre de constructions graphiques

Le nombre de tampons dans l'indicateur est toujours plus ou égal au nombre de constructions dans l'indicateur.

Comme chaque construction de base graphique peut avoir les variations de couleur ou l'affichage spécifique, le nombre réel de constructions dans le langage de MQL5 est 18:

La construction

La description

Les tampons des valeurs

Des tampons de la couleur

DRAW_NONE

N'affiche pas visuellement sur le graphique, mais on peut regarder les valeurs du tampon correspondant dans "Fenêtre des données"

1

-

DRAW_LINE

On construit la ligne selon les valeurs du tampon correspondant (les valeurs vides dans le tampon sont indésirables)

1

-

DRAW_SECTION

Se dessine par les segments entre les valeurs du tampon correspondant (d'habitude il y a beaucoup de valeurs vides)

1

-

DRAW_HISTOGRAM

Se dessine par l'histogramme de la ligne zéro aux valeurs du tampon correspondant (on admet les valeurs vides)

1

-

DRAW_HISTOGRAM2

Se dessine par l'histogramme sur deux tampons d'indicateur (on admet les valeurs vides)

2

-

DRAW_ARROW

S'affiche par les symboles (on admet les valeurs vides)

1

-

DRAW_ZIGZAG

Est semblable au style DRAW_SECTION, mais à la différence de lui il peut construire les segments verticaux sur une barre

2

-

DRAW_FILLING

Remplissage de couleur entre les deux lignes. Dans "La fenêtre des données" sont affichées les valeurs des deux tampons correspondants

2

-

DRAW_BARS

L'affichage en forme de barres sur le graphique. Dans "La fenêtre des données" sont montrées les 4 valeurs des tampons correspondants

4

-

DRAW_CANDLES

L'affichage en forme de chandeliers japonais. Dans "La fenêtre des données" sont montrées les 4 valeurs des tampons correspondants

4

-

DRAW_COLOR_LINE

La ligne pour laquelle vous pouvez alterner les couleurs sur les barres différentes ainsi que changer sa couleur à n'importe quel moment du temps

1

1

DRAW_COLOR_SECTION

Est semblable au styleDRAW_SECTION, mais on peut spécifier la couleur de chaque section individuellement, on peut spécifier la couleur dynamiquement

1

1

DRAW_COLOR_HISTOGRAM

Est semblable au styleDRAW_HISTOGRAM, mais chaque bande peut avoir la couleur, on peut spécifier la couleur dynamiquement

1

1

DRAW_COLOR_HISTOGRAM2

Est semblable au style DRAW_HISTOGRAM2,  mais chaque bande peut avoir la couleur, on peut spécifier la couleur dynamiquement

2

1

DRAW_COLOR_ARROW

Est semblable au styleDRAW_ARROW, mais chaque symbole peut avoir sa couleur. La couleur peut être changée dynamiquement

1

1

DRAW_COLOR_ZIGZAG

Le styleDRAW_ZIGZAG avec la possibilité du coloriage individuel des sections et le remplacement dynamique de la couleur

2

1

DRAW_COLOR_BARS

Le styleDRAW_BARSavec la possibilité du coloriage individuel des barres et le remplacement dynamique de la couleur

4

1

DRAW_COLOR_CANDLES

Le styleDRAW_CANDLES avec la possibilité du coloriage individuel des bougies et le remplacement dynamique de la couleur

4

1

 

La différence entre le tampon d'indicateur et le tableau

Il faut déclarer dans chaque indicateur auniveau global un ou plusieurs tableaux de type double, qui doit être utilisé après comme un tampon d'indicateur à l'aide de la fonctionSetIndexBuffer(). Pour dessiner les constructions graphiques de l'indicateur sont utilisés seulement les valeurs de tampons d'indicateur, ou on ne peut pas utiliser les autres tableaux pour cela. En outre, les valeurs des tampons sont montrées dans "la Fenêtre des données".

Un tampon d'indicateur doit être dynamique et ne nécessite pas l'indication de la taille - la taille du tableau utilisé comme le tampon d'indicateur, s'installe automatiquement par le sous-système exécutif du terminal.

La direction de l'indexation après le binding du tableau avec le tampon d'indicateur s'établit par défaut comme dans les tableaux ordinaires, mais on peut appliquer en cas de nécessité la fonctionArraySetAsSeries() pour le changement du moyen de l'accès aux éléments du tableau. Par défaut, le tampon d'indicateur est utilisé pour stocker les données destinés pour le dessin ( INDICATOR_DATA .)

Si pour les calculs des valeurs de l'indicateur il faut faire les calculs intermédiaires et garder la valeur auxiliaire pour chaque barre, pendant le binding on peut déclarer un tel tableau à titre du tampon de calcul (INDICATOR_CALCULATIONS). On peut utiliser un tableau ordinaire pour des valeurs intermédiaires, mais dans ce cas le programmeur doit gérer la taille de tel tableau.

Certaines constructions permettent de spécifier pour chaque barre la couleur de l'image. Pour stocker l'information sur la couleur on utilise les tampons de couleur (INDICATOR_COLOR_INDEX .) La couleur est représenté par un type entier color, mais tous les tampons d'indicateurs doivent avoir le typedouble. On ne peut pas recevoir les valeurs colorées et auxiliaires (INDICATOR_CALCULATIONS) des tampons à l'aide de la fonctionCopyBuffer().

Le nombre de tampons d'indicateur doit être indiqué par la directive du compilateur#property indicator_buffers le nombre_de tampons:

#property indicator_buffers 3  //  l'indicateur a 3 tampons

Le nombre maximum de tampons dans un indicateur est 512.

 

La conformité des tampons d'indicateur et des constructions graphiques

Chaque construction graphique est basé sur un ou plusieurs tampons d'indicateur. Ainsi pour un simple affichage des chandeliers japonais il est nécessaire quatre valeurs - les prix Open, High, Low et Close. En conséquence, pour afficher l'indicateur en forme de chandeliers japonais il faut déclarer 4 tampons d'indicateur, et 4 tableaux de type double pour eux. Par exemple:

//--- il y a quatre tampons d'indicateur dans l'indicateur 
#property indicator_buffers 4
//--- il y a une construction graphique dans un indicateur
#property indicator_plots   1
//--- la construction graphique sous le numéro 1 s'affichera par les chandeliers japonais
#property indicator_type1   DRAW_CANDLES
//--- Les chandeliers japonaises se dessineront par la couleur clrDodgerBlue
#property indicator_color1  clrDodgerBlue
//--- 4 tableaux pour les tampons d'indicateur
double OBuffer[];
double HBuffer[];
double LBuffer[];
double CBuffer[];

 

Les constructions graphiques utilisent automatiquement les tampons d'indicateur conformément au numéro de la construction. Les numéros de la construction commencent par 1, les numéros des tampons commencent par le zéro. Si la première construction nécessite 4 tampons d'indicateur, les 4 premiers tampons d'indicateur seront utilisés pour le dessin. Ces quatre tampons doivent être liés par la fonction SetIndexBuffer()aux tableaux correspondants avec l'indexation juste.

//--- l'enchaînement des tableaux avec les tampons d'indicateur
   SetIndexBuffer(0,OBuffer,INDICATOR_DATA);  // le premier tampon correspond à l'index zéro
   SetIndexBuffer(1,HBuffer,INDICATOR_DATA);  // le deuxième tampon correspond à l'index 1
   SetIndexBuffer(2,LBuffer,INDICATOR_DATA);  // le troisième tampon correspond à l'index 2
   SetIndexBuffer(3,CBuffer,INDICATOR_DATA);  // le quatrième tampon correspond à l'index 3

Pendant qu'on fait le dessin des chandeliers japonais l'indicateur utilisera notamment les premiers quatre tampons, parce que la construction "les chandeliers japonais" a été déclarée par le premier numéro.

Changeons un peu l'exemple, ajoutons la construction en forme de la ligne simple - DRAW_LINE.  Supposons maintenant que la ligne aura le numéro 1 et les chandeliers japonais seront sous le numéro 2. Le nombre de tampons et le nombre de constructions a augmenté.

//--- dans l'indicateur il y a 5 tampons d'indicateur
#property indicator_buffers 5
//--- dans l'indicateur il y a 2 constructions graphiques
#property indicator_plots   2
//--- la construction graphique sous le numéro 1 s'affichera par la ligne
#property indicator_type1   DRAW_LINE
//--- la ligne sera dessinée par la couleur clrDodgerRed
#property indicator_color1  clrDodgerRed
//--- la construction graphique sous le numéro 2 s'affichera par les chandeliers japonais
#property indicator_type2   DRAW_CANDLES
//--- Les chandeliers japonaises se dessineront par la couleur clrDodgerBlue
#property indicator_color2  clrDodgerBlue
//--- 5 tableaux pour les tampons d'indicateur
double LineBuffer[];
double OBuffer[];
double HBuffer[];
double LBuffer[];
double CBuffer[];

L'héritage des constructions a changé, maintenant par le premier il y a une ligne, après suivent les chandeliers japonais. C'est pourquoi l'ordre de l'héritage des tampons sera le même - d'abord nous déclarons le tampon pour la ligne sous l'index zéro, et puis quatre tampons pour l'affichage des chandeliers japonais.

   SetIndexBuffer(0,LineBuffer,INDICATOR_DATA);  // le deuxième tampon correspond à l'index 0
//---l'enchaînement des tableaux avec les tampons d'indicateur pour les chandeliers japonais
   SetIndexBuffer(1,OBuffer,INDICATOR_DATA);     // le deuxième tampon correspond à l'index 1
   SetIndexBuffer(2,HBuffer,INDICATOR_DATA);     // le troisième tampon correspond à l'index 2
   SetIndexBuffer(3,LBuffer,INDICATOR_DATA);     // le quatrième tampon correspond à l'index 3
   SetIndexBuffer(4,CBuffer,INDICATOR_DATA);     // le cinquième tampon correspond à l'index 4 

On peut spécifier le nombre de tampons et de constructions graphiques seulement à l'aide des directives du compilateur, le changement dynamique de ces propriétés à l'aide des fonctions est impossible.

 

Les versions colorées des styles

Comme on peut voir dans le tableau, les styles se divisent sur deux groupes. Le premier groupe – ce sont les styles dont dans ses titres il n'y a pas le mot COLOR, appellerons-les les styles de base:

  • DRAW_LINE
  • DRAW_SECTION
  • DRAW_HISTOGRAM
  • DRAW_HISTOGRAM2
  • DRAW_ARROW
  • DRAW_ZIGZAG
  • DRAW_FILLING
  • DRAW_BARS
  • DRAW_CANDLES

Le deuxième groupe des styles contient dans le nom le mot COLOR, appellerons-les leurs versions colorées:

  • DRAW_COLOR_LINE
  • DRAW_COLOR_SECTION
  • DRAW_COLOR_HISTOGRAM
  • DRAW_COLOR_HISTOGRAM2
  • DRAW_COLOR_ARROW
  • DRAW_COLOR_ZIGZAG
  • DRAW_COLOR_BARS
  • DRAW_COLOR_CANDLES

Toutes les versions colorées des styles se distinguent des sujets de base qui permettent de spécifier la couleur pour chaque partie de la construction graphique. La partie minimale de la construction est le barre, c'est pourquoi on peut dire que les versions colorées permettent de spécifier la couleur de la construction sur chaque barre.

Pour spécifier la couleur de la construction sur chaque barre, aux versions colorées des styles a été ajouté le tampon supplémentaire spécial pour stocker l'index de la couleur. Ces index indiquent au numéro de la couleur dans un tableau spécial contenant l'ensemble prédéfini de couleurs. La taille du tableau des couleurs est 64. Cela signifie que chaque version colorée du style permet de colorer la construction graphique par 64 couleurs différentes.

On peut spécifier l'ensemble et le nombre de couleurs dans un tableau spécial des couleurs par la directive du compilateur #property indicator_color, où on indique toutes les couleurs nécessaires par la virgule. Par exemple, une telle inscription dans l'indicateur:

//--- spécifions 8 couleurs pour colorer les bougies (ils se trouvent dans un tableau spécial)
#property indicator_color1  clrRed,clrBlue,clrGreen,clrYellow,clrMagenta,clrCyan,clrLime,clrOrange

Ici est indiqué que pour la construction graphique le numéro 1 on spécifie 8 couleurs, qui seront placées au tableau spécial. Ensuite dans le programme nous spécifions pas la couleur elle-même, par laquelle s'affichera la construction graphique, mais seulement son index. Si nous voulons spécifierla couleur rouge pour la barre, pour cela il est nécessaire d'installer l'index de la couleur rouge du tableau dans un tampon coloré. La couleur rouge est spécifiée dans la directive par le première, l'index le numéro 0 lui correspond.

  //--- spécifions la couleur de la bougie clrRed
  col_buffer[buffer_index]=0;

L'ensemble des couleurs pour le coloriage n'est pas spécifié une fois pour toujours, on peut le changer dynamiquement à l'aide de la fonction PlotIndexSetInteger(). Exemple:

      //--- installons la couleur pour chaque index comme la propriété PLOT_LINE_COLOR
      PlotIndexSetInteger(0,                    //  le numéro du style graphique
                          PLOT_LINE_COLOR,      //  l'identificateur de la propriété
                          plot_color_ind,       //  l'index de la couleur, où nous inscrirons la couleur
                          color_array[i]);      //  une nouvelle couleur

 

Les propriétés de l'indicateur et des constructions graphiques

Pour les constructions graphiques on peut installer les propriétés à l'aidedirectives du compilateur, ainsi qu'à l'aide des fonctions appropriées. Plus en détail cela est décrit dans le paragrapheLien entre les propriétés de l'indicateur et les fonctions. Le changement dynamique des propriétés de l'indicateur à l'aide des fonctions permet de créer les indicateurs plus flexibles d'utilisateur.

 

Commencer à dessiner l'indicateur sur le graphique

En plusieurs cas sous les conditions de l'algorithme il est impossible de commencer le calcul des valeurs de l'indicateur tout de suite par la barre actuelle, il faut assurer le minimum des bars précédents accessibles dans l'histoire. Par exemple, plusieurs aspects de lissage sous-entendent qu'on prend le tableau des prix aux barres N précédentes, et sur la base de ces valeurs est calculée la valeur de l'indicateur pour une barre actuelle.

Dans tels cas il n'y a pas de possibilité de calculer les valeurs de l'indicateur sur les premières barres N, ou ces valeurs ne sont pas destinées à l'affichage sur le graphique et ils sont seulement auxiliaire pour le calcul des valeurs ultérieures. Pour refuser la visualisation de l'indicateur sur les premières barres N de l'histoire, il faut mettre à la propriété PLOT_DRAW_BEGIN la valeur N pour la construction correspondante graphique:

//---l'enchaînement des tableaux avec les tampons d'indicateur pour les chandeliers japonais
PlotIndexSetInteger(le numéro_de la construction_graphique,PLOT_DRAW_BEGIN,N);

Ici:

  • le numéro_de la construction_graphique — la valeur du zéro jusqu'au indicator_plots-1 (le numérotage des constructions graphiques commence par le zéro).
  • N — le nombre de premières barres dans l'histoire, sur lesquelles l'indicateur ne doit pas s'afficher sur le graphique.