- DRAW_NONE
- DRAW_LINE
- DRAW_SECTION
- DRAW_HISTOGRAM
- DRAW_HISTOGRAM2
- DRAW_ARROW
- DRAW_ZIGZAG
- DRAW_FILLING
- DRAW_BARS
- DRAW_CANDLES
- DRAW_COLOR_LINE
- DRAW_COLOR_SECTION
- DRAW_COLOR_HISTOGRAM
- DRAW_COLOR_HISTOGRAM2
- DRAW_COLOR_ARROW
- DRAW_COLOR_ZIGZAG
- DRAW_COLOR_BARS
- DRAW_COLOR_CANDLES
Ö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:
- Çizgi
- Kısım (segment)
- Üst histogram
- Ok (symbol)
- Boyalı alan (doldurulmuş kanal)
- Çubuklar
- 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ı
|
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ı |
---|---|---|---|
Çizelge üzerinde görüntülenmez ama karşılık gelen tamponun değerleri Veri Penceresinde görülebilir |
1 |
- |
|
Karşılık gelen tamponun değerleriyle bir çizgi çizilir (boş değerler istenmez) |
1 |
- |
|
Karşılık gelen tamponun değerleri arasında çizgi kısımları şeklinde çizilir (genellikle çok fazla boş değeri olur) |
1 |
- |
|
Karşılık gelen tamponun değerlerine göre sıfır çizgisinden başlayan bir histogram şeklinde çizilir (boş değerler olabilir) |
1 |
- |
|
İki gösterge tamponunun temelindeki bir histogram şeklinde çizilir (boş değerler olabilir) |
2 |
- |
|
Sembollerle çizilir (boş değerlere sahip olabilir) |
1 |
- |
|
DRAW_SECTION stiline benzer ama çubuk üzerine dikey kısımlar da çizebilir |
2 |
- |
|
İ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 |
- |
|
Çubuklar şeklinde çizilir. Çizelge üzerinde görüntülenmez ama karşılık gelen tamponun değerleri Veri Penceresinde görülebilir |
4 |
- |
|
Japon mumları şeklinde çizilir. Çizelge üzerinde görüntülenmez ama karşılık gelen tamponun değerleri Veri Penceresinde görülebilir |
4 |
- |
|
Rengini farklı çubuklar üzerinde veya istediğiniz bir anda değiştirebileceğiniz bir çizgi |
1 |
1 |
|
DRAW_SECTION stiline benzer ama her kısmın rengi ayrı olarak ayarlanabilir; renk, aynı zamanda dinamik olarak da ayarlanabilir |
1 |
1 |
|
DRAW_HISTOGRAM stiline benzer ama histogramdaki her çubuk farklı renkte olabilir ve renk dinamik olarak ayarlanabilir |
1 |
1 |
|
DRAW_HISTOGRAM2 stiline benzer ama histogramdaki her çubuk farklı renkte olabilir ve renk dinamik olarak ayarlanabilir |
2 |
1 |
|
DRAW_ARROW stiline benzer ama her sembol farklı renkte olabilir. Renk dinamik olarak değiştirilebilir |
1 |
1 |
|
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_BARS stili gibidir ama çubukların her biri tekil olarak renklendirilebilir ve dinamik renk değişimi yapılabilir |
4 |
1 |
|
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
|
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ı
|
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
|
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
|
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)
|
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
|
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
|
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ı
|
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ı.