ArraySetAsSeries

La fonction définit le flag AS_SERIES d'un tableau dynamique, et ses éléments seront indexés comme pour les timeseries.

bool  ArraySetAsSeries(
   const void&  array[],    // tableau par référence
   bool         flag        // true signifie l'ordre inverse d'indexation
   );

Paramètres

array[]

[in][out]  Tableau numérique à modifier.

flag

[in]  Direction d'indexation du tableau.

Valeur de Retour

La fonction retourne true en cas de succès, sinon - false.

Note

Le flag AS_SERIES ne peut pas être défini pour les tableaux à plusieurs dimensions ou pour les tableaux statiques (tableaux dont la taille entre crochets est définit au moment de la compilation). L'indexation des timeseries diffère de celle d'un tableau classique car les éléments des timeseries sont indexés depuis la fin vers le début (du plus récent au plus ancien).

Exemple : Indicateur affichant le numéro des barres

Indicateur affichant le numéro des barres

 

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//---- dessin des numéros
#property indicator_label1  "Numeration"
#property indicator_type1   DRAW_LINE
#property indicator_color1  CLR_NONE
//--- buffers de l'indicateur
double         NumerationBuffer[];
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'indicateur personnalisé           |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- mapping des buffers de l'indicateur
   SetIndexBuffer(0,NumerationBuffer,INDICATOR_DATA);
//--- définit l'indexation du buffer comme les timeseries
   ArraySetAsSeries(NumerationBuffer,true);
//--- définit la précision d'affichage dans DataWindow
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- comment le nom du tableau de l'indicateur est affiché dans DataWindow
   PlotIndexSetString(0,PLOT_LABEL,"Bar #"); 
//---
   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[])
  {
//---  nous stockerons l'heure d'ouverture de la barre zéro courante
   static datetime currentBarTimeOpen=0;
//--- renverse l'accès au tableau time[] - mettons le comme dans les timeseries
   ArraySetAsSeries(time,true);
//--- Si l'heure de la barre zéro diffère de celle stockée
   if(currentBarTimeOpen!=time[0])
     {
     //--- énumère toutes les barres depuis la barre courante jusqu'au début du graphique
      for(int i=rates_total-1;i>=0;i--) NumerationBuffer[i]=i;
      currentBarTimeOpen=time[0];
     }
//--- retourne la valeur de prev_calculated pour le prochain appel
   return(rates_total);
  }

Voir aussi

Accès aux timeseries, ArrayGetAsSeries