SetIndexBuffer

La funzione associa un buffer indicatore specificato con l'array dinamico unidimensionale di tipo double.

bool  SetIndexBuffer(
   int                    index,         // indice buffer
   double                 buffer[],      // array
   ENUM_INDEXBUFFER_TYPE  data_type      // ciò che verrà memorizzato
   );

Parametri

index

[in] Numero del buffer dell'indicatore. La numerazione inizia da 0. Il numero deve essere inferiore al valore dichiarato in #property indicator_buffers.

buffer[]

[in] Un array dichiarato nel programma indicatore personalizzato.

data_type

[in] tipo di dati memorizzati nell' array indicatore. Per impostazione predefinita è INDICATOR_DATA (valori dell'indicatore calcolato). Si può anche prendere il valore di INDICATOR_COLOR_INDEX; in questo caso tale buffer è usato per memorizzare indici di colore per il buffer indicatore precedente. È possibile specificare fino a 64 colori nella linea #property indicator_colorN. I valori INDICATOR_CALCULATIONS indicano che il buffer è utilizzato nei calcoli intermedi di indicatore dell'indicatore e non è inteso per il disegno.

Valore restituito

In caso di successo, restituisce true, altrimenti - false.

Nota

Dopo il legame, il buffer[] dell'array dinamico verrà indicizzato come nei comuni array, anche se l'indicizzazione delle timeseries è pre-installata per l'array legato. Se si desidera modificare l'ordine di accesso agli elementi dell'array indicatore, utilizzare la funzione ArraySetAsSeries() dopo aver legato l'array utilizzando la funzione SetIndexBuffer(). Tenere presente che non è possibile modificare la dimensione di array dinamici impostati come buffer indicatore dalla funzione SetIndexBuffer(). Per i buffer indicatore, tutte le operazioni di cambio grandezza vengono svolti dal sottosistema di esecuzione del terminale.

Esempio:

//+--------------------------------------------------------------------------------+
//|                                                            TestCopyBuffer1.mq5 |
//|                                      Copyright 2009, MetaQuotes Software Corp. | 
//|                                                           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
//--- parametri di input
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 indicatore
double                   MABuffer[];
int                      ma_handle;
//+--------------------------------------------------------------------------------+
//| Funzione di inizializzazione Indicatore Personalizzato                         |
//+--------------------------------------------------------------------------------+
int OnInit()
  {
//--- mappatura buffers indicatore
   if(AsSeries) ArraySetAsSeries(MABuffer,true);
   Print("Il buffer indicatore è una timeseries = ",ArrayGetAsSeries(MABuffer));
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
   Print("Il buffer indicatore dopo SetIndexBuffer() è una timeseries = ",
         ArrayGetAsSeries(MABuffer));
   
//--- cambia l'ordine di accesso agli elementi del buffer indicatore
   ArraySetAsSeries(MABuffer,AsSeries);
   
   IndicatorSetString(INDICATOR_SHORTNAME,"MA("+period+")"+AsSeries);
//---
   ma_handle=iMA(Symbol(),0,period,shift,smootMode,price);
   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[])
  {
//--- Copia i valori della media mobile nel buffer MABuffer
   int copied=CopyBuffer(ma_handle,0,0,rates_total,MABuffer);
 
   Print("MABuffer[0] = ",MABuffer[0]);// Dipende dai valori di AsSeries
                                      // Riceverà un valore molto vecchio
                                      // O per la corrente barra non finita
 
//--- restituisce il valore di prev_calculated per la prossima chiamata
   return(rates_total);
  }
//+--------------------------------------------------------------------------------+

Vedi anche

Proprietà Indicatori Personalizzati, Accesso alle timeseries ed indicatori