Örneklerle Gösterge Stilleri

MetaTrader 5 Müşteri Terminali, uygun fonksiyonlar ile MQL5 uygulamalarında kullanılabilecek 38 adet teknik gösterge içerir. Ama MQL5 dilinin asıl avantajı, Uzman Danışmanlarda veya çizelgeye eklenerek teknik analiz amacıyla kullanılabilecek özel göstergeler oluşturma kabiliyetidir.

Tüm göstergeler, grafiklendirme ismiyle anılan çeşitli çizim stillerinden türetilebilirler. Grafiklendirme (çizim), gösterge tarafından hesaplanan, saklanan ve istek halinde sunulan verilerin görüntülenme şeklini ifade eder. Bu şekilde yedi adet temel çizim tipi bulunmaktadır:

  1. Çizgi
  2. Kısım (segment)
  3. Üst histogram
  4. Ok (symbol)
  5. Boyalı alan (doldurulmuş kanal)
  6. Çubuklar
  7. Japon mumları

Her bir çizim tipi için, gösterge değerlerinin depolanacağı bir ile beş adet arasında double tipli dizi gerekir. Bu diziler, uygunluk için gösterge tamponlarıyla ilişkilendirilir. Bir göstergede kullanılacak tamponların sayısı, derleyici direktifleri ile önceden bildirilmelidir, örneğin:

#property indicator_buffers 3 // Gösterge tamponlarının sayısı
#property indicator_plots   2 // grafik sayısı

Göstergedeki tamponların sayısı, her zaman grafik sayısından fazla veya grafik sayısına eşittir.

Her çizim tipi, farklı renklere ve kurulum ayarlarına sahip olabileceğinden, MQL5'teki çizim tiplerinin gerçek sayısı 18 olarak düşünülebilir:

Çizim

Açıklama

Değer tamponları

Renk tamponları

DRAW_NONE

Çizelge üzerinde görüntülenmez ama karşılık gelen tamponun değerleri Veri Penceresinde görülebilir

1

-

DRAW_LINE

Karşılık gelen tamponun değerleriyle bir çizgi çizilir (boş değerler istenmez)

1

-

DRAW_SECTION

Karşılık gelen tamponun değerleri arasında çizgi kısımları şeklinde çizilir (genellikle çok fazla boş değeri olur)

1

-

DRAW_HISTOGRAM

Karşılık gelen tamponun değerlerine göre sıfır çizgisinden başlayan bir histogram şeklinde çizilir (boş değerler olabilir)

1

-

DRAW_HISTOGRAM2

İki gösterge tamponunun temelindeki bir histogram şeklinde çizilir (boş değerler olabilir)

2

-

DRAW_ARROW

Sembollerle çizilir (boş değerlere sahip olabilir)

1

-

DRAW_ZIGZAG

DRAW_SECTION stiline benzer ama çubuk üzerine dikey kısımlar da çizebilir

2

-

DRAW_FILLING

İki çizgi arasını renk ile doldurur. Çizelge üzerinde görüntülenmez ama karşılık gelen tamponun değerleri Veri Penceresinde görülebilir

2

-

DRAW_BARS

Çubuklar şeklinde çizilir. Çizelge üzerinde görüntülenmez ama karşılık gelen tamponun değerleri Veri Penceresinde görülebilir

4

-

DRAW_CANDLES

Japon mumları şeklinde çizilir. Çizelge üzerinde görüntülenmez ama karşılık gelen tamponun değerleri Veri Penceresinde görülebilir

4

-

DRAW_COLOR_LINE

Rengini farklı çubuklar üzerinde veya istediğiniz bir anda değiştirebileceğiniz bir çizgi

1

1

DRAW_COLOR_SECTION

DRAW_SECTION stiline benzer ama her kısmın rengi ayrı olarak ayarlanabilir; renk, aynı zamanda dinamik olarak da ayarlanabilir

1

1

DRAW_COLOR_HISTOGRAM

DRAW_HISTOGRAM stiline benzer ama histogramdaki her çubuk farklı renkte olabilir ve renk dinamik olarak ayarlanabilir

1

1

DRAW_COLOR_HISTOGRAM2

DRAW_HISTOGRAM2 stiline benzer ama histogramdaki her çubuk farklı renkte olabilir ve renk dinamik olarak ayarlanabilir

2

1

DRAW_COLOR_ARROW

DRAW_ARROW stiline benzer ama her sembol farklı renkte olabilir. Renk dinamik olarak değiştirilebilir

