SetIndexBuffer

Bu fonksiyon, belirtilen bir gösterge tamponunu double tipi dinamik bir dizi ile bağlar.

bool  SetIndexBuffer(
   int                    index,         // tampon indisi
   double                 buffer[],      // dizi
   ENUM_INDEXBUFFER_TYPE  data_type      // depolanacak verinin tipi
   );

Parametreler

index

[in] Gösterge tamponunun numarası. Numaralama (indisleme) 0 ile başlar. İndis #property indicator_buffers özelliğinde bildirilen sayıdan küçük olmalıdır.

buffer[]

[in]  Özel gösterge programında bildirilmiş bir dizi.

data_type

[in] Gösterge dizisinde depolanan verinin tipi. Varsayılan olarak INDICATOR_DATA değerini alır (hesaplanan göstergenin değerlerini belirtir). INDICATOR_COLOR_INDEX değerini de alabilir; bu durumda tampon, önceki gösterge tamponu için renk indislerini depolamak amacıyla kullanılır. 64 adete kadar farklı rengi #property indicator_colorN satırında belirtebilirsiniz. INDICATOR_CALCULATIONS değeri, tamponun ara hesaplamalarda kullanılmak için tasarlandığı ve çizilmeyeceği anlamına gelir.

Dönüş değeri

Başarılı sonuç durumunda true değerine, aksi durumda - false değerine dönüş yapar.

Not

İndisleme yönü daha önceden zaman-serileri şeklinde ayarlanmış bile olsa, buffer[] dizisi, bağlama işleminden sonra sıradan dizilerde olduğu gibi indislenir. Bir gösterge dizisindeki elemanların erişim sırasını değiştirmek istiyorsanız, ArraySetAsSeries() fonksiyonunu kullanın (dizi SetIndexBuffer() fonksiyonu ile bağlandıktan sonra). SetIndexBuffer() fonksiyonunu kullanarak gösterge tamponu şeklinde ayarlanmış dinamik bir dizinin büyüklüğünün değiştirilemeyeceğini lütfen not ediniz. Gösterge tamponlarının büyüklüklerinin değişimi için gerekli tüm işlemler, terminalin idari alt-sistemi tarafından gerçekleştirilir.

Örnek:

//+------------------------------------------------------------------+
//|                                              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
//--- giriş parametreleri
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;
//--- gösterge tamponları
double                   MABuffer[];
int                      ma_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- gösterge tamponlarının eşlenmesi
   if(AsSeries) ArraySetAsSeries(MABuffer,true);
   Print("SetIndexBuffer() çağrısından sonra gösterge tamponu bir zaman-serisi = ",
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
   Print("SetIndexBuffer() çağrısından sonra gösterge tamponu bir zaman-serisi = ",
         ArrayGetAsSeries(MABuffer));
   
//--- gösterge tamponu elemanlarının erişim sırasını değiştir
   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[])
  {
//--- MABuffer tamponundaki hareketli ortalama değerlerini kopyala 
   int copied=CopyBuffer(ma_handle,0,0,rates_total,MABuffer);
 
   Print("MABuffer[0] = ",MABuffer[0]);// AsSeries değerine bağlı olarak
                                      // Ya çok eski bir değer alınacak
                                      // Ya da tamamlanmamış bir çubuk
 
//--- bir sonraki çağrı için prev_calculated değerine dönüş yap
   return(rates_total);
  }
//+------------------------------------------------------------------+

Ayrıca Bakınız

Özel Gösterge Özellikleri, Zaman-serilerine ve göstergelere erişim