ArrayGetAsSeries

Controlla la direzione dell' indice dell' array.

bool  ArrayGetAsSeries(
   const void&  array[]    // array per il controllo
   );

Parametri

array

[in]  Array controllato.

Valore restituito

Restituisce vero, se l'array specificato, ha il flag AS_SERIES impostato, vale a dire l'accesso all' array viene eseguito dal posteriore all'anteriore come nelle timeseries. La timeseries differisce da un array usuale nel fatto che l'indicizzazione di elementi della timeseries viene eseguita dalla fine all'inizio (dai dati più recenti a quelli più vecchi).

Nota

Per verificare se un array appartiene alle timeseries, utilizzare la funzione ArrayIsSeries(). Arrai di dati sui prezzi passati come parametri di input nella funzione OnCalculate() non obbligatoriamente hanno la direzione di indicizzazione identica alle timeseries. La direzione di indicizzazione necessaria può essere impostata utilizzando la funzione ArraySetAsSeries().

Esempio:

#property description "L'indicatore calcola i valori assoluti della differenza tra"
#property description "i prezzi Open e Close o High e Low visualizzandoli in una sottofinestra separata"
#property description "come un istogramma."
//--- impostazioni indicatore
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3
//--- parametri di input
input bool InpAsSeries=true// Direzione di indicizzazione nel buffere indicatore
input bool InpPrices=true;   // Calcolo dei prezzi (true - Open,Close; false - High,Low)
//--- buffer indicatore
double ExtBuffer[];
//+--------------------------------------------------------------------------------+
//| Calcola i valori dell'indicatore                                               |
//+--------------------------------------------------------------------------------+
void CandleSizeOnBuffer(const int rates_total,const int prev_calculated,
                        const double &first[],const double &second[],double &buffer[])
  {
//--- variabile iniziale per il calcolo delle barre
   int start=prev_calculated;
//--- lavora all'ultima barra se i valori degli indicatori sono già stati calcolati al tick precedente
   if(prev_calculated>0)
      start--;
//--- definisce la direzione di indicizzazione nell'array
   bool as_series_first=ArrayGetAsSeries(first);
   bool as_series_second=ArrayGetAsSeries(second);
   bool as_series_buffer=ArrayGetAsSeries(buffer);
//--- sostituisce la direzione di indicizzazione con una diretta se necessario
   if(as_series_first)
      ArraySetAsSeries(first,false);
   if(as_series_second)
      ArraySetAsSeries(second,false);
   if(as_series_buffer)
      ArraySetAsSeries(buffer,false);
//--- calcola i valori dell'indicatore
   for(int i=start;i<rates_total;i++)
      buffer[i]=MathAbs(first[i]-second[i]);
  }
//+--------------------------------------------------------------------------------+
//| Funzione di inizializzazione Indicatore Personalizzato                         |
//+--------------------------------------------------------------------------------+
int OnInit()
  {
//--- lega i buffer indicatore
   SetIndexBuffer(0,ExtBuffer);
//--- imposta l'elemento di indicizzazione nel buffer indicatore
   ArraySetAsSeries(ExtBuffer,InpAsSeries);
//--- controlla per quali prezzi l'indicatore è calcolato
   if(InpPrices)
     {
      //--- Apre e Chiude i prezzi
      PlotIndexSetString(0,PLOT_LABEL,"BodySize");
      //--- imposta i colori dell'indicatore
      PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrOrange);
     }
   else
     {
      //--- Prezzi High e Low
      PlotIndexSetString(0,PLOT_LABEL,"ShadowSize");
      //--- imposta i colori dell'indicatore
      PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrDodgerBlue);
     }
//---
   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[])
  {
//--- calcola l'indicatore in base al valore della flag
   if(InpPrices)
      CandleSizeOnBuffer(rates_total,prev_calculated,open,close,ExtBuffer);
   else
      CandleSizeOnBuffer(rates_total,prev_calculated,high,low,ExtBuffer);
//--- restituisce il valore di prev_calculated per la prossima chiamata
   return(rates_total);
  }

Vedi anche

Accesso alle timeseries, ArraySetAsSeries