1

1

DRAW_COLOR_ZIGZAG

DRAW_ZIGZAG stili gibidir ama kısımların her biri tekil olarak renklendirilebilir ve dinamik renk değişimi yapılabilir

2

1

DRAW_COLOR_BARS

DRAW_BARS stili gibidir ama çubukların her biri tekil olarak renklendirilebilir ve dinamik renk değişimi yapılabilir

4

1

DRAW_COLOR_CANDLES

DRAW_CANDLES stili gibidir ama mumların her biri tekil olarak renklendirilebilir ve dinamik renk değişimi yapılabilir

4

1

 

Bir gösterge tamponu ile bir dizi arasındaki fark

Her göstergenin global düzeyinde, bir veya daha fazla double tipi dizi bildirilmelidir; bu diziler daha sonra SetIndexBuffer() fonksiyonu ile bir gösterge tamponu şeklinde kullanılabilir. Gösterge grafiklerinin çiziminde, sadece gösterge tamponlarının değerleri kullanılır, başka herhangi bir dizinin bu amaçla kullanılması mümkün değildir. Gösterge tamponlarının değerleri Veri Penceresinde de gösterilir.

Gösterge tamponu dinamik olmalıdır ve büyüklüğünün belirtilmesi gerekmez – gösterge tamponu olarak kullanılan dizinin büyüklüğü, terminal idari alt-sistemi tarafından otomatik olarak ayarlanır.

Dizinin tampona bağlanmasıyla, indisleme yönü varsayılan olarak, sıradan dizilerdeki gibi ayarlanır ama ArraySetAsSeries() fonksiyonunu kullanarak dizi elemanlarının indisleme yönünü değiştirebilirsiniz. Varsayılan olarak gösterge tamponu, çizim için kullanılacak veriyi (INDICATOR_DATA) saklamak için kullanılır.

Eğer gösterge değerlerinin hesaplanması sırasında, ara hesapların ve çubuklarla ilgili ek verilerin tutulması gerekiyorsa, bunun için kullanılacak dizi bir hesaplama tamponu (INDICATOR_CALCULATIONS) şeklinde bildirilebilir. Ara değerler için sıradan diziler de kullanılabilir ama bu durumda, programcı dizi büyüklüğüyle de ilgilenmek durumundadır.

Bazı grafikler, her bir çubuk için ayrı bir renk ayarlamaya izin verir. Renk hakkındaki bilgileri depolamak için renk tamponları (INDICATOR_COLOR_INDEX) kullanılır. Renk, color tipi bir tamsayıdır, diğer taraftan, tüm gösterge tamponları double tipinde olmalıdır. Renk değerleri ve yardımcı (INDICATOR_CALCULATIONS) tamponların değerleri, CopyBuffer() fonksiyonu kullanılarak alınamaz.

Gösterge tamponlarının sayısı, #property indicator_buffers number_of_buffers gösterge direktifi ile belirtilmelidir

#property indicator_buffers 3  //  göstergenin 3 tamponu var

Bir göstergedeki tamponların izin verilen maksimum sayısı 512'dir.

 

Gösterge Tamponları ile Çizim Arasındaki İlişki

Her grafiklendirme işlemi, bir veya daha fazla gösterge tamponunu temel alır. Yani basit bir mum şeklini görüntülemek için, dört değer gerekir - Open (açılış), High (yüksek), Low (düşük) ve Close (kapanış) fiyatları. Yani, bir göstergeyi mumlarla görüntülemek için, 4 gösterge tamponu ve onlara bağlanacak 4 dizi bildirilmelidir. Örneğin:

//--- Dört tamponu olan bir gösterge
#property indicator_buffers 4
//--- Göstergede tek bir çizim var
#property indicator_plots   1
//--- 1 numaralı grafiksel çizim, mumlar şeklinde görüntülenecek
#property indicator_type1   DRAW_CANDLES
//--- Mumlar clrDodgerBlue ile renklendirilecek
#property indicator_color1  clrDodgerBlue
//--- Gösterge tamponları için 4 adet dizi
double OBuffer[];
double HBuffer[];
double LBuffer[];
double CBuffer[];

 

Grafiksel çizimlerde gösterge tamponları, grafik numarasına göre otomatik olarak kullanılır. Grafiklerin numaralandırılması 1 ile başlarken, tamponların numaralandırılması 0 ile başlar. Eğer ilk grafik, 4 gösterge tamponu gerektiriyorsa, çizimde ilk 4 gösterge tamponu kullanılır. Bu dört tampon, SetIndexBuffer() fonksiyonu kullanılarak düzgünce indislenmiş uygun dizilere bağlanmalıdır.

