Kullanıcı Göstergeler Yazma Temelleri


Tanıtım

Bu makalenin amacı, bir örnekte özel göstergelerin oluşturma ilkelerini ve NTL+ dilinde ilk adımlar yapan programcıların rastlayabilecekleri sorunları açıklamaktır.


Kullanıcı göstergesi algoritmasının hazırlanmasında, gösterge buffer'ine kaydedilen değerlerin nasıl hesaplanacağını ve onların ekranda nasıl görüntüleneceğini belirlemek gerekir. Bu değerlerin doğru oluşumu göstergenin uygulamasının nihai hedefimizdir.


Bir örnek olarak, kapanış fiyatı açılış fiyatından fazla olan barların sayısı ile kapanış fiyatı açılış fiyatından az olan barların sayısı arasındaki farkı gösteren bir endikatör oluşturalım; bu farklılıklar son n aralıklarında toplanır. Göstergemizi ayrı bir pencerede ve bir histogramı şeklinde görüntüleyelim.


Skript kodunun yazılması

Algoritmamız, göstergenin çalışmasını grafikte kontrol edecek kadar basit ve yeterince kolay. Her i-inci bar için önceki n bar analiz edip istatistikleri oluşturalım: artan barın tespit edildiğinde ortaya çıkan değere bir (1) ekleyeceğiz, düşen barın tespit edildiğinde ise biri çıkaracağız.

Böyle göstergenin kodunu inceleyelim.


Öncelikle bizim göstergemizde kullanılacak tüm değişkenleri bildirmek gerek.

#set_indicator_separate double ExtMapBuffer1[]; int ExtCountedBars=0; extern int period = 10;

#set_indicator_separate preprocessor yönergesi gösteriyor ki biz grafiği ayrı bir pencerede görüntüleyeceğiz ve ana fiyat grafiği üzerinde üst üste olmayacaktır. Bir sonraki satırda global array ExtMapBuffer1 işaretlenir, orada gösterge buffer'inin değerleri saklanacaktır. Dikkat edin ki bu array'ın boyutunu belirtmiyoruz çünkü derleyici ayrılan belleğin gerekli miktarını kendisi belirleyecek.


ExtMapBuffer1 array'ında aslında görüntülemeye dahil ordinates noktalarının koordinatları saklanır, apsisleri ise array öğeleri endeksi ile belirlenir. Sonra ExtCountedBars değişkenini 0 değeri ile başlatıyoruz. Bu değişkende zaten hesaplanmış barlar saklanacak. Böylece, tüm barlar için hesaplamaları yapmamıza gerek yok ve bu da gösterge değerlerinin hesaplanmasını büyük derecede hızlandırır; gösterge grafiğin hareketi daha hızlı olacaktır. Bir sonraki satırda, göstergenin önceden belirlenmiş istatistikleri hesapladığı aralık sayısını saklamak için global değişken period tespit edilmiştir. Unutmayın ki modifikatör extern'in kullanılması, derlemeye gerek kalmadan göstergenin özellikleri aracılığıyla period parametresini değiştirme fırsatını verir.


Initialize() fonksiyonu inceleyelim, onda göstergemiz için temel ayarlarını belirleyeceğiz.


Indicator nesnesinin SetIndexCount metodu gösterge değerlerinin buffer sayısını belirler. ExtMapBuffer1 değerli buffer bizde sadece bir tane var, o yüzden tek parametre olarak "bir" yazıyoruz. Ayrıca, buffer numarası ve array'ı buffer değerleri ile bağlamamız gerekir. Bu bağlama Indicator.SetIndexBuffer(0,ExtMapBuffer1) satırında ayarlanır. O satırda da, sıfır göstergesinin özelliklerinin ExtMapBuffer1 buffer'indeki değerleri çizmek için kullanıldığı tespit edilmiştir.


Bir sonraki satırda bizim göstergemizin özelliklerini ayarlıyoruz. SetIndexStyle metodunun ilk parametresi buffer sayısını belirtir; bu değer, SetIndexBuffer'de ayarlamış olduğunuz 0'dır. İkinci parametre çizme türünü belirtir: histogram. Üçüncü parametrede çizgi stili belirleriz: lsSolid (aslında, dilediğimiz değeri ayarlayabiliriz, çünkü bu seçenek yalnızca tek kalınlıkta hattı ve histogramı etkiler). Bir sonraki parametrede çizgi kalınlığını 5 olarak ve renk mavi clrBlue şeklinde belirliyoruz (renk ayrıca RGB formatında, örneğin 0x0000FF olarak ayarlanabilir).


Sonra, temel kontrolleri yapar ve kullanıcı fonksiyonu draw()'u çalıştırır Run() fonksiyonu geliyor. draw() fonksiyonu tam hesaplama yapar.