SetIndexBuffer

Verbindet den angegebenen Indikatorpuffer mit einem eindimensionalen dynamischen Feld des Typs double.

bool  SetIndexBuffer(
   int                    index,         // Index des Puffers
   double                 buffer[],      // Feld
   ENUM_INDEXBUFFER_TYPE  data_type      // was wird aufbewahren 
   );

Parameter

index

[in]  Nummer des Indikatorpuffers. Numerierung faengt mit 0 an. Nummer muss kleiner sein als der Wert, der in #property indicator_buffers erklärt wurde.

buffer[]

[in]  Feld, das im Programm des Benutzerindikators erklärt wird.

data_type

[in]  Typ der Daten, die im Indikatorfeld aufbewahren werden. Default-Wert ist INDICATOR_DATA (Werte des berechneten Indikators). Kann  auch den Wert INDICATOR_COLOR_INDEX annehmen, dann wird der vorliegende Puffer für Aufbewahrung der Farbenindexe für den vorherigen Indikatorpuffer. Man kann bis 64 Farben in der Zeile #property indicator_colorN vorgeben. Wert INDICATOR_CALCULATIONS bedeutet dass der vorliegende Puffer für Zwischenberechnungen des Indikators verwendet wird und für Zeichnen nicht bestimmt ist.

Rückgabewert

Im Erfolgsfall gibt true zurück, anderenfalls false.

Hinweis

Nach der Bindung wird das dynamische Feld buffer[]  dieselbe Indizierung haben, wie in normalen Feldern, auch wenn für das gebundene Feld Indizierung wie in Timeserien vorher eingestellt wird. Wenn es notwendig ist, die Folge des Zugangs zu Elementen des Indikatorfeldes zu verändern, muss man die Funktion ArraySetAsSeries() nach der Bindung des Feldes durch die Funktion SetIndexBuffer() anwenden. Dabei muss man behalten, dass die Größe der dynamischen Felder, die als Indikatorpuffer durch die Funktion SetIndexBuffer() zugeordnet werden, nicht verändert werden muss. Für Indikatorpuffer werden alle Operationen der Größenveränderung vom ausführenden Untersystem des Terminals durchgeführt.

Beispiel:

//+------------------------------------------------------------------+
//|                                              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
//--- 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("Anzeigerpuffer ist eine Zeitreihe = ",ArrayGetAsSeries(MABuffer));
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
   Print("Anzeigerpuffer nach SetIndexBuffer() ist eine Zeitreihe = ",
         ArrayGetAsSeries(MABuffer));
   
//--- verändern wir die Folge des Zugangs zu Elementen des Anzeigerpuffers  
   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[])
  {
//--- kopieren wir die Werte des gleitenden Mittelwertes in Puffer MABuffer
   int copied=CopyBuffer(ma_handle,0,0,rates_total,MABuffer);
 
   Print("MABuffer[0] = ",MABuffer[0]);// abhängig vom Wert AsSeries 
                                      // bekommen wir entweder den aeltesten Wert 
                                      // oder für die laufende unbeendete Bar 
 
//--- return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Sehen Sie auch

Eigenschaften der Benutzerindikatoren , Zugang zu Zeitreihen und Indikatoren