//--- Dizilerin tamponlara bağlanması
   SetIndexBuffer(0,OBuffer,INDICATOR_DATA);  // Ilk tampon sıfır indisine karşılık gelir
   SetIndexBuffer(1,HBuffer,INDICATOR_DATA);  // Ikinci tampon 1 indisine karşılık gelir
   SetIndexBuffer(2,LBuffer,INDICATOR_DATA);  // Üçüncü tampon 2 indisine karşılık gelir
   SetIndexBuffer(3,CBuffer,INDICATOR_DATA);  // Dördüncü tampon 3 indisine karşılık gelir

Mumların çizimi sırasında göstergede sadece ilk 4 tampon kullanacaktır, çünkü "mumların" çizimi ilk numara altında bildirilmiştir.

Örneği değiştirelim ve basit bir çizginin grafiğini ekleyelim - DRAW_LINE. Şimdi çizginin 1 ile, mumların ise 2 ile numaralandırıldığını düşünelim. Tamponların ve grafiklerin sayısı artar.

//--- Gösterge 5 tampona sahiptir
#property indicator_buffers 5
//--- Gösterge 2 grafiğe sahiptir
#property indicator_plots   2
//--- Grafik 1 bir çizgidir
#property indicator_type1   DRAW_LINE
//--- Çizgi rengi clrDodgerRed
#property indicator_color1  clrDodgerRed
//--- Grafik 2 Japon Mumu şeklinde çizilir
#property indicator_type2   DRAW_CANDLES
//--- Mumların rengi clrDodgerBlue
#property indicator_color2  clrDodgerBlue
//--- Gösterge tamponları için 5 dizi
double LineBuffer[];
double OBuffer[];
double HBuffer[];
double LBuffer[];
double CBuffer[];

Grafiklerin sırası değişti, şimdi çizgi ilk sırada ve onu Japon mumları takip ediyor. Yani tamponların sırası düzgün - ilk olarak çizgi için sıfır indisi ile bir tampon, ardından mumlar için 4 tampon bildirdik

   SetIndexBuffer(0,LineBuffer,INDICATOR_DATA);  // İlk tampon 0 indisine karşılık gelir
//--- Mumlar için, dizilerin tamponlarla bağlanması
   SetIndexBuffer(1,OBuffer,INDICATOR_DATA);     // İkinci tampon 1 indisine karşılık gelir
   SetIndexBuffer(2,HBuffer,INDICATOR_DATA);     // Üçüncü tampon 2 indisine karşılık gelir
   SetIndexBuffer(3,LBuffer,INDICATOR_DATA);     // Dördüncü tampon 3 indisine karşılık gelir
   SetIndexBuffer(4,CBuffer,INDICATOR_DATA);     // Beşinci tampon 4 indisine karşılık gelir

 

Tamponların ve grafiklerin sayısı sadece derleyici direktifleri ile ayarlanabilir, bu özelliklerin, fonksiyonlar kullanılarak dinamik olarak değiştirilmesi mümkün değildir.

 

Stillerin Renkli Versiyonları

Tablodan da görülebileceği gibi, stiller iki grupta toplanır. İlk grup, isminde COLOR kelimesi geçmeyen stilleri içerir; biz bu grubu, temel stiller şeklinde isimlendireceğiz:

  • DRAW_LINE
  • DRAW_SECTION
  • DRAW_HISTOGRAM
  • DRAW_HISTOGRAM2
  • DRAW_ARROW
  • DRAW_ZIGZAG
  • DRAW_FILLING
  • DRAW_BARS
  • DRAW_CANDLES

İkinci grupta, isminde COLOR kelimesi geçen stiller yer alır, bu gruba da renkli versiyonlar diyeceğiz:

  • DRAW_COLOR_LINE
  • DRAW_COLOR_SECTION
  • DRAW_COLOR_HISTOGRAM
  • DRAW_COLOR_HISTOGRAM2
  • DRAW_COLOR_ARROW
  • DRAW_COLOR_ZIGZAG
  • DRAW_COLOR_BARS
  • DRAW_COLOR_CANDLES

Stillerin tüm renkli versiyonları, çizimin her kısmı için ayrı renk belirlenmesine olanak tanıması açısından, temel stillerden ayrılır. Çizimin en küçük parçası bir çubuktur, dolayısıyla renkli stillerin, her bir çubuğun ayrı olarak renklendirilmesine olanak sağladığını söyleyebiliriz.

