ArrayGetAsSeries

Vérifie la direction de l'indexation d'un tableau.

bool  ArrayGetAsSeries(
   const void&  array[]    // tableau à vérifier
   );

Paramètres

array

[in]  Tableau à vérifier.

Valeur de Retour

Retourne true si le tableau spécifié a le flag AS_SERIES, c'est à dire que l'accès au tableau est effectué de l'arrière vers l'avant comme dans les timeseries. Les timeseries diffèrent des tableaux classiques par leur indexation : l'indexation des éléments des timeseries est effectuée de la fin vers le début (des données les plus récentes aux plus anciennes).

Note

Pour vérifier si un tableau est de type timeseries, utiliser la fonction ArrayIsSeries(). Les tableaux de prix passés en paramètres à la fonction OnCalculate() n'ont pas obligatoirement le même sens d'indexation que les timeseries. Le sens nécessaire d'indexation peut être défini avec la fonction ArraySetAsSeries().

Exemple :

#property description "L'indicateur calcule les valeurs absolues des différences entre"
#property description "les prix Open et Close ou High et Low, les affichant dans une sous-fenêtre"
#property description "sous forme d'histrogramme."
//--- paramètres de l'indicateur
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- éléments dessinés
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3
//--- paramètres d'entrée
input bool InpAsSeries=true// Sens d'indexation dans le buffer de l'indicateur
input bool InpPrices=true;   // Prix à utilise pour les calculs (true - Open,Close ; false - High,Low)
//--- buffer de l'indicateur
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Calcul des valeurs de l'indicateur                               |
//+------------------------------------------------------------------+
void CandleSizeOnBuffer(const int rates_total,const int prev_calculated,
                        const double &first[],const double &second[],double &buffer[])
  {
//--- variable de départ pour le calcul des barres
   int start=prev_calculated;
//--- travaille sur la dernière barre si les valeurs de l'indicateur ont déjà été calculées sur le tick précédent
   if(prev_calculated>0)
      start--;
//--- définit le sens d'indexation des tableaux
   bool as_series_first=ArrayGetAsSeries(first);
   bool as_series_second=ArrayGetAsSeries(second);
   bool as_series_buffer=ArrayGetAsSeries(buffer);
//--- remplace le sens d'indexation avec un accès direct si nécessaire
   if(as_series_first)
      ArraySetAsSeries(first,false);
   if(as_series_second)
      ArraySetAsSeries(second,false);
   if(as_series_buffer)
      ArraySetAsSeries(buffer,false);
//--- calcule les valeurs de l'indicateur
   for(int i=start;i<rates_total;i++)
      buffer[i]=MathAbs(first[i]-second[i]);
  }
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé           |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- lie les buffers de l'indicateur
   SetIndexBuffer(0,ExtBuffer);
//--- définit le sens d'indexation du buffer de l'indicateur
   ArraySetAsSeries(ExtBuffer,InpAsSeries);
//--- vérifie pour quels prix l'indicateur est calculé
   if(InpPrices)
     {
      //--- Prix Open et Close
      PlotIndexSetString(0,PLOT_LABEL,"BodySize");
      //--- définit la couleur de l'indicateur
      PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrOrange);
     }
   else
     {
      //--- Prix High et Low
      PlotIndexSetString(0,PLOT_LABEL,"ShadowSize");
      //--- définit la couleur de l'indicateur
      PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrDodgerBlue);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//--- calcule l'indicateur selon la valeur du flag
   if(InpPrices)
      CandleSizeOnBuffer(rates_total,prev_calculated,open,close,ExtBuffer);
   else
      CandleSizeOnBuffer(rates_total,prev_calculated,high,low,ExtBuffer);
//--- retourne la valeur de prev_calculated pour le prochain appel
   return(rates_total);
  }

Voir aussi

Accès aux timeseries, ArraySetAsSeries