ArrayGetAsSeries

Verifica a direção do índice de um array.

bool  ArrayGetAsSeries(
   const void&  array[]    // array para verificação
   );

Parâmetros

array

[in]  Array verificado.

Valor do Retorno

Retorna true, se o array especificado tem o flag AS_SERIES definido, isto é, o acesso ao array é realizado de trás para frente como em séries de tempo. A indexação em timeséries de tempo difere da indexação de um array comum, na medida que os elementos de séries de tempo são indexados do fim para o começo (dos dados mais novos para os mais antigos).

Observação

Para verificar se um array se comporta como uma série de tempo, use a função ArrayIsSeries(). Array de dados de preços passados como parâmetros de entrada na função OnCalculate() não obrigatoriamente têm a mesma direção de uma série de tempo. A direção de indexação necessária pode ser definida usando a função ArraySetAsSeries().

Exemplo:

#property description "Indicador calcula os valores absolutos das diferenças entre"
#property description "Preços de Open (Abertura) e Close (Fechamento) ou High (Alto) e Low (Baixo) exibidos numa sub-janela separada"
#property description "como um histograma."
//--- configurações do indicador
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plotar
#property indicator_type1   DRAW_HISTOGRAM
#property indicator_style1  STYLE_SOLID
#property indicator_width1  3
//--- parâmetros de entrada
input bool InpAsSeries=true// Direção de indexação no buffer de indicador
input bool InpPrices=true;   // Cálculo de preços (true - Abertura, Fechamento; false - Máximo, Mínimo)
//--- buffer do indicador
double ExtBuffer[];
//+------------------------------------------------------------------+
//| Calcule os valores do indicador                                  |
//+------------------------------------------------------------------+
void CandleSizeOnBuffer(const int rates_total,const int prev_calculated,
                        const double &first[],const double &second[],double &buffer[])
  {
//--- iniciar variável para o cálculo das barras
   int start=prev_calculated;
//--- trabalho na última barra se os valores do indicador já foram calculados no tick anterior
   if(prev_calculated>0)
      start--;
//--- definir a direção de indexação nos arrays
   bool as_series_first=ArrayGetAsSeries(first);
   bool as_series_second=ArrayGetAsSeries(second);
   bool as_series_buffer=ArrayGetAsSeries(buffer);
//--- substituir a direção de indexação com um direto, se necessário
   if(as_series_first)
      ArraySetAsSeries(first,false);
   if(as_series_second)
      ArraySetAsSeries(second,false);
   if(as_series_buffer)
      ArraySetAsSeries(buffer,false);
//--- calcule valores do indicador
   for(int i=start;i<rates_total;i++)
      buffer[i]=MathAbs(first[i]-second[i]);
  }
//+------------------------------------------------------------------+
//| Função de inicialização do indicador customizado                 |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- vincular buffers de indicador
   SetIndexBuffer(0,ExtBuffer);
//--- conjunto de elementos de indexação no buffer de indicador
   ArraySetAsSeries(ExtBuffer,InpAsSeries);
//--- verificar quais os preços do indicador são calculados
   if(InpPrices)
     {
      //--- Preços Open (abrir) e Close (fechar)
      PlotIndexSetString(0,PLOT_LABEL,"BodySize");
      //--- definir a cor do indicador
      PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrOrange);
     }
   else
     {
      //--- Preços High (máximo) e Low (mínimo)
      PlotIndexSetString(0,PLOT_LABEL,"ShadowSize");
      //--- definir a cor do indicador
      PlotIndexSetInteger(0,PLOT_LINE_COLOR,clrDodgerBlue);
     }
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função de iteração do indicador customizado                      |
//+------------------------------------------------------------------+
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[])
  {
//--- calcular o indicador de acordo com o valor do sinalizador
   if(InpPrices)
      CandleSizeOnBuffer(rates_total,prev_calculated,open,close,ExtBuffer);
   else
      CandleSizeOnBuffer(rates_total,prev_calculated,high,low,ExtBuffer);
//--- valor retorno de prev_calculated para a próxima chamada
   return(rates_total);
  }

Também Veja

Aceso a séries de tempo, ArraySetAsSeries