SetIndexBuffer

Enlaza el búfer de indicador especificado con el array dinámico unidimensional del tipo double.

bool  SetIndexBuffer(
   int                    index,         // índice del buffer
   double                 buffer[],      // array
   ENUM_INDEXBUFFER_TYPE  data_type      // lo que vamos a almacenar
   );

Parámetros

index

[in]  Número del búfer de indicadores. La numeración se empieza desde 0. El número tiene que ser menos que el valor declarado en #property indicator_buffers.

buffer[]

[in]  Array declarado en el programa del indicador personalizado.

data_type

[in]  Tipo de datos guardados en el array de indicador. Por defecto INDICATOR_DATA (valores del indicador calculado). También puede adquirir el valor INDICATOR_COLOR_INDEX, entonces este búfer sirve para almacenar los índices de colores para el anterior búfer de indicadores. Se puede establecer hasta 64 colores en la línea #property indicator_colorN. El valor INDICATOR_CALCULATIONS significa que este buffer se usa en los cálculos intermedios del indicador y no está destinado para dibujar.

Valor devuelto

En caso de éxito devuelve true, de lo contrario devuelve false.

Nota

Después de enlazado el array dinámico buffer[]  tendrá la indexación como los arrays comunes, incluso si para este array previamente ha sido establecida la indexación como en las series temporales. Si hace falta cambiar el orden de acceso a los elementos del array de indicador, es necesario usar la función ArraySetAsSeries() después de enlazar el array usando la función SetIndexBuffer(). Además, hay que tener en cuenta que no se puede cambiar el tamaño de los arrays dinámicos que han sido asignados como búfers de indicadores por la función SetIndexBuffer(). Todas las operaciones relacionadas con el cambio de tamaño de los búfers de indicadores se realizan por el subsistema ejecutivo del terminal.

Ejemplo:

//+------------------------------------------------------------------+
//|                                              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
//---- plot MA
#property indicator_label1  "MA"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- input parameters
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;
//--- indicator buffers
double                   MABuffer[];
int                      ma_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   if(AsSeries) ArraySetAsSeries(MABuffer,true);
   Print("Búfer de indicadores es una serie temporal = ",ArrayGetAsSeries(MABuffer));
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
   Print("Búfer de indicadores después de SetIndexBuffer() es una serie temporal = ",
         ArrayGetAsSeries(MABuffer));
   
//--- vamos a cambiar el orden de acceso a los elementos del búfer de indicadores
   ArraySetAsSeries(MABuffer,AsSeries);
   
   IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries);
//---
   ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
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[])
  {
//--- vamos a copiar los valores del promedio móvil en el buffer MABuffer
   int copied=CopyBuffer(ma_handle,0,0,rates_total,MABuffer);
 
   Print("MABuffer[0] = ",MABuffer[0]);// dependiendo del valor AsSeries 
                                       // vamos a recibir el valor más antiguo
                                       // o en la barra actual no finalizada
 
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Véase también

Propiedades de indicadores personalizados, Acceso a las series temporales e indicadores