ArraySetAsSeries

La funzione imposta il flag AS_SERIES ad un oggetto di un array dinamico, E gli elementi verranno indicizzati come in TimeSeries.

bool  ArraySetAsSeries(
   const void&  array[],    // array per riferimento
   bool         flag        // true denota l'ordinamento invertito di indicizzazione
   );

Parametri

array[]

[in][out]  Array numerico da impostare.

flag

[in]  Direzione indicizzazione Array.

Valore restituito

La funzione restituisce true in caso di successo, altrimenti - false.

Nota

Il flag AS_SERIES non può essere impostato per array multidimensionali o array statici (array, le cui grandezze tra parentesi quadre sono preimpostate già in fase di compilazione). L' indicizzazione nelle timeseries si differenzia da array comune nel fatto che gli elementi delle timeseries sono indicizzati a partire dalla fine verso l'inizio (dai dati più recenti ai più vecchi).

Esempio: indicatore che mostra il numero di barre

Indicatore per la visualizzazione del numero barre

 

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot della Numerazione
#property indicator_label1  "Numerazione"
#property indicator_type1   DRAW_LINE
#property indicator_color1  CLR_NONE
//--- buffers indicatore
double         NumerationBuffer[];
//+--------------------------------------------------------------------------------+
//| Funzione di inizializzazione Indicatore Personalizzato                         |
//+--------------------------------------------------------------------------------+
int OnInit()
  {
//--- mappatura buffers indicatore
   SetIndexBuffer(0,NumerationBuffer,INDICATOR_DATA);
//--- imposta indicizzazione per il buffer come nelle timeseries
   ArraySetAsSeries(NumerationBuffer,true);
//--- imposta l'accuratezza da mostrare in DataWindow
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- come il nome dell'array dell' indicatore viene visualizzato in DataWindow
   PlotIndexSetString(0,PLOT_LABEL,"Bar #"); 
//---
   return(INIT_SUCCEEDED);
  }
//+--------------------------------------------------------------------------------+
//| Funzione di iterazione indicatore personalizato                                |
//+--------------------------------------------------------------------------------+
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[])
  {
//--- memorizzamo l'ora di apertura della corrente barra
   static datetime currentBarTimeOpen=0;
//--- ripristiniamo l'accesso all' array time[] - facciamolo come nelle timeseries
   ArraySetAsSeries(time,true);
//--- Se il tempo della barra zero differisce da quello conservato
   if(currentBarTimeOpen!=time[0])
     {
     //--- enumeriamo tutte le barre da quella corrente alla profondità del grafico
      for(int i=rates_total-1;i>=0;i--) NumerationBuffer[i]=i;
      currentBarTimeOpen=time[0];
     }
//--- restituisce il valore di prev_calculated per la prossima chiamata
   return(rates_total);
  }

Vedi anche

Accesso alle timeseries, ArrayGetAsSeries