ArraySetAsSeries

A função define o flag AS_SERIES para um objeto de um array dinâmico, e os elementos serão indexados como em timeseries.

bool  ArraySetAsSeries(
   const void&  array[],    // array passado por referência
   bool         flag        // true significa ordem reversa de indexação
   );

Parâmetros

array[]

[in][out]  Array numérico para definir.

flag

[in]  Direção de indexação do array.

Valor do Retorno

A função retorna true para sucesso, caso contrário - false.

Observação

O flag AS_SERIES não pode ser definido para arrays multi-dimensionais ou arrays estáticos (arrays cujo tamanho nos colchetes já é predefinido na etapa de compilação). A indexação em sé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).

Exemplo: Indicador que mostra número de barra

Indicador para mostrar número de barra

 

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plota Numeration
#property indicator_label1  "Numeration"
#property indicator_type1   DRAW_LINE
#property indicator_color1  CLR_NONE
//--- buffers do indicador
double         NumerationBuffer[];
//+------------------------------------------------------------------+
//| Função de inicialização do indicador customizado                 |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- mapeamento de buffers do indicador
   SetIndexBuffer(0,NumerationBuffer,INDICATOR_DATA);
//--- definir a indexação do buffer como numa timeseries
   ArraySetAsSeries(NumerationBuffer,true);
//--- define a precisão de exibição na Janela de Dados
   IndicatorSetInteger(INDICATOR_DIGITS,0);
//--- como o nome do array do indicador é exibido na Janela de Dados
   PlotIndexSetString(0,PLOT_LABEL,"Bar #"); 
//---
   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[])
  {
//--- nós armazenaremos a hora de abertura da barra zero corrente
   static datetime currentBarTimeOpen=0;
//--- acesso reverso ao array time[] - fazemos isso como em séries temporais
   ArraySetAsSeries(time,true);
//--- se a hora da barra zero difere da hora armazenada
   if(currentBarTimeOpen!=time[0])
     {
     //--- enumera todas as barras a partir do corrento para a profundidade do gráfico
      for(int i=rates_total-1;i>=0;i--) NumerationBuffer[i]=i;
      currentBarTimeOpen=time[0];
     }
//--- valor retorno de prev_calculated para a próxima chamada
   return(rates_total);
  }

Também Veja

Acesso à séries de tempo, ArrayGetAsSeries