SetIndexBuffer

A função vincula um buffer específico de indicador com um array unidimensional dinâmico do tipo double.

bool  SetIndexBuffer(
   int                    index,         // índice de buffer
   double                 buffer[],      // array
   ENUM_INDEXBUFFER_TYPE  data_type      // O que será o armazenado
   );

Parâmetros

index

[in] Número do buffer do indicador. A numeração inicia com 0. O número deve ser inferior ao valor declarado em #property indicator_buffers.

buffer[]

[in]  Um array declarado no programa de indicador personalizado.

data_type

[in] Tipo de dados armazenados no array do indicador. Por padrão ele é INDICATOR_DATA (valores de cálculos do indicador). Ele também pode ter o valor de INDICATOR_COLOR_INDEX; neste caso, este buffer é usado para armazenar índices de cor para o buffer do indicador anterior. Você pode especificar até cores na linha #property indicator_colorN. O valor INDICATOR_CALCULATIONS significa que o buffer é usado nos cálculos intermediário do indicador, e não se destina ao desenho.

Valor do Retorno

Com sucesso, retorna true, do contrário - false.

Observação

Após a vinculação, o array buffer[] dinâmico será indexado como os arrays comuns, mesmo que a indexação de timeseries seja obrigatoriamente pré-instalado para o array. Se você quiser alterar a ordem de acesso aos elementos do array do indicador, use a função ArraySetAsSeries() após a vinculação do array usando a função SetIndexBuffer(). Por favor, note que você não pode alterar o tamanho dos arrays dinâmicos definidos como buffers do indicador pela função SetIndexBuffer(). Para buffers do indicador, todas as operações de alteração de tamanho são realizadas pela execução do sub-sistema do terminal.

Exemplo:

//+------------------------------------------------------------------+
//|                                              TestCopyBuffer1.mq5 |
//|                         Copyright 2000-2024, MetaQuotes Ltd. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "2009, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
 
#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plotar MA
#property indicator_label1  "MA"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- parâmetros de entrada
input bool               AsSeries=true;
input int                period=15;
input ENUM_MA_METHOD     smootMode=MODE_EMA;
input ENUM_APPLIED_PRICE price=PRICE_CLOSE;
input int                shift=0;
//--- buffers do indicador
double                   MABuffer[];
int                      ma_handle;
//+------------------------------------------------------------------+
//| Função de inicialização do indicador customizado                 |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- mapeamento de buffers do indicador
   if(AsSeries) ArraySetAsSeries(MABuffer,true);
   Print("Buffer do indicador é timeseries = ",ArrayGetAsSeries(MABuffer));
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
   Print("Buffer do indicador após SetIndexBuffer() é timeseries = ",
         ArrayGetAsSeries(MABuffer));
   
//--- alterar a ordem dos elementos de acesso do buffer do indicador
   ArraySetAsSeries(MABuffer,AsSeries);
   
   IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries);
//---
   ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);
   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[])
  {
//--- Copiar os valores da média móvel no buffer MABuffer
   int copied=CopyBuffer(ma_handle,0,0,rates_total,MABuffer);
 
   Print("MABuffer[0] = ",MABuffer[0]);// Dependendo dos valores AsSeries
                                      // Receberá um valor mais antigo
                                      // Ou para a barra atual inacabada
 
//--- valor retorno de prev_calculated para a próxima chamada
   return(rates_total);
  }
//+------------------------------------------------------------------+

Também Veja

Propriedades dos indicadores personalizados, Acesso para indicadores e timeseries