- Örneklerle Gösterge Stilleri
- Gösterge Özellikleri ve Fonksiyonlar Arasındaki Bağlantı
- SetIndexBuffer
- IndicatorSetDouble
- IndicatorSetInteger
- IndicatorSetString
- PlotIndexSetDouble
- PlotIndexSetInteger
- PlotIndexSetString
- PlotIndexGetInteger
Özel Göstergeler
Özel göstergelerin tasarımında kullanılan grup fonksiyonları. Bu fonksiyonlar, Uzman Danışmanların ve script dosyalarının yazımında kullanılamaz.
Fonksiyon |
Eylem |
---|---|
Belirtilen gösterge tamponunu, tek boyutlu, double tipli dinamik bir diziye bağlar |
|
double tipi gösterge özelliğinin değerini ayarlar |
|
int tipi gösterge özelliğinin değerini ayarlar |
|
string tipi gösterge özelliğinin değerini ayarlar |
|
double tipi gösterge çizgisi özelliğinin değerini ayarlar |
|
int tipi gösterge çizgisi özelliğinin değerini ayarlar |
|
string tipi gösterge çizgisi özelliğinin değerini ayarlar |
|
tam-sayı tipli gösterge çizgisi özelliğinin değerine dönüş yapar |
Gösterge özellikleri, derleyici direktiflerini veya fonksiyonları kullanılarak ayarlanabilir. Bunu daha iyi anlamanız için, örneklerdeki gösterge stilleri üzerinde çalışmanız tavsiye edilir.
Bir özel gösterge için gereken tüm hesaplamalar, ön tanımlı OnCalculate() fonksiyonu içinde yer almalıdır. Eğer, OnCalculate() fonksiyonunun kısa biçimdeki çağrısını kullanıyorsanız
int OnCalculate (const int rates_total, // price[] dizisinin büyüklüğü |
burada rates_total değişkeni, gösterge değerlerinin hesaplanması için parametre olarak fonksiyona geçirilen price[] dizisindeki, toplam eleman sayısını belirtir.
prev_calculated parametresi, OnCalculate() fonksiyonunun bir önceki çağrıdaki uygulama sonucudur; gösterge değerlerinin hesaplanması için algoritmanın düzenlenmesini ve saklanmasını sağlar. Örneğin mevcut değerle rates_total = 1000, prev_calculated = 999 ise, her gösterge tamponunun sadece bir değeri için hesaplama yapmamız yeterli olabilir.
Eğer "price" dizisinin büyüklüğü ile ilgili bilgi mevcut olmasaydı, bu durumda, her bir gösterge tamponu için 1000 değerin hesaplanması gerekliliği ortaya çıkarırdı. OnCalculate() fonksiyonunun ilk çağrısında, prev_calculated = 0 olarak verilir. Eğer price[] dizisi bir şekilde değişmişse, bu durumda prev_calculated değeri 0'a eşit olur.
begin parametresi, price dizisindeki başlangıç değerlerinin sayısını verir; hesaplanabilir veri içermez. Örneğin, Accelerator Oscillator (ilk 37 değerin hesaplanmadığı) göstergesinin değerleri, giriş parametresi olarak kullanılırsa, begin = 37 olur. Örnek olarak, basit bir göstergeyi düşünelim:
#property indicator_chart_window
|
Bunu "Klavuz" penceresinden Accelerator Oscillator göstergesinin penceresine sürükleyelim ve hesaplamaların, mevcut (önceki) bir göstergenin değerleriyle yapılacağını belirtelim:
Sonuç olarak prev_calculated değeri, OnCalculate() fonksiyonunun ilk çağrısında sıfıra, daha sonraki çağrılarda ise (fiyat çizelgesinde bulunan çubukların sayısı değişene kadar) rates_total değerine eşit olacaktır.
'begin' parametresinin değeri tam olarak başlangıçtaki çubuklarının sayısına eşittir ve Accelerator göstergesinin mantığına göre bu çubukların değerleri hesaplamaya katılmayacaktır. Accelerator.mq5 özel göstergesinin kaynak koduna bakacak olursak, OnInit() fonksiyonundaki şu satırları görürüz:
//--- çizime hangi çubuğun indisinden başlanacağını ayarlar
|
PlotIndexSetInteger(0, PLOT_DRAW_BEGIN, empty_first_values) fonksiyonunu kullanarak, gösterge tamponunun sıfır indisli dizisindeki var olmayan, (empty_first_values) yani hesaplamaya katılmayacak ilk değerlerin sayısını ayarlarız. Bu şekilde, aşağıdaki mekanizmalara sahip oluruz:
- başka bir göstergenin hesaplanmasında kullanılmaması gereken başlangıç değerlerinin sayısının ayarlanması;
- başka bir özel göstergenin çağrılması durumunda, gözardı edilecek ilk değerlerin sayısına dair bilginin edinilmesi.