SetIndexBuffer

Attache le tampon d'indicateur indiquée avec le tableau unidimentionnel dynamique du type double.

bool  SetIndexBuffer(
   int                    index,         // index du tampon
   double                 buffer[],      // tableau 
   ENUM_INDEXBUFFER_TYPE  data_type      // ce qui sera conservé
   );

Paramètres

index

[in]  Le numéro du tampon d'indicateur. Le numérotage commence par 0. Le numéro doit être moins de la valeur déclarée à #property indicator_buffers.

buffer[]

[in]  Le tableau déclaré dans le programme de l'indicateur d'utilisateur.

data_type

[in]  Le type de données, qui se trouve dans le tableau d'indicateur. Par défaut INDICATOR_DATA (la valeur de l'indicateur calculé). Peut aussi accepter la valeur INDICATOR_COLOR_INDEX, alors ce tampon est destiné au stockage des index des couleurs pour le tampon précédent d'indicateur. On peut spécifier environ 64 couleurs dans la ligne #property indicator_colorN. La valeur INDICATOR_CALCULATIONS signifie que ce tampon participe aux calculs intermédiaires de l'indicateur et n'est pas destiné pour le dessin.

La valeur rendue

En cas de l'exécution réussie rend true, dans le cas contraire rend false.

Note

Après le binding le tableau dynamique buffer[]  aura l'indexation comme dans les tableaux ordinaires, même si pour le tableau lié on établit préalablement l'indexation comme aux séries temporelles. S'il est nécessaire de changer l'ordre d'accès vers les éléments du tableau d'indicateur, il faut  appliquer la fonction ArraySetAsSeries() après le binding du tableau par la fonction SetIndexBuffer(). Il faut prendre en attention qu'il est impossible de changer la grandeur pour les tableaux dynamiques, nommés comme les tampons d'indicateur par la fonction SetIndexBuffer(). Pour les tampons d'indicateur toutes les opérations du changement de la grandeur sont produites par le sous-système exécutant du terminal.

Exemple:

//+------------------------------------------------------------------+
//|                                              TestCopyBuffer1.mq5 |
//|                         Copyright 2000-2024, MetaQuotes Ltd. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot MA
#property indicator_label1  "MA"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
input bool               AsSeries=true;
input int                period=15;
input ENUM_MA_METHOD     smootMode=MODE_EMA;
input ENUM_APPLIED_PRICE price=PRICE_CLOSE;
input int                shift=0;
//--- indicator buffers
double                   MABuffer[];
int                      ma_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   if(AsSeries) ArraySetAsSeries(MABuffer,true);
   Print("Le tampon d'indicateur est la série temporelle = ",ArrayGetAsSeries(MABuffer));
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
   Print("Le tampon d'indicateur après SetIndexBuffer() est la série temporelle = ",
         ArrayGetAsSeries(MABuffer));
   
//--- changeons le numéro d'accès vers les éléments du tampon d'indicateur
   ArraySetAsSeries(MABuffer,AsSeries);
   
   IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries);
//---
   ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);
   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[])
  {
//--- copions les valeurs du glissant moyen au tampon MABuffer
   int copied=CopyBuffer(ma_handle,0,0,rates_total,MABuffer);
 
   Print("MABuffer[0] = ",MABuffer[0]);// en fonction de la valeur AsSeries 
                                      // recevrons la plus vieille valeur
                                      // ou sur la barre courante inachevée
 
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Voir aussi

Les propriétés des indicateurs d'utilisateur, l'accès vers les séries temporelles et les indicateurs