iCustom

Belirtilen özel göstergenin tanıtıcı değerine dönüş yapar.

int  iCustom(
   string           symbol,     // sembol ismi
   ENUM_TIMEFRAMES  period,     // periyot
   string           name        // klasörün veya özel göstergenin ismi
   ...                          // gösterge giriş parametrelerinin listesi
   );

Parametreler

symbol

[in] Menkul değerin sembol ismi, gösterge hesabında kullanılması gereken veri. NULL değeri mevcut sembol anlamına gelir.

period

[in] Periyot değeri, ENUM_TIMEFRAMES değerlerinden biri olabilir, 0 mevcut zaman aralığını belirtir.

name

[in]  Özel gösterge adından önce ters eğik çizgi '\' gösteriliyorsa, EX5 gösterge dosyası MQL5 kök klasörüne göre aranır. Dolayısıyla,, iCustom(Symbol(), Period(), "\FirstIndicator"...) çağrıldığında, gösterge MQL5\FirstIndicator.ex5 olarak indirilir. Eğer yolda dosya yoksa, 4802 hatası (ERR_INDICATOR_CANNOT_CREATE) oluşur.

Yol '\' ile başlamıyorsa, gösterge aşağıdaki gibi aranır ve indirilir:

  • İlk olarak, çağrı programının EX5 dosyasının bulunduğu klasörde EX5 gösterge dosyası aranır. Örneğin, CrossMA.EX5 uzman danışmanı MQL5\Experts\MyExperts içerisinde bulunmaktadır ve iCustom çağrısını (Symbol(), Period(), "SecondIndicator"...) içermektedir. Bu durumda, gösterge MQL5\Experts\MyExperts\SecondIndicator.ex5 olarak aranır.
  • Gösterge aynı dizinde bulunamazsa, arama MQL5\Indicators gösterge kök dizininde gerçekleştirilir. Başka bir deyişle, MQL5\Indicators\SecondIndicator.ex5 dosyası aranır. Gösterge hala bulunamazsa, fonksiyon INVALID_HANDLE geri döndürür ve 4802 hatası (ERR_INDICATOR_CANNOT_CREATE) tetiklenir.

Göstergenin yolu bir alt dizinde ayarlanmışsa (örneğin, MyIndicators\ThirdIndicator), arama ilk olarak çağrı programı klasöründe (uzman danışman MQL5\Experts\MyExperts klasöründe bulunur) MQL5\Experts\MyExperts\MyIndicators\ThirdIndicator.ex5 dosyası için gerçekleştirilir. Başarısız olursa, MQL5\Indicators\MyIndicators\ThirdIndicator.ex5 dosyası aranır. Yolda ayırıcı olarak çift ters eğik çizgiyi '\\' kullandığınızdan emin olun, örneğin iCustom(Symbol(), Period(), "MyIndicators\\ThirdIndicator"...)

...

[in]  Virgüle ayrılmış şekilde, özel göstergenin giriş-parametreleri. parametrelerin tipleri ve sıraları uyumlu olmalıdır. Eğer belirtilen bir parametre değeri yoksa, varsayılan değerler kullanılır.

Dönüş değeri

Belirtilen teknik göstergenin tanıtıcı değerine dönüş yapar, başarısızlık durumunda ise, INVALID_HANDLE değerine dönüş yapar. Bilgisayar belleği, kullanılmayan göstergelerden temizlenmelidir. Bunun için, göstergenin tanıtıcı değerinin parametre olarak geçirildiği IndicatorRelease() fonksiyonu kullanılır.

Not

Bir özel gösterge, (EX5 uzantısı ile) derlenmeli ve müşteri terminalinin MQL5/Indicators klasörüne - veya bir alt klasöre - yerleştirilmelidir.

Sınama gerektiren göstergeler, eğer karşılık gelen parametre bir sabit dizgi ile ayarlanmışsa, iCustom() fonksiyonunun çağrısıyla otomatik olarak tanımlanırlar. Tüm diğer durumlarda (IndicatorCreate() fonksiyonunun kullanımı veya sabit olmayan bir dizginin gösterge ismini belirleyen bir parametrede kullanımı) #property tester_indicator özelliği gereklidir:

#property tester_indicator "gösterge_ismi.ex5"

Eğer göstergede ilk çağrı biçimi kullanılmışsa, o zaman gösterge başlangıcında "Parameters" sekmesinde, hesaplama için ek veriler belirtebilirsiniz. "Apply to" parametresi açıkça seçilmemişse, varsayılan hesaplama "Close" (kapanış) fiyatlarıyla yapılır.

Bir göstergenin hesaplanması için zaman serilerinin seçilmesi

Bir MQL5 programının içinden bir özel gösterge çağrıldığında, özel göstergenin girdi değişkenlerinden sonra, Applied_Price parametresi veya başka bir göstergenin tanıtıcı değeri son olarak geçirilmelidir.

Ayrıca Bakınız

Program Özellikleri, Zaman Serileri ve Göstergelere Erişim,IndicatorCreate(), IndicatorRelease()

Örnek:

#property indicator_separate_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot Label1
#property indicator_label1  "Label1"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1
//--- giriş parametreleri
input int MA_Period=21;
input int MA_Shift=0;
input ENUM_MA_METHOD MA_Method=MODE_SMA;
//--- gösterge tamponları
double         Label1Buffer[];
//--- Custom Moving Average.mq5 özel göstergesinin tanıtıcı değeri
int MA_handle;
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- gösterge tamponlarının eşlenmesi
   SetIndexBuffer(0,Label1Buffer,INDICATOR_DATA);
   ResetLastError();
   MA_handle=iCustom(NULL,0,"Examples\\Custom Moving Average",
                     MA_Period,
                     MA_Shift,
                     MA_Method,
                     PRICE_CLOSE // kapanış fiyatlarını kullanarak
                     );
   Print("MA_handle = ",MA_handle,"  hata = ",GetLastError());
//---
   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[])
  {
//--- Custom Moving Average göstergesinin değerlerini gösterge tamponuna kopyala
   int copy=CopyBuffer(MA_handle,0,0,rates_total,Label1Buffer);
   Print("copy = ",copy,"    rates_total = ",rates_total);
//--- Deneme başarısız olduysa - Bunu rapor et
   if(copy<=0)
      Print("Custom Moving Average değerlerinin kopyalanması başarısız oldu");
//--- bir sonraki çağrı için prev_calculated değerine dönüş yap
   return(rates_total);
  }
//+------------------------------------------------------------------+