DRAW_NONE ve DRAW_FILLING stilleri, renkli versiyonları bulunmayan istisnalardır.

Her bir çubuğun rengini ayarlamak için, renk indisini depolayan fazladan bir dizi, renkli versiyona eklenmiştir. Bu indisler, özel bir dizide yer alan bir rengin numarasını gösterir, bahsedilen bu dizi önceden ayarlanmış renkleri içermektedir. Bu renk dizisinin büyüklüğü 64'tür. Yani bir stilin herhangi bir renkli versiyonu, bir grafiğin 64 ayrı renk ile boyanabilmesini sağlar.

Özel bir renk dizisinde kullanılacak renklerin sayısı, gerekli renkleri virgülle ayrılarak girebileceğiniz derleyici direktifi #property indicator_color derleyici direktifi ile ayarlanabilir. Örneğin, bir gösterge içindeki böyle bir giriş:

//--- Mumları renklendirmek için 8 renk tanımla (özel dizide depolanırlar)
#property indicator_color1  clrRed,clrBlue,clrGreen,clrYellow,clrMagenta,clrCyan,clrLime,clrOrange

Bu, çizim 1 için özel bir diziye yerleştirilecek 8 renk ayarlandığını belirtmektedir. Bundan sonra program içinde çizim rengini belirtmemiz gerekmez, bunun yerine rengin indisini kullanacağız. Eğer K numaralı çubuğa kırmızı rengi ayarlamak istiyorsak, dizideki indis değerinin, göstergenin renk tamponunda ayarlanmış olması gerekir Kırmızı renk ilk olarak direktifte belirtilir, 0 indis numarasına karşılık gelir.

  //--- mum rengini clrRed (kırmızı) olarak ayarla
  col_buffer[buffer_index]=0;

Renk kümesi bir defaya mahsus olarak verilmez, PlotIndexSetInteger() fonksiyonu kullanılarak dinamik olarak değiştirilebilir. Örnek:

      //--- Her bir indis için, rengi PLOT_LINE_COLOR özelliği şeklinde ayarla
      PlotIndexSetInteger(0,                    //  Bir grafiksel stilin numarası
                          PLOT_LINE_COLOR,      //  Özellik tanımlayıcı
                          plot_color_ind,       //  Rengin girildiği indis
                          color_array[i]);      //  Yeni bir renk

 

Gösterge ve çizim özellikleri

Gösterge grafikleri için özellikler, derleyici direktifleri ve fonksiyonlar gibi araçlar kullanılarak ayarlanabilir. Bununla ilgili daha fazla bilgiyi Gösterge özellikleri ve fonksiyonlar bölümünde okuyabilirsiniz. Gösterge özelliklerinin, özel fonksiyonlar yardımıyla dinamik olarak değiştirilebilmesi, daha esnek özel göstergelerin oluşturulmasını sağlar.

 

Göstergenin Çizelge Üzerindeki Çizimine Başlanması

Çoğu durumda, algoritmanın koşullarına bağlı olarak, yeni çubukla birlikte göstergenin hesaplanmasına hemen başlamak imkansızdır; belli bir minimum sayıdaki çubuğun geçmişte yer alması gerekir. Örneğin, birçok düzleştirme türünde, N sayıda geçmiş çubuk üzerinden elde edilen bir fiyat dizisi kullanılır ve elde edilen değerlerle göstergenin değerleri hesaplanır.

Bu gibi durumlarda, ya göstergeyi ilk N çubuk için hesaplamanın bir yolu yoktur, ya da bu değerlerin çizelgede görüntülenmesi istenmiyordur ve daha sonraki değerleri hesaplamak için yardımcı durumdadırlar. Göstergenin, geçmişteki ilk N çubuk için çizilmesi istenmiyorsa, N değerini, karşılık gelen grafik için PLOT_DRAW_BEGIN özelliğine ayarlayın:

//--- Mumlar için, dizilerin tamponlarla bağlanması
PlotIndexSetInteger(number_of_plot,PLOT_DRAW_BEGIN,N);

Burada:

  • number_of_plot – sıfırdan indicator_plots-1'e kadar bir değerdir (grafiklerin indislenmesi sıfırdan başlar).
  • N - çizelgede, üzerinde göstergenin görüntülenmemesi gereken, geçmişteki ilk çubukların sayısı.