English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
William Blau'nun MQL5'teki Göstergeleri ve Alım Satım Sistemleri. Bölüm 1: Göstergeler

William Blau'nun MQL5'teki Göstergeleri ve Alım Satım Sistemleri. Bölüm 1: Göstergeler

MetaTrader 5Ticaret sistemleri | 15 Aralık 2021, 11:11
286 0
Andrey F. Zelinsky
Andrey F. Zelinsky

Teknik alım satım, yalnızca iyi araçlar mevcutsa kullanılabilir.
İyi bir yatırımcının araçları, iyi bir alım satım bilgisayar programı tarafından sağlanan deneyim, değerlendirme ve matematiksel bir hiyerarşidir.
William Blau

Giriş

William Blau tarafından yazılan "MQL5'te Göstergeler ve Alım Satım Sistemleri" makalesinin ilk bölümü. Bölüm 1: Göstergeler, William Blau tarafından "Momentum, Direction, and Divergence" kitabında açıklanan göstergelerin ve osilatörlerin bir açıklamasıdır.

Bu makalede açıklanan göstergeler ve osilatörler, MQL5 dilinde kaynak kodlar olarak sunulmakta olup "Blau_Indicators_MQL5_en.zip" arşiv dosyasına eklenmiştir.

William Blau'dan analizin ana fikri

William Blau'nun teknik analizi dört aşamadan meydana gelir:

  1. Fiyat serisi verileri (q çubukları) kullanılarak gösterge hesaplanır ve grafikte çizilir. Gösterge, fiyat hareketinin genel trendini yansıtmaz ve trend dönüş noktalarının belirlenmesine izin vermez.
  2. Gösterge, EMA yöntemi kullanılarak birkaç kez yumuşatılır: Bu, ilk kez (r dönemiyle), ikinci kez (s dönemiyle) ve üçüncü kez (u dönemiyle) gerçekleştirilir; yumuşatılmış bir gösterge çizilir. Yumuşatılmış bir gösterge, oldukça doğru bir şekilde ve fiyat dalgalanmalarını minimum gecikmeyle yeniden üretir. Fiyat hareketi trendinin ve dönüş noktalarının belirlenmesine olanak tanır ve fiyat gürültüsünü ortadan kaldırır.
  3. Yumuşatılmış gösterge normalize edilir, normalize edilmiş yumuşatılmış bir gösterge çizilir. Normalizasyon, gösterge değerinin piyasanın aşırı alım veya aşırı satım durumları olarak yorumlanmasına izin verir.
  4. Normalize edilmiş yumuşatılmış gösterge, EMA yöntemiyle (ul dönemi) bir kez yumuşatılır; bir osilatör oluşturulur, gösterge histogramı ve sinyal çizgisi, piyasanın aşırı alım ve aşırı satım düzeyleri eklenir. Osilatör, piyasanın aşırı alım/aşırı satım durumlarını, geri dönüş noktalarını ve bir trendin sonunu ayırt etmemizi sağlar.

Göstergeler

Makalede, aşağıdaki gösterge grupları açıklanmaktadır:

  1. Momentum tabanlı göstergeler:
  2. Stokastik tabanlı göstergeler:
  3. Stokastik Momentum tabanlı göstergeler:
  4. Piyasa trendlerinden Ortalama Sapma tabanlı göstergeler:
  5. Hareketli Ortalama Yakınsama/Iraksama Tabanlı Göstergeler:
  6. Mum Grafiği Momentumu tabanlı göstergeler:
  7. Bileşik Yüksek-Düşük Momentum tabanlı göstergeler:

Her bir gösterge grubu için aşağıdakiler sunulmaktadır:

  • Yumuşatılmış gösterge indeksi,
  • Normalize edilmiş yumuşatılmış gösterge indeksi,
  • Osilatör, normalize edilmiş yumuşatılmış indeksin indeksine dayalıdır.

Gerçek Güç İndeksi bölümü şunları içerir:

  • Fiyat grafiğinin teknik analizi açısından William Blau'nun yaklaşımının ayrıntılı bir analizi,
  • Momentum tabanlı gösterge gruplarının her bir göstergesinin algoritması ve kodunun ayrıntılı bir açıklaması.

Yumuşatma yöntemi olarak William Blau üstel olarak yumuşatılmış Hareketli Ortalamayıs (EMA) kullanır. Üstel Hareketli Ortalama, Hareketli Ortalamanın önceki değerine, mevcut fiyatın belirli bir yüzdesi eklenerek hesaplanır.

EMA'yı kullanırken, en son fiyatların ağırlığı daha fazladır.

EMA hesaplama işlevi şu şekildedir:

EMA(k,n) = EMA(k-1,n) + 2/(n+1) * (price(k) - EMA(k-1,n))
         = price(k) * 2/(n+1) + EMA(k-1,n) * (1 - 2/(n+1))

Burada:

  • EMA(k,n) - k dönemi anı için n döneminin üstel olarak yumuşatılmış hareketli ortalaması,
  • fiyat(k) - k dönemi anındaki fiyattır.

Dört hareketli ortalama türünün açıklaması ve bunların teknik analizde kullanım yöntemleri (ayrıca bkz. iMA) "MetaTrader 5 Yardımı" bölümünde ("Analizler/Teknik Göstergeler/Trend Göstergeleri/Hareketli Ortalama bölümünde bulunabilir").

İşlevler Kitaplığı

Hareketli ortalamaları hesaplamak için işlevler kitaplığı "MovingAverages.mqh" içinde bulunur. Çıkış dizisi arabelleğini[] giriş dizisi fiyatının[] EMA değerleriyle dolduran ExponentialMAOnBuffer() ile ilgileniyoruz. Ancak, "MovingAverages.mqh" içinde sunulan ExponentialMAOnBuffer() uygulaması n = 1 dönemiyle çalışmama dezavantajına sahiptir.

Kaynak kodunda bakın:

if(period<=1 || rates_total-begin<period) return(0);

Bununla birlikte, William Blau kitabında yumuşatma dönemi n = 1'i yumuşatmanın yokluğu olarak kullanır.

Bu nedenle, ExponentialMAOnBuffer() işlevinin kodu birkaç değişiklik geçirmiştir:

if(period<1 || rates_total-begin<period) return(0);

ve ExponentialMAOnBufferWB() işlevini elde ederiz. Bu işlevin kodu "WilliamBlau.mqh" dosyasında yer alır.

"WilliamBlau.mqh" dosyası ayrıca aşağıdaki işlevleri içerir:

  • PriceName() işlevi, fiyat türünü bir dize olarak döndürür:
string PriceName(
                 const int applied_price // price type
                )
  • CalculatePriceBuffer() işlevi, bu fiyat türünün fiyat dizisini hesaplar:
int CalculatePriceBuffer(
                         const int applied_price,   // price type
                         const int rates_total,     // rates total
                         const int prev_calculated, // bars, processed at the last call
                         const double &Open[],      // Open[]
                         const double &High[],      // High[]
                         const double &Low[],       // Low[]
                         const double &Close[],     // Close[]
                         double &Price[]           // calculated prices array
                        )

Uygulanan fiyat türü ve fiyat grafiğinin zaman dilimi

William Blau, Günlük zaman diliminin kapanış fiyatlarını değerlendirir. Bu makalede geliştirilen göstergeler, fiyat türünü seçmenize olanak tanır (bkz. fiyat sabitleri) fiyat grafiğinin zaman dilimi, göstergenin zaman dilimine bağlıdır (bkz. grafik zaman dilimleri).

 

1. Gerçek Güç İndeksi

Göz önünde bulundurulan göstergeler (eke bakınız):

  1. Blau_Mtm.mq5 - Oran göstergesi (q-dönem Momentumu, yumuşatılmış q-dönem Momentumu),
  2. Blau_TSI.mq5 - Gerçek güç İndeksi (Normalize edilmiş yumuşatılmış q-dönem Momentumu),
  3. Blau_Ergodic.mq5 - Ergodik Osilatör (Gerçek Güç İndeksi tabanlı).

1.1. Momentum

Yerleşik teknik gösterge Momentum'un açıklaması ve bunun teknik analizde kullanımı, "MetaTrader 5 Yardım" bölümünde "Analizler/Teknik Göstergeler/Osilatörler/Momentum" içinde bulunabilir (ayrıca bkz. iMomentum). Standart Momentum'un (iMomentum) aksine William Blau'nun Momentum'u Momentumu mutlak fiyat değişikliği olarak hesaplar.

William Blau'nun Gerçek Güç Göstergesinin (TSI) MQL5 uygulamasına bir örnek "MQL5: Kendi Göstergenizi Oluşturun"makalesinde sunulmaktadır.


1.1.1. Momentum göstergesini kullanarak teknik analiz

Teknik analizin amacı, finansal enstrümanın fiyat grafiğidir. Grafiğin her öğesi bir fiyat çubuğudur. Fiyat çubuğu şu özelliklere sahiptir: açılış zamanı, açılış fiyatı, maksimum fiyat, minimum fiyat, kapanış fiyatı, alım satım işlem hacimleri ve diğer. Fiyat çubuğu oluşturulur ve belirli bir ayrı zaman diliminde fiyatların davranışını yansıtır (grafik zaman dilimi).

Fiyat grafiğinin teknik analizinin görevi, fiyat hareketinin mevcut trendini belirlemek, fiyat iniş ve çıkışlarını ortaya çıkarmak ve önümüzdeki dönemde fiyat değişiminin yönünü tahmin etmektir. Bunun karmaşıklığı, fiyatın, temel eğilimi sınırları içinde hareket ederken, çok yönlü dalgalanmalar yaparak sözde bir fiyat gürültüsü yaratmasıdır.

William Blau'nun önerdiği şey şudur: Birinci fark: Momentum. William Blau, Momentumu, her [gün] zaman dilimi için fiyat değişimine [kapanış] göre hesapladı ve Momentum göstergesini oluşturdu. Matematiksel açıdan Momentum işlevi fiyatın ilk türevidir.

Şek. 1.1. Momentum Göstergesi (q-dönem Momentumu)

Şek. 1.1. Momentum Göstergesi (q-dönem Momentumu)

Momentum, bir günlük dönemin fiyat dalgalanmalarını gösterir, bu dönem boyunca fiyat değişikliklerinin hızını (büyüklüğünü) ve yönünü gösterir, ancak fiyat hareketinin genel trendini yansıtmaz ve trend dönüş noktalarını belirlemez.

İkinci fark, yumuşatmadır. Momentumun hareketli ortalaması (günlük fiyat dalgalanmalarının kümülatif toplamı), eğri fiyatlarının hem büyük hem de yerel varyasyonlarını neredeyse tam olarak yeniden üretir. Şek. 1.2 (a), alt pencere I, II'de yumuşatılmış Momentum (sırasıyla 20 ve 300 dönemli hareketli ortalamalar) sunulmaktadır.

Daha yüksek, Hareketli Ortalamanın dönemidir, daha doğru olarak yumuşatılmış Momentum, fiyat eğrisindeki dalgalanmalara yaklaşır (yeniden üretir). Matematiksel açıdan Momentumu yumuşatma işlevi, momentumun integral işlevi veya fiyatın geri yüklenen işlevidir.

Şek. 1.2 (a). Momentum Göstergesi (yumuşatılmış q-dönem Momentumu)

Şek. 1.2 (a). Momentum Göstergesi (yumuşatılmış q-dönem Momentumu)


Şek. 1.2 (b). Momentum Göstergesi (yumuşatılmış q-dönem Momentumu)

Şek. 1.2 (b). Momentum Göstergesi (yumuşatılmış q-dönem Momentumu)


Şekil 1.2 (a)'da, ana pencerede, EMA-yumuşatılmış (5, 20, 100 dönemli) göstergeler sunulmaktadır. Hareketli ortalama dönemindeki hafif bir artış gecikmeye yol açar ve hareketli ortalama pratik olarak fiyat eğrisindeki dalgalanmaları yeniden üretemez hale gelir.

Üçüncü fark, tekrar yumuşatmadır. Momentumun ilk yumuşatılması, fiyat hareketinin ana trendini ve ayrıca dönüş noktalarını tanımlar, ancak gürültüyü ortadan kaldırmaz. Fiyat gürültüsünü ortadan kaldırmak için hareketli ortalamanın küçük bir dönemiyle tekrar yumuşatma gereklidir.

Şekil 1.2 (b), alt pencere I'de yumuşatılmış Momentum göstergesi (20 dönemli hareketli ortalama), II ve III alt pencerelerinde çift ve üçlü yumuşatılmış Momentum (5, 3 hareketli ortalama dönemleri) sunulmaktadır. Tekrarlanan bir yumuşatma, fiyat gürültüsünü ortadan kaldırır, ancak eğrinin hafif bir kaymasını (gecikme) ekler.

Dördüncü fark: Değişen trendlerin sinyalindeki farktır. Momentumun küçük bir ortalama dönemiyle yumuşatılması, yumuşatılmış Momentumun fiyat eğrisinin trendi ile farklılaşmasına yol açabilir.

Şek. 1.2 (a), alt pencere I'de ve Şek. 1.2 (b) alt pencere I, II, III'te (fiyat değişikliklerinin yönü, yumuşatılmış Momentum'daki değişikliğin yönünden sapar) farklılık gözlenir. Bu tür farklılıklar genellikle bir trend değişikliğine işaret eder. Matematiksel açıdan fark, yumuşatma döneminin bir işlevidir.

Bu farklılıkların değişen trendlerin bir sinyali olarak yorumlanmasının güvenilirliği, yalnızca aşırı alım veya aşırı satım alanları için farklılığı göz önünde bulundurursak geliştirilebilir (bkz. п. 1.2.1).


1.1.2. Momentumun Tanımı

Momentum, göreli bir fiyat değişikliğidir.

Momentumun işareti fiyat değişikliğinin yönünü gösterir: Pozitif Momentum fiyatın dönem boyunca arttığını, negatif Momentum fiyatın dönem boyunca azaldığını gösterir. Momentumun büyüklüğü - Fiyat değişiminin göreli hızıdır (fiyatın ilk türevi).

Şek. 1.3. Momentumun Tanımı

Şek. 1.3. Momentumun Tanımı

Momentum Formülü:

mtm(price) = price - price[1]

Burada:

  • fiyat - cari dönemin fiyatı [kapanış],
  • fiyat [1] - önceki dönemin [kapanış] fiyatı.

William Blau, momentumu, cari dönemin [kapanış] fiyatı ile önceki dönemin [kapanış] fiyatının farkı olarak inceler. William Blau, bir tek dönem momentumunun hesaplanmasında, iki dönemin (mevcut ve önceki dönemler) fiyatlarını kullanır.

Momentumu hesaplama formülüne bir dönem göstergesi ekledik, q - hesaplamada yer alan zaman dilimlerinin sayısıdır (William Blau, q = 2).

q-dönem Momentumunun formülü:

mtm(price,q) = price - price[q-1]

Burada:

  • q - momentumun hesaplanmasında kullanılan çubuk sayısı,
  • fiyat - cari dönemin fiyatı [kapanış],
  • fiyat [q-1] - geçmişteki [kapanış] (q-1) dönemlerinin fiyatı.

Ortaya çıkan formülde, iki dönem momentumumuz, William Blau'nun bir dönem göreli Momentumuna karşılık gelir.

Yumuşatılmış q-dönem Momentumunun formülü:

Mtm(price,q,r,s,u) = EMA(EMA(EMA( mtm(price,q) ,r),s),u)

Burada:

  • fiyat - [kapanış] fiyatı - fiyat grafiğinin fiyat tabanı,
  • q - Momentumun hesaplanmasında kullanılan çubuk sayısı,
  • mtm(fiyat,q)=fiyat-fiyat[q-1] - q-dönem Momentumu,
  • EMA (mtm (fiyat, q), r) - ilk yumuşatma - q-dönem Momentumuna uygulanan EMA(r),
  • EMA (EMA(..., r),s) - ikinci yumuşatma - 1. yumuşatmanın sonucuna uygulanan EMA(s),
  • EMA (EMA (EMA (..., r), s), u) - üçüncü yumuşatma - 2. yumuşatmanın sonucuna uygulanan EMA(u)'.

1.1.3. Mtm(fiyat,q,r,s,u) - oran göstergesi (momentum). Spesifikasyon
  • Dosya adı: Blau_Mtm.mq5
  • Ad: William Blau: Momentum (q-dönem Momentumu, yumuşatılmış q-dönem Momentumu).
  • Giriş parametreleri:
    • q - Momentumun hesaplandığı dönem (varsayılan q = 2),
    • r -Momentuma uygulanan 1. EMA dönemi (varsayılan r = 20),
    • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
    • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • AppliedPrice - fiyat türü (varsayılan AppliedPrice=PRICE_CLOSE).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • grafik çiziminin sunumunu değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi).
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse, EMA yumuşatması kullanılmaz. Örneğin, Mtm'yi (fiyat, 2,20,5,1) ayarlarsanız çift-yumuşatılmış bir momentum elde ederiz, ancak Mtm'yi (fiyat, 2,1,1,1) ayarlarsanız yumuşatılmamış bir momentum elde ederiz;
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u-3 +1).

 

1.2. Gerçek Güç İndeksi

1.2.1. Gerçek Güç İndeksini kullanarak teknik analiz

Devam: Bölüm 1.1.1'deki başlangıca bakın.

Beşincisi: Normalizasyondur. Yumuşatılmış Momentum değerlerinin normalizasyonunu tek bir ölçeğe getirmek ([-1, +1] aralığına eşleme), piyasanın aşırı alım veya aşırı satım durumlarını belirlememizi sağlar. Normalize edilmiş yumuşatılmış ​momentumun değerlerinin tekrarlanan çarpımı, 100 faktörü sayısal seriyi yüzde aralığında dönüştürür ([-100, 100] aralığına eşleme).

Şek. 1.4. Normalize Edilmiş Yumuşatılmış Momentum

Şek. 1.4. Normalize Edilmiş Yumuşatılmış Momentum


Normalize edilmiş yumuşatılmış momentum aşırı alım veya aşırı satım durumundaysa, farklılık, değişen trendlerin bir sinyali olarak güvenilir olarak kabul edilebilir.


1.2.2. Gerçek Güç İndeksinin tanımı

Gerçek Güç İndeksi (Gerçek Güç İndeksi, TSI), normalize edilmiş Momentumun (normalize edilmiş q-dönem Momentumu) bir göstergesidir. Yumuşatılmış Momentumdeğerlerinin tek bir ölçeğe getirilmesi ([-1, +1] aralığına eşleme) mutlak değerde alınan yumuşatılmış Momentumun değerine göre yumuşatılmış Momentumun her bir değerinin normalize edilmesiyle sağlanır (yumuşatılmış q dönemi fiyat dalgalanmalarının kümülatif toplamı).

100 katsayısı ile çarpımı, ekran aralığını [-100, +100] (yüzde) olarak değiştirir. Normalizasyon, TSI değerinin aşırı alım (pozitif) veya aşırı satım (negatif) piyasa düzeyi olarak yorumlanmasını sağlar.

Gerçek Güç İndeksinin formülü:

                     100 * EMA(EMA(EMA( mtm(price,q) ,r),s),u)         100 * Mtm(price,q,r,s,u)
TSI(price,q,r,s,u) = –––––––––––––––––––––––––------–––––––––– = ––––––––––––––––------–––––––––––––––
                       EMA(EMA(EMA( |mtm(price,q)| ,r),s),u)     EMA(EMA(EMA( |mtm(price,q)| ,r),s),u)
if EMA(EMA(EMA(|mtm(price,q)|,r),s),u)=0, then TSI(price,q,r,s,u)=0

Burada:

  • fiyat - [kapanış] fiyatı - fiyat grafiğinin fiyat tabanı,
  • q - Momentumun dönemi,
  • mtm(fiyat,q)=fiyat-fiyat[q-1] - q-dönem momentumu,
  • | Mtm (fiyat, q) | - q-dönem Momentumunun mutlak değeri,
  • Mtm (fiyat, q, r, s, u) - üç kez yumuşatılmış q-dönem Momentumu,
  • EMA (..., r) - ilk yumuşatma - r döneminin EMA'sı; şunlara uygulanır:
    1) q-dönem Momentumu,
    2) q-dönem Momentumunun mutlak değeri,
  • EMA (EMA(..., r),s) - ikinci yumuşatma - 1. yumuşatmanın sonucuna uygulanan EMA(s),
  • EMA (EMA (EMA (..., r), s), u) - üçüncü yumuşatma - 2. yumuşatmanın sonucuna uygulanan EMA(u)'dur.

1.2.3. TSI(fiyat,q,r,s,u) - Gerçek Güç İndeksi. Spesifikasyon
  • Dosya adı: Blau_TSI.mq5
  • Ad: William Blau'nun Gerçek Güç İndeksi (normalize edilmiş yumuşatılmış q-dönemi bağıl Momentumu).
  • Giriş parametreleri:
    • q - momentumun hesaplandığı dönem (varsayılan q = 2),
    • r -Momentuma uygulanan 1. EMA dönemi (varsayılan r = 20),
    • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
    • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • AppliedPrice - fiyat türü (varsayılan AppliedPrice=PRICE_CLOSE).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • grafik çiziminin sunum stilini değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi),
    • (isteğe bağlı) iki düzey (varsayılan -25 ve +25'tir) - bir düzey ekler/kaldırır; değeri, düzey açıklamasını değiştirir, düzeylerin sunum stilini değiştirir ("Düzeyler" sekmesi),
    • tek gösterge penceresinin ("Ölçek" sekmesi) ölçeğinin alt (varsayılan olarak -100) ve üst (varsayılan olarak 100) sınırlarını değiştirir.
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse karşılık gelen EMA döneminde yumuşatma yapılmayacaktır,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u-3 +1).

 

1.3. Ergodik osilatör

1.3.1. Ergodik Osilatör kullanarak teknik analiz

Devam: Bölüm 1.1.1, 1.2.1'deki başlangıca bakın.

Altıncısı: Aşırı alım ve aşırı satım piyasası alanlarıdır. Normalize edilmiş yumuşatılmış momentum değerlerinde değişikliklerin meydana geldiği birim aralığı[-1, +1] veya yüzde aralığı [-100.100], aşırı alım veya aşırı satım piyasası alanlarını tanımlamanıza olanak tanır.

Aşırı alım veya aşırı satım piyasası durumunu karakterize eden teknik analiz indeksleri sınıfı osilatör olarak adlandırılır. Her osilatör için, aşırı alım veya aşırı satım piyasası sinyallerinin alındığı yaklaşımda düzeyler belirlenir. Osilatörler, piyasa rastgele seçilmiş uzun bir süre boyunca aşırı alım/aşırı satım koşullarında olabileceği için trend olan piyasalarda etkisizdir.

Yedincisi: Sinyal Çizgisidir. Bir trendin sonu ve bir fiyat hareketinin dönüş trendi hakkında sinyal elde etmek için bir sinyal çizgisi kullanılır. Ana çizgi, sinyal çizgisini aşağıdan yukarıya doğru geçtiğinde al sinyali alınır. Ana çizgi, sinyal çizgisini yukarıdan aşağıya doğru geçtiğinde sat sinyali alınır. Ana çizginin olduğu durumda - bu bir ergodiktir (gerçek güç indeksi); o zaman ergodikin tekrar yumuşatılması bir sinyal çizgisi oluşturur. Tekrar yumuşatma prosedürü, son ergodik yumuşatma işlemine eşittir.

Sekizincisi: Fiyat hareketi trendidir. Ana çizgi (ergodik) sinyal çizgisinin üzerinden geçtiğinde fiyat hareketi trendi yukarıya doğru (yükseliş trendi) olur. Ana çizgi (ergodik) sinyal çizgisinin altından geçtiğinde fiyat hareketi trendi aşağıya doğru (düşüş trendi) olur.

Şek. 1.5. Ergodik Osilatör

Şek. 1.5. Ergodik Osilatör


1.3.2. Ergodik Osilatörün Tanımı

Ergodic(price,q,r,s,u) = TSI(price,q,r,s,u)
SignalLine(price,q,r,s,u,ul) = EMA( Ergodic(price,q,r,s,u) ,ul)

Burada:

  • Ergodic() - ergodik - Gerçek Güç İndeksi TSI(fiyat,q,r,s,u),
  • SignalLine() -a sinyal çizgisi - ergodike uygulanan EMA(ul),
  • ul - bir sinyal çizgisinin EMA dönemi - William Blau'ya göre, ul değeri EMA ergodikinin son anlamlı (>1) dönemine eşit olmalıdır. Örneğin, çift yumuşatma Ergodik (fiyat, q, r, s, u) = Ergodik (fiyat, 2,20,5,1) kullanıyorsanız, William Blau, ul = s = 5.

1.3.3. Ergodik (fiyat, q,r,s,u,ul) - ergodik osilatör. Spesifikasyon
  • Dosya adı: Blau_Ergodic.mq5
  • Ad: William Blau'nun Ergodik Osilatörü (gerçek güç indeksi tabanlı).
  • Giriş parametreleri:
    • grafik çizimi #0 - Ergodik (gerçek güç endeksi):
      • q - momentumun hesaplandığı dönem (varsayılan q = 2),
      • r -Momentuma uygulanan 1. EMA dönemi (varsayılan r = 20),
      • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
      • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • grafik çizimi #1 - sinyal çizgisi:
      • ul - ergodike uygulanan dönem EMA sinyal çizgisi (varsayılan olarak ul = 3),
    • AppliedPrice - fiyat türü (varsayılan AppliedPrice=PRICE_CLOSE).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • her grafik çiziminin sunum stilini değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi),
    • iki düzey (varsayılan olarak -25 ve +25) - bir düzey ekler/kaldırır, değeri değiştirir, düzey açıklamasını değiştirir, düzeylerin sunum stilini değiştirir ("Düzeyler" sekmesi),
    • tek gösterge penceresinin ("Ölçek" sekmesi) ölçeğinin alt (varsayılan olarak -100) ve üst (varsayılan olarak 100) sınırlarını değiştirir.
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse, EMA yumuşatması kullanılmaz,
    • ul>0. Ul = 1 ise, Sinyal Çizgisi ve Ergodik çizgiler aynıdır,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u + ul-4 +1).

1.4. Kod (ayrıntılı açıklama)

1.4.1. "Blau_Mtm.mq5" - Mtm göstergesi(fiyat,q,r,s,u) - momentum

Mtm göstergesinin kodu (fiyat,q,r,s,u):

//+------------------------------------------------------------------+
//|                                                     Blau_Mtm.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp." // copyright
#property link      "https://www.mql5.com"                       // url
#property description "q-period Momentum (William Blau)"        // description
#include <WilliamBlau.mqh>              // include file (terminal_data_folder\MQL5\Include)
//--- indicator settings
#property indicator_separate_window     // indicator in a separate window
#property indicator_buffers 5           // number of buffers used
#property indicator_plots   1           // number of plots
//--- main graphic plot #0
#property indicator_label1  "Mtm"       // graphic plot label #0
#property indicator_type1   DRAW_LINE   // draw as a line
#property indicator_color1  Blue        // color
#property indicator_style1  STYLE_SOLID // line style - solid line
#property indicator_width1  1           // line width
//--- input parameters
input int    q=2;  // q - period of Momentum
input int    r=20; // r - 1st EMA, applied to momentum
input int    s=5;  // s - 2nd EMA, applied to the 1st EMA
input int    u=3;  // u - 3rd EMA, applied to the 2nd EMA
input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE; // AppliedPrice - price type
//--- dynamic arrays
double MainBuffer[];     // u-period 3rd EMA (for graphic plot #0)
double PriceBuffer[];    // price array
double MtmBuffer[];      // q-period Momentum
double EMA_MtmBuffer[];  // r-period 1st EMA
double DEMA_MtmBuffer[]; // s-period 2nd EMA
//--- global variables
int    begin1, begin2, begin3, begin4; // data starting indexes
int    rates_total_min; // total rates min
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers
   // plot buffers
   // graphic plot #0
   SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);             // u-period 3rd EMA
   // buffers for intermediate calculations
   SetIndexBuffer(1,PriceBuffer,INDICATOR_CALCULATIONS);    // price buffer
   SetIndexBuffer(2,MtmBuffer,INDICATOR_CALCULATIONS);      // q-period Momentum
   SetIndexBuffer(3,EMA_MtmBuffer,INDICATOR_CALCULATIONS);  // r-period 1st EMA
   SetIndexBuffer(4,DEMA_MtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA
/*
//--- graphic plot #0 (Main)
   PlotIndexSetString(0,PLOT_LABEL,"Mtm");             // label
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);    // drawing type as a line
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,Blue);        // line color
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); // line style
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);           // line width
*/
//--- precision
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);
//---
   begin1=q-1;        //                             - MtmBuffer[]
   begin2=begin1+r-1; // or =(q-1)+(r-1)             - EMA_MtmBuffer[]
   begin3=begin2+s-1; // or =(q-1)+(r-1)+(s-1)       - DEMA_MtmBuffer[]
   begin4=begin3+u-1; // or =(q-1)+(r-1)+(s-1)+(u-1) - MainBuffer[]
   //
   rates_total_min=begin4+1; // minimal size
//--- starting index for plot #0
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,begin4);
//--- short indicator name
   string shortname=PriceName(AppliedPrice)+","+string(q)+","+string(r)+","+string(s)+","+string(u);
   IndicatorSetString(INDICATOR_SHORTNAME,"Blau_Mtm("+shortname+")");
//--- OnInit done
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(
                const int rates_total,     // rates total
                const int prev_calculated, // bars, calculated at previous call
                const datetime &Time[],    // Time
                const double &Open[],      // Open
                const double &High[],      // High
                const double &Low[],       // Low
                const double &Close[],     // Close
                const long &TickVolume[],  // Tick Volume
                const long &Volume[],      // Real Volume
                const int &Spread[]        // Spread
               )
  {
   int i,pos;
//--- check rates
   if(rates_total<rates_total_min) return(0);
//--- calc PriceBuffer[]
   CalculatePriceBuffer(
                        AppliedPrice,        // applied price
                        rates_total,         // rates total
                        prev_calculated,     // bars, calculated at previous call
                        Open,High,Low,Close, // Open[], High[], Low[], Close[] arrays
                        PriceBuffer          // price buffer
                       );
//--- calculation of q-period Momentum
   if(prev_calculated==0)      // at first call
     {
      pos=begin1;              // calc all values starting from begin1
      for(i=0;i<pos;i++)       // pos values
         MtmBuffer[i]=0.0;     // zero values
     }
   else pos=prev_calculated-1; // overwise recalc only last value
   // calculate MtmBuffer[]
   for(i=pos;i<rates_total;i++)
      MtmBuffer[i]=PriceBuffer[i]-PriceBuffer[i-(q-1)];
//--- EMA smoothing
   // r-period 1st EMA
   ExponentialMAOnBufferWB(
                           rates_total,     // rates total
                           prev_calculated, // bars, calculated at previous call
                           begin1,          // starting index
                           r,               // smoothing period
                           MtmBuffer,       // input array
                           EMA_MtmBuffer    // output array
                          );
   // s-period 2nd EMA
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_MtmBuffer,DEMA_MtmBuffer);
   // u-period 3rd EMA (for plot #0)
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_MtmBuffer,MainBuffer);
//--- OnCalculate done. Return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Kodu ayrıntılı olarak ele alalım.


1.4.1.1. Mtm Gösterge ayarları (fiyat,q,r,s,u)

Literatür

MQL5 Referansı:

  1. "Özel Göstergeler" Bölümündeki gösterge ayarları hakkında ne okunmalıdır?
  2. Göstergenin özellikleri ile karşılık gelen işlevler arasındaki ilişki (Bkz. "Özel Göstergeler").
  3. Program özellikleri (# özelliği) (Bkz. "Dil Temelleri/ Önişlemci").
  4. Sunum stilleri (grafik çizim özellikleri) ("Standart sabitler, numaralandırmalar ve yapılar / gösterge sabitleri" bölümüne bakınız).
  5. Özel göstergelerin özellikleri ("Standart sabitler, numaralandırmalar ve yapılar / gösterge sabitleri" bölümüne bakınız).
Telif Hakkı. Göstergenin açıklaması
#property copyright "Copyright 2011, MetaQuotes Software Corp." // copyright
#property link      "https://www.mql5.com"                       // url
#property description "q-period Momentum (William Blau)"        // description

Yalnızca #property önişlemci yönergesi aracılığıyla ayarlar. Telif hakkı (telif hakkı ve bağlantı parametreleri), sürüm (sürüm parametresi) ve mql5 programının açıklaması (parametre açıklaması ) gösterge penceresinin "Özellikler" bölümünde görüntülenir ("Özellikler" sekmesi, "Ek" kutusu).

İçerme dosyası
#include <WilliamBlau.mqh>              // include file (terminal_data_folder\MQL5\Include)

Önişlemci #Include <WilliamBlau.mqh> satırını "WilliamBlau.mqh" dosyasının içerikleriyle değiştirir. Açılı ayraçlar "WilliamBlau.mqh" dosyasının terminal veri klasöründen alınacağını belirtir. Daha fazla bilgi için bkz. İçerme dosyaları.

"WilliamBlau.mqh" dosyasının içeriği ile ilgili olarak giriş bölümüne bakınız.

Gösterge ayarları (genel olarak)

Özel Gösterge - birkaç grafik çizimdir. Göstergenin grafik çizimi, fiyat grafiğinin ana penceresinde veya ayrı bir pencerede görüntülenebilir. Her grafik çiziminin belirli bir çizim yöntemi, rengi, stili ve kalınlığı vardır.

Grafik çiziminin sunumu için veriler, gösterge ara belleklerinden alınır (her grafik çizimi, bir ila beş gösterge arabelleğine karşılık gelir). Gösterge arabelleği olarak bir gösterge dizisi kullanırız.

Göstergeyi ayarlamak için şu işlemlerin gerçekleştirilmesi gerekir (bkz. Şek. 1.6):

  1. Göstergelerin görüntüleneceği pencereyi belirtin.
  2. Grafik çizimlerinin sayısını belirtin.
  3. Gösterge arabelleklerinin sayısını belirtin.
  4. Gösterge dizilerinin bildirimi.
  5. Bir bağlantı ayarlayın: gösterge dizisi -> gösterge arabelleği -> grafik çizimi.
  6. Her bir grafik çiziminin özelliklerini tanımlayın.
  7. Gösterge değerlerinin görüntülenme duyarlılığını belirtin.
  8. Her bir grafik yapısı için, grafik çizimini oluşturmadan ilk çubukların sayısını belirtin.
  9. Yatay düzeyleri ayarlayın ve her bir yatay düzeyin özelliklerini tanımlayın (yok.)
  10. Ayrı gösterge penceresi için ölçek kısıtlamalarını ayarlayın (yok.)
  11. Göstergenin kısa adını belirtin.

Şek. 1.6. Mtm Momentum Göstergesi (fiyat,q,r,s,u)

Şek. 1.6. Mtm Momentum Göstergesi (fiyat,q,r,s,u)


Gösterge ayarları şu şekilde yapılır:

Daha fazla bilgi için bkz. Gösterge Özellikleri ve Karşılık Gelen İşlevler Arasındaki Bağlantı.

Göstergeyi ayarlama yöntemleri arasındaki fark, #property yönergesi aracılığıyla yapılan ayarların, gösterge fiyat grafiğine eklenmeden önce kullanılabilmesiyken, özel işlevler aracılığıyla yapılan ayarların ise gösterge fiyat grafiğine eklendikten sonra kullanılabilmesidir. Ayarların yapılandırılması, göstergenin "Özellikler" penceresinden gerçekleştirilir.

Ayarlar: Göstergeyi görüntülemek için bir pencere (1)
#property indicator_separate_window     // indicator in a separate window

Yapılandırma zorunludur ve yalnızca #property önişlemci yönergesi aracılığıyla mümkündür. Gösterge ekranının iki seçeneği vardır:

  1. Fiyat grafiğinin ana penceresinde - indicator_chart_window,
  2. Ayrı bir pencerede - indicator_separate_window.
Ayarlar: Arabellek sayısı (3) ve grafik çizimleri (2)
#property indicator_buffers 5           // number of buffers used
#property indicator_plots   1           // number of plots

Yapılandırma zorunludur ve yalnızca #property önişlemci yönergesi aracılığıyla mümkündür. Gösterge arabelleklerinin sayısı (indicator_buffers parametresi) ve grafik çizimlerinin sayısı (indicator_plots parametresi) sınırlı değildir.

Ayarlar: Gösterge Dizileri (4)
//--- dynamic arrays
double MainBuffer[];     // u-period 3rd EMA (for graphic plot #0)
double PriceBuffer[];    // price array
double MtmBuffer[];      // q-period Momentum
double EMA_MtmBuffer[];  // r-period 1st EMA
double DEMA_MtmBuffer[]; // s-period 2nd EMA

Gösterge dizileri genel düzeyde tek boyutlu çift türünde dinamik diziler olarak bildirilir.

Ayarlar: Gösterge dizileri, gösterge arabellekleri ve grafik çizimleri arasındaki bağlantıyı (5) kurma.
// graphic plot #0
SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);             // u-period 3rd EMA
// buffers for intermediate calculations
SetIndexBuffer(1,PriceBuffer,INDICATOR_CALCULATIONS);    // price buffer
SetIndexBuffer(2,MtmBuffer,INDICATOR_CALCULATIONS);      // q-period Momentum
SetIndexBuffer(3,EMA_MtmBuffer,INDICATOR_CALCULATIONS);  // r-period 1st EMA
SetIndexBuffer(4,DEMA_MtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA

Kod, Init() olay işleyicisinin OnInit() işlevine yazılır.

Gösterge arabelleğinin karşılık gelen tek boyutlu diziyle bağlantısı SetIndexBuffer() işleviyle kurulur:

bool SetIndexBuffer(
   int                 index,    // index of the indicator buffer (starts from 0)
   double              buffer[], // dynamic array
   ENUM_INDEXBUFFER_TYPE data_type // type of data, stored in the indicator array
   );

Gösterge arabelleği, boyutu istemci terminali tarafından kontrol edilen, böylece her zaman göstergenin hesaplandığı çubukların sayısına karşılık gelen çift türde bir tek boyutlu dinamik dizidir. Gösterge arabelleklerinin indekslenmesi 0'dan başlar.

Bir gösterge arabelleği üç veri türü saklayabilir: INDICATOR_DATA, INDICATOR_COLOR_INDEX, INDICATOR_CALCULATIONS. Görüntüleme yöntemine bağlı olarak her bir grafik çizimine bir ila beş gösterge arabelleği karşılık gelebilir: Bir ila dört gösterge arabelleği değeri (INDICATOR_DATA veri türü) ve bir renk arabelleği (INDICATOR_COLOR_INDEX veri türü.)

INDICATOR_CALCULATIONS veri türündeki gösterge arabellekleri, ara hesaplamalar için tasarlanmıştır. Bağlamadan sonra, gösterge dizisi tıpkı geleneksel dizilerde olduğu gibi indekslemeye sahip olacaktır (aşağıda Bölüm 1.4.1.2'ye bakınız).

Ayarlar: Grafik çizimlerinin özellikleri (6)

Her bir grafik çizim kümesinin yapılandırması için aşağıdakiler belirtilmiştir:

  1. Etiket,
  2. Çizim Türü (ENUM_DRAW_TYPE numaralandırmasındaki 18 türün tamamına bakınız),
  3. Çizgi Rengi,
  4. Çizgi Stili (ENUM_LINE_STYLE içinde sıralanan olası stillere bakınız),
  5. Çizgi Genişliği.

Yapılandırmanın iki olası yolu vardır:

1) #property önişlemci yönergesi aracılığıyla (bu şekilde uygulanır):

//--- graphic plot #0 (Main)
#property indicator_label1  "Mtm"       // label of graphic plot #0
#property indicator_type1   DRAW_LINE   // Drawing type: DRAW_LINE - line
#property indicator_color1  Blue        // Line color - Blue
#property indicator_style1  STYLE_SOLID // Line style: STYLE_SOLID - solid line
#property indicator_width1  1           // Line width

2) PlotIndexSetDouble(), PlotIndexSetInteger(), PlotIndexSetString() grafik çizimi özelliklerinin ayarlarının bir işlevler grubu kullanılarak:

//--- graphic plot #0 (Main)
   PlotIndexSetString(0,PLOT_LABEL,"Mtm");            // label
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);    // drawing type as a line
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,Blue);       // line color
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); // line style
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);          // line width

Kod, Init olay işleyicisinin OnInit() işlevinde yazılır. PlotIndexSet *() işlevinin belirtimi:

bool PlotIndexSetDouble|Integer|String(
   int                             plot_index, // index of the graphic plot
   int                             prop_id,    // identifier of the property of the graphic plot
   double|int,char,bool,color|string  prop_value  // new value of the property
   );

Seçilen grafik çizimi türünün görünümünü iyileştirmek için ENUM_PLOT_PROPERTY numaralandırmasında listelenen grafik çiziminin özellik kimliklerini kullanırız.

Grafik çizimlerinin indekslenmesi 0'dan başlar. Bir #property yönergesi aracılığıyla yapılandırmanın tercih edilebilirliği ile ilgili olarak, yukarıdaki "Gösterge Tercihleri" bölümüne bakınız. Grafik çizimlerinin bazı özellikleri (renk, stil, çizgi genişliği) göstergenin "Özellikler" penceresinden ("Renkler" sekmesi) değiştirilebilir.

Ayarlar: Gösterge değerlerinin görüntülenme duyarlılığı ​​(7)
//--- precision
   IndicatorSetInteger(INDICATOR_DIGITS,_Digits);

Kod, Init olay işleyicisinin OnInit() işlevinde yazılır. IndicatorSet * () gösterge ayarları yapılandırması işlevinin belirtimi:

bool IndicatorSetDouble|Integer|String(
   int                    prop_id,   // ID of indicator property
   double|int,color|string  prop_value // new value of a property
   );

Gösterge özelliklerinin tanımlayıcıları, ENUM_CUSTOMIND_PROPERTY numaralandırmasında listelenir.

Gösterge değerlerinin görüntülenme duyarlılığı yalnızca IndicatorSetInteger() işlevi, gösterge özelliklerinin kimliği INDICATOR_DIGITS, ENUM_CUSTOMIND_PROPERTY_INTEGER numaralandırması tarafından verilir.

Ekranda görüntülenmesi amaçlanangösterge arabelleklerinin değerlerinin bulunduğu bir örnekte: fare imleci gösterge çizgisinin üzerine getirildiğinde göstergenin ilişkilendirildiği enstrümanın fiyatında ondalık noktasından sonra _Digits basamak sayısına yuvarlanacaktır.

Ayarlar: Oluşturulmadan ilk çubukların sayısı (8)

William Blau'nun q-dönem Momentumunu oluşturma verileri dört adımda oluşturulur:

Adım 1. PriceBuffer[] fiyatlar dizisindeki veriler baz alınarak Momentum (q dönemi) hesaplanır. q-dönemMomentumunun değerleri ​MtmBuffer[] dizisine yerleştirilir. Fiyatlar dizisinin indekslenmesi 0'dan başladığı için fiyatlar dizisindeki anlamlı veriler de 0 indeksinden başlar, daha sonra MtmBuffer[] dizisindeki anlamlı veriler indeks (q-1) ile başlar.

Adım 2. MtmBuffer[] dizisindeki anlamlı veriler yumuşatılır (yumuşatma dönemi r). q-dönemq-dönem Momentumunun değerleri ​ EMA_MtmBuffer[] dizisine yerleştirilir. MtmBuffer[] dizisinin indekslenmesi 0'dan başladığı için MtmBuffer[] dizisindeki anlamlı veriler indeks (q-1) ile başlar, daha sonra EMA_MtmBuffer[] dizisindeki anlamlı veriler indeks (q-1) + (r-1) ile başlar.

Adım 3 ve 4. DEMA_MtmBuffer[] dizisindeki (yumuşatma dönemi s) ve MainBuffer[] dizisindeki (yumuşatma dönemi u) anlamlı verilerin hangi çubuktan başladığını belirlemek için benzer faktörler verilmiştir. Bkz. Şekil 1.7.

Şek. 1.7. Mtm (fiyat,q,r,s,u) göstergesinin anlamlı verileri

Şek. 1.7. Mtm (fiyat,q,r,s,u) göstergesinin anlamlı verileri


Genel düzeyde, değişkenler bildirilir:

//--- global variables
int    begin1, begin2, begin3, begin4; // data starting indexes

q-dönemdeğerleri, değişken gösterge dizisine karşılık gelen anlamlı verilerin başladığı çubuğun indeksidir. Değişken değerleri​Init olay işleyicisinin OnInit() işlevinde hesaplanır ve Calculate olay işleyicisinin OnCalculate() işlevinde kullanılır.

//---
   begin1=q-1;        //                             - MtmBuffer[]
   begin2=begin1+r-1; // or =(q-1)+(r-1)             - EMA_MtmBuffer[]
   begin3=begin2+s-1; // or =(q-1)+(r-1)+(s-1)       - DEMA_MtmBuffer[]
   begin4=begin3+u-1; // or =(q-1)+(r-1)+(s-1)+(u-1) - MainBuffer[]
   //
   rates_total_min=begin4+1; // minimal size
//--- starting index for plot #0
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,begin4);

Grafik çiziminde gösterilmeyen ilk çubukların sayısı, gösterge özelliğinin tanımlayıcısı PLOT_DRAW_BEGIN numaralandırmalar ENUM_PLOT_PROPERTY_INTEGER PlotIndexSetInteger() işlevi kullanılarak belirtilir.

Yapılandırma: Göstergenin kısa adı (11)
//--- short indicator name
   string shortname=PriceName(AppliedPrice)+","+string(q)+","+string(r)+","+string(s)+","+string(u);
   IndicatorSetString(INDICATOR_SHORTNAME,"Blau_Mtm("+shortname+")");

Kod, Init olay işleyicisinin OnInit() işlevinde yazılır. Göstergenin kısa adı yalnızca IndicatorSetString() işlevi, INDICATOR_SHORTNAME gösterge özelliklerinin tanımlayıcısı (ENUM_CUSTOMIND_PROPERTY_STRING numaralandırması) kullanılarak belirtilir. PriceName () işlevi, AppliedPrice giriş parametresinin değerine bağlı olarak fiyat türü adını döndürür. PriceName () işlevinin kodu "WilliamBlau.mqh" dosyasında bulunur (bkz. Giriş).

Giriş parametreleri
//--- input parameters
input int    q=2;  // q - period of Momentum
input int    r=20; // r - 1st EMA, applied to momentum
input int    s=5;  // s - 2nd EMA, applied to the 1st EMA
input int    u=3;  // u - 3rd EMA, applied to the 2nd EMA
input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE; // AppliedPrice - price type

Daha fazla bilgi için bkz. giriş değişkenleri. Giriş parametreleri, göstergenin "Özellikler" penceresinden ("Girişler" sekmesi) değiştirilebilir.


1.4.1.2. Mtm göstergesi hesaplama (fiyat,q,r,s,u)

Hesaplama: Algoritma

Mtm(fiyat,q,r,s,u) göstergesini hesaplama algoritması şu şekildedir:

  1. Göstergeyi hesaplamak için yeterli veri olup olmadığını kontrol edin.
  2. Belirtilen fiyat türüne göre fiyatlar dizisini hesaplama - PriceBuffer[] dizisinin oluşumu
  3. q-dönem Momentumunu hesaplama işlemine başlamak/devam etmek için indeks çubuğunu belirleme.
  4. q-dönem momentumunu hesaplama - MtmBuffer[] dizisini doldurma.
  5. EMA yöntemiyle ilk yumuşatma (r dönemi) - EMA_MtmBuffer[] dizisini doldurma.
  6. EMA yöntemiyle ikinci yumuşatma (s dönemi) - DEMA_MtmBuffer[] dizisini doldurma.
  7. EMA yöntemiyle üçüncü yumuşatma (u dönemi) - MainBuffer[] dizisini doldurma - grafik çizimi #0'ı oluşturmakiçin değerleri hesaplama.
Hesaplama: OnCalculate() işlevi

Gösterge değerlerini hesaplama işlemi,Calculate olay işleyicisinin OnCalculate() işlevinde gerçekleştirilir. OnCalculate() işlev çağrısının ikinci biçimini kullanırız.

int OnCalculate(
                const int rates_total,     // rates total
                const int prev_calculated, // bars, calculated at the previous call
                const datetime &Time[],    // Time
                const double &Open[],      // Open
                const double &High[],      // High
                const double &Low[],       // Low
                const double &Close[],     // Close
                const long &TickVolume[],  // Tick Volume
                const long &Volume[],      // Real Volume
                const int &Spread[]        // Spread
               )
  {
//---
//--- OnCalculate done. Return value of prev_calculated for next call
   return(rates_total);
  }

rates_total bağımsız değişkeni, fiyat grafiğinin oluşturulan ve işlenmek üzere gösterge tarafından kullanılabilen çubuk sayısıdır. prev_calculated, mevcut OnCalculate() işlev çağrısının başlangıç zamanında gösterge tarafından işlenen fiyat grafiği çubuklarının sayısıdır.

OnCalculate() işlevi, geçerli çağrının sona erme zamanında gösterge tarafından işlenen fiyat grafiği çubuklarının sayısını döndürür. Bu işlev rates_total parametresini döndürür ve ilk çağrıda fiyat grafiğinin işlenmemiş çubuklarının tümü işlenecek şekilde yapılandırılmalıdır.

Yani, OnCalculate() işlevinin ilk çağrısında, prev_calculated parametresi 0'a eşitse, bu durumda ikinci çağrıda, prev_calculated parametresi rates_totalveya rates_total +1 parametresine eşit olacaktır ve ikinci çağrıdan başlayarak, OnCalculate() işlevi son çubuğu yalnızca işler (sayar). Bir örnekle daha fazla açıklama için buraya bakınız.

Gösterge arabellekleri ve Time[], Open[], High[], Low[], Close[], TickVolume[], Volume[] ve Spread[] dizilerinin soldan sağa, dizinin başından sonuna, en eskiden en yeni veriye varsayılan bir dizin indeksleme yönü vardır. İlk öğenin indeksi 0'a eşittir. Gösterge arabelleğinin boyutu, istemci terminali tarafından kontrol edilir; böylece her zaman göstergenin hesaplandığı çubuk sayısına karşılık gelir.

Hesaplama: Göstergeyi hesaplamak için yeterli veri olup olmadığını kontrol edin (1)
//--- check rates
   if(rates_total<rates_total_min) return(0);

rates_total_min genel değişkeni, Init olay işleyicisinin OnInit() işlevinde hesaplanan, göstergenin giriş zaman serilerinin minimum boyutudur.

   rates_total_min=begin4+1; // minimum size of the input timeseries of the indicator
Hesaplama: PriceBuffer[] fiyat dizileri (2)
//--- calculation of the prices array PriceBuffer[]
   CalculatePriceBuffer(
                        AppliedPrice,        // price type
                        rates_total,         // size of the input timeseries
                        prev_calculated,     // bars, processed on the previous call
                        Open,High,Low,Close, // Open[], High[], Low[], Close[]
                        PriceBuffer          // calculate the prices array
                       );

PriceBuffer[] fiyatlar dizisini doldurmak için CalculatePriceBuffer() işlevi kullanılır. CalculatePriceBuffer() işlevinin kodu "WilliamBlau.mqh" dosyasında bulunur (bkz. giriş). Fiyat türü, AppliedPrice giriş parametresinde belirtilir.

Hesaplama: q-dönem Momentumunu hesaplama işlemine başlamak/devam etmek için indeks çubuğunun tanımı (3)

pos yerel değişkeni , göstergenin OnCalculate() işlevinin mevcut çağrısında hesaplanacağı çubuğun indeksidir. pos değişkeninin hesaplamasını MtmBuffer[] dizisini hesaplamaya hazırlama aşamasıyla birleştirelim (MtmBuffer[] dizisinin anlamsız öğelerini sıfırlama aşaması).

Hesaplama: q-dönem Momentumu (4)
//--- calculation of q-period Momentum
   if(prev_calculated==0)      // at first call
     {
      pos=begin1;              // calc all values starting from begin1
      for(i=0;i<pos;i++)       // pos values
         MtmBuffer[i]=0.0;     // zero values
     }
   else pos=prev_calculated-1; // overwise recalc only last value
   // calculate MtmBuffer[]
   for(i=pos;i<rates_total;i++)
      MtmBuffer[i]=PriceBuffer[i]-PriceBuffer[i-(q-1)];

q-dönem Momentumu, cari dönem PriceBuffer[i] ile önceki dönemlerin PriceBuffer[i-(q-1)] fiyatı(q-1) arasındaki fark olarak hesaplanır.

Hesaplama: EMA yöntemiyle yumuşatma (5-7)

//--- EMA smoothing
   // r-period 1st EMA
   ExponentialMAOnBufferWB(
                           rates_total,     // rates total
                           prev_calculated, // bars, calculated at previous call
                           begin1,          // starting index
                           r,               // smoothing period
                           MtmBuffer,       // input array
                           EMA_MtmBuffer    // output array
                          );
   // s-period 2nd EMA
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_MtmBuffer,DEMA_MtmBuffer);
   // u-period 3rd EMA (for plot #0)
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_MtmBuffer,MainBuffer);

ExponentialMAOnBuffer() işlevi giriş bölümünde açıklanmıştır. 1. EMA'yı hareket ettiren r-döneminin hesaplanması örneğinde: ExponentialMAOnBuffer() işlevi, EMA_MtmBuffer[] çıkış dizisini ​ ​MtmBuffer[] giriş dizisinin ​EMA (r) değerleriyle; (begin1-1) dahil olmak üzere dizine kadar önemsiz verilerle, sıfır değerleriyle doldurur.

 

1.4.2. "Blau_TSI.mq5" - TSI göstergesi(fiyat,q,r,s,u) - gerçek güç indeksi

TSI göstergesinin (fiyat,q,r,s,u) kodu ("Blau_Mtm.mq5" kodundaki değişiklik ve eklemeler temel alınarak oluşturulmuştur):

//+------------------------------------------------------------------+
//|                                                     Blau_TSI.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp." // copyright
#property link      "https://www.mql5.com"                       // URL
#property description "True Strength Index (William Blau)"      // description
#include <WilliamBlau.mqh>               // include file (terminal_data_folder\MQL5\Include)
//--- indicator settings
#property indicator_separate_window      // indicator in a separate window
#property indicator_buffers 10           // number of buffers used
#property indicator_plots   1            // graphic plots
//--- horizontal levels
#property indicator_level1 -25           // level #0 (vertical)
#property indicator_level2 25            // level #1 (vertical)
#property indicator_levelcolor Silver    // level color
#property indicator_levelstyle STYLE_DOT // level style
#property indicator_levelwidth 1         // level width
//--- indicator min/max
#property indicator_minimum -100         // minimum
#property indicator_maximum 100          // maximum
//--- graphic plot #0 (Main)
#property indicator_label1  "TSI"        // label for graphic plot #0
#property indicator_type1   DRAW_LINE    // draw as a line
#property indicator_color1  Blue         // line color
#property indicator_style1  STYLE_SOLID  // line style
#property indicator_width1  1            // line width
//--- input parameters
input int    q=2;  // q - period of Momentum
input int    r=20; // r - 1st EMA, applied to Momentum
input int    s=5;  // s - 2nd EMA, applied to the 1st smoothing
input int    u=3;  // u - 3rd EMA, applied to the 2nd smoothing
input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE; // AppliedPrice - price type
//--- dynamic arrays
double MainBuffer[];        // TSI (graphic plot #0)
double PriceBuffer[];       // price array
double MtmBuffer[];         // q-period Momentum
double EMA_MtmBuffer[];     // r-period 1st EMA
double DEMA_MtmBuffer[];    // s-period 2nd EMA
double TEMA_MtmBuffer[];    // u-period 3rd EMA
double AbsMtmBuffer[];      // q-period Momentum (absolute value)
double EMA_AbsMtmBuffer[];  // r-period 1st EMA (absolute value)
double DEMA_AbsMtmBuffer[]; // s-period 2nd EMA (absolute value)
double TEMA_AbsMtmBuffer[]; // u-period 3rd EMA (absolute value)
//--- global variables
int    begin1, begin2, begin3, begin4; // starting index
int    rates_total_min; // rates total min
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers
   // graphic plot #0
   SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);                // TSI
   // intermediate buffers; (not used for plot)
   SetIndexBuffer(1,PriceBuffer,INDICATOR_CALCULATIONS);       // price array
   SetIndexBuffer(2,MtmBuffer,INDICATOR_CALCULATIONS);         // q-period Momentum
   SetIndexBuffer(3,EMA_MtmBuffer,INDICATOR_CALCULATIONS);     // r-period 1st EMA
   SetIndexBuffer(4,DEMA_MtmBuffer,INDICATOR_CALCULATIONS);    // s-period 2nd EMA
   SetIndexBuffer(5,TEMA_MtmBuffer,INDICATOR_CALCULATIONS);    // u-period 3rd EMA
   SetIndexBuffer(6,AbsMtmBuffer,INDICATOR_CALCULATIONS);      // q-period моментум (absolute value)
   SetIndexBuffer(7,EMA_AbsMtmBuffer,INDICATOR_CALCULATIONS);  // r-period 1st EMA (absolute value)
   SetIndexBuffer(8,DEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA (absolute value)
   SetIndexBuffer(9,TEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA (absolute value)
/*
//--- graphic plot #0 (Main)
   PlotIndexSetString(0,PLOT_LABEL,"TSI");             // label of graphic plot #0
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);    // draw as a line
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,Blue);        // line color
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID); // line style
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);           // line width
*/
//--- precision
   IndicatorSetInteger(INDICATOR_DIGITS,2);
/*
//--- horizontal levels
   IndicatorSetInteger(INDICATOR_LEVELS,2);                // number of levels
   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,-25);         // level #0
   IndicatorSetDouble(INDICATOR_LEVELVALUE,1,25);          // level #1
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,Silver);       // level color
   IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DOT);    // level style
   IndicatorSetInteger(INDICATOR_LEVELWIDTH,1);            // level width
   IndicatorSetString(INDICATOR_LEVELTEXT,0,"Oversold");   // level 0 description "Oversold"
   IndicatorSetString(INDICATOR_LEVELTEXT,1,"Overbought"); // level 1 description "Overbought"
//--- indicator scale
   IndicatorSetDouble(INDICATOR_MINIMUM,-100); // minimum
   IndicatorSetDouble(INDICATOR_MAXIMUM,100);  // maximum
*/
//---
   begin1=q-1;        //                             - MtmBuffer[], AbsMtmBuffer[]
   begin2=begin1+r-1; // or =(q-1)+(r-1)             - EMA_...[]
   begin3=begin2+s-1; // or =(q-1)+(r-1)+(s-1)       - DEMA_...[]
   begin4=begin3+u-1; // or =(q-1)+(r-1)+(s-1)+(u-1) - TEMA_...[], MainBuffer[]
   //
   rates_total_min=begin4+1; // rates total min
//--- starting index for plot #0
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,begin4);
//--- short indicator name
   string shortname=PriceName(AppliedPrice)+","+string(q)+","+string(r)+","+string(s)+","+string(u);
   IndicatorSetString(INDICATOR_SHORTNAME,"Blau_TSI("+shortname+")");
//--- OnInit done
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(
                const int rates_total,     // rates total
                const int prev_calculated, // bars, calculated at previous call
                const datetime &Time[],    // Time
                const double &Open[],      // Open
                const double &High[],      // High
                const double &Low[],       // Low
                const double &Close[],     // Close
                const long &TickVolume[],  // Tick Volume
                const long &Volume[],      // Real Volume
                const int &Spread[]        // Spread
               )
  {
   int i,pos;
   double value1,value2;
//--- check rates
   if(rates_total<rates_total_min) return(0);
//--- calc PriceBuffer[]
   CalculatePriceBuffer(
                        AppliedPrice,        // price type
                        rates_total,         // rates total
                        prev_calculated,     // bars, calculated at previous tick
                        Open,High,Low,Close, // Open[], High[], Low[], Close[]
                        PriceBuffer          // price buffer
                       );
//--- calculation of  mtm and |mtm|
   if(prev_calculated==0)      // at first call
     {
      pos=begin1;              // calc all values starting from begin1
      for(i=0;i<pos;i++)       // pos
        {
         MtmBuffer[i]=0.0;     // zero values
         AbsMtmBuffer[i]=0.0;  //
        }
     }
   else pos=prev_calculated-1; // overwise calc only last bar
   // calculate MtmBuffer[] and AbsMtmBuffer[]
   for(i=pos;i<rates_total;i++)
     {
      MtmBuffer[i]=PriceBuffer[i]-PriceBuffer[i-(q-1)];
      AbsMtmBuffer[i]=MathAbs(MtmBuffer[i]);
     }
//--- EMA smoothing
   // r-period 1st EMA
   ExponentialMAOnBufferWB(
                           rates_total,     // rates total
                           prev_calculated, // bars, calculated at previous call
                           begin1,          // starting index
                           r,               // smoothing period
                           MtmBuffer,       // input array
                           EMA_MtmBuffer    // output array
                          );
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin1,r,AbsMtmBuffer,EMA_AbsMtmBuffer);
   // s-period 2nd EMA
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_MtmBuffer,DEMA_MtmBuffer);
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_AbsMtmBuffer,DEMA_AbsMtmBuffer);
   // u-period 3rd EMA
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_MtmBuffer,TEMA_MtmBuffer);
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_AbsMtmBuffer,TEMA_AbsMtmBuffer);
//--- TSI calculation (graphic plot #0)
   if(prev_calculated==0)      // at first call
     {
      pos=begin4;              // calc all values starting from begin4
      for(i=0;i<pos;i++)       // 
         MainBuffer[i]=0.0;    // zero values
     }
   else pos=prev_calculated-1; // overwise calc only last bar
   // calculation of MainBuffer[]
   for(i=pos;i<rates_total;i++)
     {
      value1=100*TEMA_MtmBuffer[i];
      value2=TEMA_AbsMtmBuffer[i];
      MainBuffer[i]=(value2>0)?value1/value2:0;
     }
//--- OnCalculate done. Return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Yalnızca "Blau_Mtm.mq5" kodundaki değişiklikleri ve eklemeleri ayrıntılı olarak ele alalım.

1.4.2.1. TSI göstergesinin (fiyat,q,rs,u) yapılandırmaları ("Blau_Mtm.mq5" kodundaki değişiklikler ve eklemeler)

Gösterge ayarları (genel olarak)

TSI göstergesinin (fiyat,q,r,s,u) yapılandırmaları, Mtm göstergesinin (fiyat,q,r,s,u) yapılandırmalarından farklıdır (bkz. Şekil 1.8):

  1. Göstergelerin görüntüleneceği pencereyi belirtin (değişiklik yok)
  2. Grafik yapılarının sayısını belirtin (değişiklik yok)
  3. Gösterge arabelleklerinin sayısını belirtin (arabellek sayısı arttı.)
  4. Gösterge dizilerinin bildirimi (dizilere eklendi.)
  5. Dizileri/arabellekleri/çizimleri atayın: gösterge dizisi -> gösterge arabelleği -> grafik çizimi (yeniden yapılandırma.)
  6. Her bir grafik çiziminin özelliklerini tanımlayın (etiket değiştirildi)
  7. Gösterge değerlerinin görüntülenme doğruluğunu belirtin(doğruluk değişti)
  8. Her bir grafik çizimi için, grafik çiziminde göstermeden ilk çubukların sayısını belirtin (değişiklik yok)
  9. Yatay düzeyleri ayarlayın ve her bir yatay düzeyin özelliklerini tanımlayın (yeni)
  10. Ayrı gösterge penceresinin ölçeği için limitler belirleyin (yeni)
  11. Kısa gösterge adını belirtin (ad değiştirildi.)

Şek. 1.8. Gerçek Güç İndeksi TSI (fiyat,q,r,s,u) göstergesi

Şek. 1.8. Gerçek Güç İndeksi TSI (fiyat,q,r,s,u) göstergesi


Yapılandırmalar (değişiklikler)

"Blau_Mtm.mq5" kodunda aşağıdaki minör değişiklikler yapılmıştır.

1. mql5-programının kısa açıklaması değiştirildi:

#property description "True Strength Index (William Blau)"      // description

2. (yapılandırma 6'da) Grafik çizimlerinin sayısı artmadı, çizim yöntemi (DRAW_LINE - çizgi), çizgi rengi (Mavi), çizgi stili (STYLE_SOLID - düz çizgi) ve çizgi genişliği (1) aynı kaldı, ancak #0 grafik çiziminin etiketi değiştirildi:

#property indicator_label1  "TSI"        // label for graphic plot #0

3. (yapılandırma 7'de) Gösterge değerlerinin görüntülenme doğruluğu değiştirildi:

   IndicatorSetInteger(INDICATOR_DIGITS,2);

4. (yapılandırma 11'de) Göstergenin kısa adı değiştirildi:

   IndicatorSetString(INDICATOR_SHORTNAME,"Blau_TSI("+shortname+")");
Yapılandırmalar: Yatay düzeyler (9)

Yatay düzeyleri yapılandırmak için her düzey için aşağıdakiler belirtilmelidir:

  1. Dikey eksendeki değer,
  2. Düzey açıklaması (isteğe bağlı). Yatay katmanların tek bir oluşturma stili vardır:
    1. Çizginin görüntülenme rengi, 
    2. Çizgi stili (ENUM_LINE_STYLE içinde sıralanan olası stillere bakınız),
    3. Çizginin kalınlığı.

Yapılandırmanın iki olası yolu vardır:

1) #property önişlemci yönergesi kullanılarak (Bu şekilde uygulanır).

//--- horizontal levels
#property indicator_level1 -25           // level #0 (vertical)
#property indicator_level2 25            // level #1 (vertical)
#property indicator_levelcolor Silver    // level color
#property indicator_levelstyle STYLE_DOT // level style
#property indicator_levelwidth 1         // level width

2) IndicatorSet *() işlevlerinin grubu kullanılarak:

//--- horizontal levels
   IndicatorSetInteger(INDICATOR_LEVELS,2);                // number of levels
   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,-25);         // level #0
   IndicatorSetDouble(INDICATOR_LEVELVALUE,1,25);          // level #1
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,Silver);       // level color
   IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DOT);    // level style
   IndicatorSetInteger(INDICATOR_LEVELWIDTH,1);            // level width
   IndicatorSetString(INDICATOR_LEVELTEXT,0,"Oversold");   // level 0 description "Oversold"
   IndicatorSetString(INDICATOR_LEVELTEXT,1,"Overbought"); // level 1 description "Overbought"

Kod, Init olay işleyicisinin OnInit() işlevinde yazılır. Yatay düzeylerin indekslenmesi 0'dan başlar. Yatay düzeyin görünümünü iyileştirmek için ENUM_CUSTOMIND_PROPERTY numaralandırmasında listelenen INDICATOR_LEVEL * indeksinin özelliklerinin tanımlayıcıları kullanılır.

Her düzeyin açıklaması, yalnızca INDICATOR_LEVELTEXT gösterge özelliğinin tanımlayıcısı olan IndicatorSetString() işlevi kullanılarak ayarlanır (ENUM_CUSTOMIND_PROPERTY_STRING numaralandırması). Düzey açıklaması, soldaki düzeyin hemen üzerine yerleştirilir. 

Göstergenin "Özellikler" penceresinden ("Düzeyler" sekmesi) yatay düzeyler ekleyebilir/kaldırabilir, değerleri, her düzeyin açıklamasını ve düzey oluşturma stilini değiştirebilirsiniz.

Yapılandırmalar: Ayrı gösterge penceresinin (10) ölçeğinin limitleri

Yapılandırmanın iki olası yolu vardır:

1) #property önişlemci yönergesi kullanılarak (Bu şekilde uygulanır).

//--- indicator min/max
#property indicator_minimum -100         // minimum
#property indicator_maximum 100          // maximum

2) IndicatorSetDouble() işlevini, INDICATOR_MINIMUM ve INDICATOR_MAXIMUM (ENUM_CUSTOMIND_PROPERTY_DOUBLE numaralandırması) göstergelerinin özelliklerine ilişkin tanımlayıcılar kullanılarak.

//--- indicator scale
   IndicatorSetDouble(INDICATOR_MINIMUM,-100); // minimum
   IndicatorSetDouble(INDICATOR_MAXIMUM,100);  // maximum

Kod, Init olay işleyicisinin OnInit() işlevinde yazılır. Ayrı bir gösterge penceresinin ölçeğinin alt ve üst sınırları, göstergenin "Özellikler" penceresinden ("Ölçek" sekmesi) değiştirilebilir.

Yapılandırmalar (değişiklikler): Gösterge arabellekleri (3-5)

"Gösterge dizisi -> gösterge arabelleği -> grafik çizimi" yapılandırmasındaki değişiklikler:

1. (yapılandırma 3'te) Arabellek sayısı artırıldı:

#property indicator_buffers 10           // the number of buffers for the calculation of the indicator

2. (yapılandırma 4'te) q-dönem Momentumunun mutlak değerini hesaplamak için gereken gösterge dizileri eklendi:

double AbsMtmBuffer[];      // q-period Momentum (absolute value)
double EMA_AbsMtmBuffer[];  // r-period 1st EMA (absolute value)
double DEMA_AbsMtmBuffer[]; // s-period 2nd EMA (absolute value)
double TEMA_AbsMtmBuffer[]; // u-period 3rd EMA (absolute value)

MainBuffer[] dizisinin amacı değiştirildi:

double MainBuffer[];        // TSI (graphic plot #0)
double TEMA_MtmBuffer[];    // u-period 3rd EMA

3. (yapılandırma 5'te) "gösterge dizisi -> gösterge arabelleği -> grafik çizimi" bağlantısı değiştirildi:

   // graphic plot #0
   SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);                // TSI
   // intermediate buffers; (not used for plot)
   SetIndexBuffer(1,PriceBuffer,INDICATOR_CALCULATIONS);       // price array
   SetIndexBuffer(2,MtmBuffer,INDICATOR_CALCULATIONS);         // q-period Momentum
   SetIndexBuffer(3,EMA_MtmBuffer,INDICATOR_CALCULATIONS);     // r-period 1st EMA
   SetIndexBuffer(4,DEMA_MtmBuffer,INDICATOR_CALCULATIONS);    // s-period 2nd EMA
   SetIndexBuffer(5,TEMA_MtmBuffer,INDICATOR_CALCULATIONS);    // u-period 3rd EMA
   SetIndexBuffer(6,AbsMtmBuffer,INDICATOR_CALCULATIONS);      // q-period моментум (absolute value)
   SetIndexBuffer(7,EMA_AbsMtmBuffer,INDICATOR_CALCULATIONS);  // r-period 1st EMA (absolute value)
   SetIndexBuffer(8,DEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA (absolute value)
   SetIndexBuffer(9,TEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA (absolute value)


1.4.2.2. TSI göstergesinin (fiyat,q,r,s,u) hesaplanması ("Blau_Mtm.mq5" kodundaki değişiklikler ve eklemeler)

Hesaplama: Algoritma

TSI (fiyat,q,r,s,u) göstergesini hesaplama algoritması:

  1. Göstergeyi hesaplamak için yeterli veri olup olmadığını kontrol edin.
  2. Belirtilen fiyat türüne göre fiyatlar dizisini hesaplama - PriceBuffer[] dizisinin oluşumu.
  3. q-dönem Momentumunu hesaplama işlemine başlamak/devam etmek için indeks çubuğunu belirleme.
  4. q-dönem Momentumunu ve mutlak değerini hesaplama - MtmBuffer[] ve AbsMtmBuffer[] dizilerini doldurma.
  5. EMA yöntemiyle ilk yumuşatma (r dönemi) - EMA_MtmBuffer[] ve EMA_AbsMtmBuffer[] dizilerini doldurma.
  6. EMA yöntemiyle ikinci yumuşatma (s dönemi) - DEMA_MtmBuffer[] ve DEMA_AbsMtmBuffer[] dizilerini doldurma.
  7. EMA yöntemiyle üçüncü yumuşatma (u dönemi) - TEMA_MtmBuffer[] ve TEMA_AbsMtmBuffer[] dizilerini doldurma.
  8. Gerçek güç indeksini hesaplama işlemine başlamak/devam etmek için indeks çubuğunu belirleme.
  9. Gerçek güç indeksini hesaplama - MainBuffer[] dizisini doldurma - grafik çizimi #0 için değerlerihesaplama.

Algoritmadaki değişikliklerin özü (kısaca) şu şekildedir:

  • a) (bkz. paragraf 4-7) q-dönem momentumunun hesaplanmasına paralel olarak (diziler grubu * MtmtBuffer[]) q-dönem Momentumunun mutlak değerinin hesaplanması (*AbsMtmBuffer[] diziler grubu) gerçekleştirildi,
  • b) (bkz. Bölüm 8-9) TSE hesaplaması eklendi.
Hesaplama: q-dönem Momentumunun mutlak değeri (3-7)
//--- calculation of  mtm and |mtm|
   if(prev_calculated==0)      // at first call
     {
      pos=begin1;              // calc all values starting from begin1
      for(i=0;i<pos;i++)       // pos
        {
         MtmBuffer[i]=0.0;     // zero values
         AbsMtmBuffer[i]=0.0;  //
        }
     }
   else pos=prev_calculated-1; // overwise calc only last bar
   // calculate MtmBuffer[] and AbsMtmBuffer[]
   for(i=pos;i<rates_total;i++)
     {
      MtmBuffer[i]=PriceBuffer[i]-PriceBuffer[i-(q-1)];
      AbsMtmBuffer[i]=MathAbs(MtmBuffer[i]);
     }
//--- EMA smoothing
   // r-period 1st EMA
   ExponentialMAOnBufferWB(
                           rates_total,     // rates total
                           prev_calculated, // bars, calculated at previous call
                           begin1,          // starting index
                           r,               // smoothing period
                           MtmBuffer,       // input array
                           EMA_MtmBuffer    // output array
                          );
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin1,r,AbsMtmBuffer,EMA_AbsMtmBuffer);
   // s-period 2nd EMA
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_MtmBuffer,DEMA_MtmBuffer);
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_AbsMtmBuffer,DEMA_AbsMtmBuffer);
   // u-period 3rd EMA
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_MtmBuffer,TEMA_MtmBuffer);
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_AbsMtmBuffer,TEMA_AbsMtmBuffer);

Hesaplama: Gerçek Güç İndeksi (8-9)

//--- TSI calculation (graphic plot #0)
   if(prev_calculated==0)      // at first call
     {
      pos=begin4;              // calc all values starting from begin4
      for(i=0;i<pos;i++)       // 
         MainBuffer[i]=0.0;    // zero values
     }
   else pos=prev_calculated-1; // overwise calc only last bar
   // calculation of MainBuffer[]
   for(i=pos;i<rates_total;i++)
     {
      value1=100*TEMA_MtmBuffer[i];
      value2=TEMA_AbsMtmBuffer[i];
      MainBuffer[i]=(value2>0)?value1/value2:0;
     }

1.4.3. "Blau_Ergodic.mq5" - Ergodik(fiyat,q,r,s,u,ul) - Ergodik Osilatör

Ergodik göstergenin (fiyat,q,r,s,u,ul) kodu, "Blau_TSI.mq5" kodundaki değişikliklere dayanmaktadır:

//+------------------------------------------------------------------+
//|                                                 Blau_Ergodic.mq5 |
//|                        Copyright 2011, MetaQuotes Software Corp. |
//|                                              https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2011, MetaQuotes Software Corp." // copyright
#property link      "https://www.mql5.com"                       // URL
#property description "Ergodic Oscillator (William Blau)"       // description
#include <WilliamBlau.mqh>                 // include file (terminal_data_folder\MQL5\Include)
//--- indicator settings
#property indicator_separate_window        // indicator in a separate window
#property indicator_buffers 11             // number of buffers
#property indicator_plots   2              // indicator plots
//--- horizontal levels
#property indicator_level1 -25             // level #0
#property indicator_level2 25              // level #1
#property indicator_levelcolor Silver      // level color
#property indicator_levelstyle STYLE_DOT   // level style
#property indicator_levelwidth 1           // level width
//--- min/max
#property indicator_minimum -100           // minimum
#property indicator_maximum 100            // maximum
//--- graphic plot #0 (Main)
#property indicator_label1  "Ergodic"      // graphic plot #0
#property indicator_type1   DRAW_HISTOGRAM // draw as a histogram
#property indicator_color1  Silver         // histogram color
#property indicator_style1  STYLE_SOLID    // line style
#property indicator_width1  2              // line width
//--- graphic plot #1 (Signal Line)
#property indicator_label2  "Signal"       // graphic plot #1
#property indicator_type2   DRAW_LINE      // draw as a line
#property indicator_color2  Red            // line color
#property indicator_style2  STYLE_SOLID    // line style
#property indicator_width2  1              // line width
//--- input parameters
input int    q=2;  // q - period of Momentum
input int    r=20; // r - 1st EMA, applied to Momentum
input int    s=5;  // s - 2nd EMA, applied to the 1st smoothing
input int    u=3;  // u - 3rd EMA, applied to the 2nd smoothing
input int    ul=3; // ul- period of a Signal Line
input ENUM_APPLIED_PRICE AppliedPrice=PRICE_CLOSE; // AppliedPrice - price type
//--- dynamic arrays
double MainBuffer[];        // Ergodic (graphic plot #0)
double SignalBuffer[];      // Signal line: ul-period EMA of Ergodic (graphic plot #1)
double PriceBuffer[];       // price array
double MtmBuffer[];         // q-period Momentum
double EMA_MtmBuffer[];     // r-period of the 1st EMA
double DEMA_MtmBuffer[];    // s-period of the 2nd EMA
double TEMA_MtmBuffer[];    // u-period of the 3rd EMA
double AbsMtmBuffer[];      // q-period Momentum (absolute value)
double EMA_AbsMtmBuffer[];  // r-period of the 1st EMA (absolute value)
double DEMA_AbsMtmBuffer[]; // s-period of the 2nd EMA (absolute value)
double TEMA_AbsMtmBuffer[]; // u-period of the 3rd EMA (absolute value)
//--- global variables
int    begin1, begin2, begin3, begin4, begin5; // starting indexes
int    rates_total_min; // rates total min
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers
   // graphic plot #0
   SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);                 // Ergodic
   // graphic plot #1
   SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);               // signal line: ul-period EMA of Ergodic
   // buffers for intermediate calculations
   SetIndexBuffer(2,PriceBuffer,INDICATOR_CALCULATIONS);        // price array
   SetIndexBuffer(3,MtmBuffer,INDICATOR_CALCULATIONS);          // q-period моментум
   SetIndexBuffer(4,EMA_MtmBuffer,INDICATOR_CALCULATIONS);      // r-period of the 1st EMA
   SetIndexBuffer(5,DEMA_MtmBuffer,INDICATOR_CALCULATIONS);     // s-period of the 2nd EMA
   SetIndexBuffer(6,TEMA_MtmBuffer,INDICATOR_CALCULATIONS);     // u-period of the 3rd EMA
   SetIndexBuffer(7,AbsMtmBuffer,INDICATOR_CALCULATIONS);       // q-period Momentum (absolute value)
   SetIndexBuffer(8,EMA_AbsMtmBuffer,INDICATOR_CALCULATIONS);   // r-period of the 1st EMA (absolute value)
   SetIndexBuffer(9,DEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS);  // s-period of the 2nd EMA (absolute value)
   SetIndexBuffer(10,TEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // u-period of the 3rd EMA (absolute value)
/*
//--- graphic plot #0 (Main)
   PlotIndexSetString(0,PLOT_LABEL,"Ergodic");           // label of graphic plot #0
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_HISTOGRAM); // draw as a histogram
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,Silver);        // line color
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_SOLID);   // line style
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,2);             // line width
//--- graphic plot #1 (Signal Line)
   PlotIndexSetString(1,PLOT_LABEL,"Signal");            // label of graphic plot #1
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);      // draw as a line
   PlotIndexSetInteger(1,PLOT_LINE_COLOR,Red);           // line color
   PlotIndexSetInteger(1,PLOT_LINE_STYLE,STYLE_SOLID);   // line style
   PlotIndexSetInteger(1,PLOT_LINE_WIDTH,1);             // line width
*/
//--- precision
   IndicatorSetInteger(INDICATOR_DIGITS,2);
/*
//--- horizontal levels
   IndicatorSetInteger(INDICATOR_LEVELS,2);                // number of indicator levels
   IndicatorSetDouble(INDICATOR_LEVELVALUE,0,-25);         // level #0
   IndicatorSetDouble(INDICATOR_LEVELVALUE,1,25);          // level #1
   IndicatorSetInteger(INDICATOR_LEVELCOLOR,Silver);       // level color
   IndicatorSetInteger(INDICATOR_LEVELSTYLE,STYLE_DOT);    // level style
   IndicatorSetInteger(INDICATOR_LEVELWIDTH,1);            // level width
   IndicatorSetString(INDICATOR_LEVELTEXT,0,"Oversold");   // level #0 "Oversold"
   IndicatorSetString(INDICATOR_LEVELTEXT,1,"Overbought"); // level #1 "Overbought"
//--- min/max values
   IndicatorSetDouble(INDICATOR_MINIMUM,-100); // min
   IndicatorSetDouble(INDICATOR_MAXIMUM,100);  // max
*/
//---
   begin1=q-1;         //                                    - MtmBuffer[], AbsMtmBuffer[]
   begin2=begin1+r-1;  // or =(q-1)+(r-1)                    - EMA_...[]
   begin3=begin2+s-1;  // or =(q-1)+(r-1)+(s-1)              - DEMA_...[]
   begin4=begin3+u-1;  // or =(q-1)+(r-1)+(s-1)+(u-1)        - TEMA_...[], MainBuffer[]
   begin5=begin4+ul-1; // or =(q-1)+(r-1)+(s-1)+(u-1)+(ul-1) - SignalBuffer[]
   //
   rates_total_min=begin5+1; // rates total min
//--- starting bar index for plot #0
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,begin4);
//--- starting bar index for plot #1
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,begin5);
//--- short indicator name
   string shortname=PriceName(AppliedPrice)+","+string(q)+","+string(r)+","+string(s)+","+string(u)+","+string(ul);
   IndicatorSetString(INDICATOR_SHORTNAME,"Blau_Ergodic("+shortname+")");
//--- OnInit done
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(
                const int rates_total,     // rates total
                const int prev_calculated, // bars, calculated at previous call
                const datetime &Time[],    // Time
                const double &Open[],      // Open
                const double &High[],      // High
                const double &Low[],       // Low
                const double &Close[],     // Close
                const long &TickVolume[],  // Tick Volume
                const long &Volume[],      // Real Volume
                const int &Spread[]        // Spread
               )
  {
   int i,pos;
   double value1,value2;
//--- rates total
   if(rates_total<rates_total_min) return(0);
//--- calculation of PriceBuffer[]
   CalculatePriceBuffer(
                        AppliedPrice,        // price type
                        rates_total,         // rates total
                        prev_calculated,     // bars, calculated at the previous call
                        Open,High,Low,Close, // Open[], High[], Low[], Close[]
                        PriceBuffer          // price array
                       );
//--- calculation of mtm and |mtm|
   if(prev_calculated==0)      // at first call
     {
      pos=begin1;              // starting from begin1
      for(i=0;i<pos;i++)       // pos
        {
         MtmBuffer[i]=0.0;     // zero values
         AbsMtmBuffer[i]=0.0;  //
        }
     }
   else pos=prev_calculated-1; // overwise calc only last bar
   // calculate MtmBuffer[] and AbsMtmBuffer[]
   for(i=pos;i<rates_total;i++)
     {
      MtmBuffer[i]=PriceBuffer[i]-PriceBuffer[i-(q-1)];
      AbsMtmBuffer[i]=MathAbs(MtmBuffer[i]);
     }
//--- EMA smoothing
   // r-period of the 1st EMA
   ExponentialMAOnBufferWB(
                           rates_total,     // rates total
                           prev_calculated, // bars, calculated at previous call
                           begin1,          // starting index
                           r,               // smoothing period
                           MtmBuffer,       // input array
                           EMA_MtmBuffer    // output array
                          );
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin1,r,AbsMtmBuffer,EMA_AbsMtmBuffer);
   // s-period of 2nd EMA
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_MtmBuffer,DEMA_MtmBuffer);
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin2,s,EMA_AbsMtmBuffer,DEMA_AbsMtmBuffer);
   // u-period 3rd EMA
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_MtmBuffer,TEMA_MtmBuffer);
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin3,u,DEMA_AbsMtmBuffer,TEMA_AbsMtmBuffer);
//--- calculation of Ergodic (graphic plot #0)
   if(prev_calculated==0)      // at first call
     {
      pos=begin4;              // starting from begin4
      for(i=0;i<pos;i++)       // pos
         MainBuffer[i]=0.0;    // zero values
     }
   else pos=prev_calculated-1; // overwise calculate only last bar
   // calculation of MainBuffer[]
   for(i=pos;i<rates_total;i++)
     {
      value1=100*TEMA_MtmBuffer[i];
      value2=TEMA_AbsMtmBuffer[i];
      MainBuffer[i]=(value2>0)?value1/value2:0;
     }
//--- calculation of Signal Line (graphic plot #1)
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin4,ul,MainBuffer,SignalBuffer);
//--- OnCalculate done. Return value of prev_calculated for next call
   return(rates_total);
  }
//+------------------------------------------------------------------+

Yalnızca "Blau_TSI.mq5" kodundaki değişiklikleri ve eklemeleri ayrıntılı olarak ele alalım.

1.4.3.1. Ergodik göstergenin (fiyat,q,r,s,u,ul) yapılandırmaları ("Blau_TSI.mq5" kodundaki değişiklikler ve eklemeler)

Gösterge ayarları (genel olarak)

Ergodik göstergenin (fiyat,q,r,s,u,ul) yapılandırmaları, TSI göstergesinin (fiyat,q,r,s,u) yapılandırmalarından farklıdır. (Bkz. Şekil 1.9):

  1. Göstergelerin görüntüleneceği pencereyi belirtin (değişiklik yok)
  2. Grafik çizimlerinin sayısını belirtin (bir grafik çizimi eklendi)
  3. Gösterge arabelleklerinin sayısını belirtin (arabellek sayısı arttı)
  4. Gösterge dizilerinin bildirimi (diziye eklendi)
  5. Bir bağlantı kurun: gösterge dizisi -> gösterge arabelleği -> grafik çizimi (yeniden yapılandırma.)
  6. Her bir grafik çiziminin özelliklerini tanımlayın (özellikler değiştirildi, bir grafik çizim eklendi.)
  7. Gösterge değerlerinin görüntülenme duyarlılığını belirtin ​​(değişiklik yok.)
  8. Her bir grafik yapısı için, grafik çiziminde göstermeden ilk çubukların sayısını belirtin (bir grafik çizimi eklendi.)
  9. Yatay düzeyleri ayarlayın ve her bir yatay düzeyin özelliklerini tanımlayın (değişiklik yok.)
  10. Gösterge penceresinin ayrı ölçeğinin limitini ayarlayın (değişiklik yok.)
  11. Kısa gösterge adını belirtin (ad değiştirildi.)

Şek. 1.9. Ergodik gösterge (fiyat,q,r,s,u,ul)

Şek. 1.9. Ergodik gösterge (fiyat,q,r,s,u,ul)


Yapılandırmalar (değişiklikler)

"Blau_TSI.mq5" kodu aşağıdaki şekillerde değiştirilmiştir.

1. mql5-programının kısa açıklaması değiştirildi:

#property description "Ergodic Oscillator (William Blau)"       // description

2. Bir giriş parametresi eklendi:

input int    ul=3; // ul- period of a Signal Line

3. (yapılandırma 11'de) göstergenin kısa adında değişiklik yapıldı:

//--- short indicator name
   string shortname=PriceName(AppliedPrice)+","+string(q)+","+string(r)+","+string(s)+","+string(u)+","+string(ul);
   IndicatorSetString(INDICATOR_SHORTNAME,"Blau_Ergodic("+shortname+")");
Yapılandırmalar (değişiklikler): Grafik çizimleri (2, 6)

1. (yapılandırma 2'de) Bir grafik çizimi daha eklendi (Sinyal Çizgisi):

#property indicator_plots   2              // indicator plots

2. (yapılandırma 6'da) a) İlk grafik çizimi #0 "Ergodik"in özellikleri değiştirildi.

Önceden, çizgiyi görüntülemenin bir yolu olarak (DRAW_LINE tanımlayıcısını) kullanıyorduk; şimdi (ENUM_DRAW_TYPE numaralandırmasının sıfır çizgisinden DRAW_HISTOGRAM) bir histogram kullanıyoruz.)

Çizgileri ve çizgi genişliğini görüntüleme rengi değiştirildi:

//--- graphic plot #0 (Main)
#property indicator_label1  "Ergodic"      // graphic plot #0
#property indicator_type1   DRAW_HISTOGRAM // draw as a histogram
#property indicator_color1  Silver         // histogram color
#property indicator_style1  STYLE_SOLID    // line style
#property indicator_width1  2              // line width

b) Grafik çizimi #1 "Sinyal" (Sinyal Çizgisi) eklendi:

//--- graphic plot #1 (Signal Line)
#property indicator_label2  "Signal"       // graphic plot #1
#property indicator_type2   DRAW_LINE      // draw as a line
#property indicator_color2  Red            // line color
#property indicator_style2  STYLE_SOLID    // line style
#property indicator_width2  1              // line width
Yapılandırmalar (değişiklikler): Gösterge arabellekleri (3-5)

"Gösterge dizisi -> gösterge arabelleği -> grafik yapısı" yapılandırmasındaki değişiklikler:

1. (yapılandırma 3'te) Arabellek sayısı artırıldı:

#property indicator_buffers 11             // number of buffers

2. (yapılandırma 4'te) Sinyal çizgisi değerlerini hesaplamak ve işlemek için gerekli olan bir gösterge dizisi eklendi:

double SignalBuffer[];      // Signal line: ul-period EMA of Ergodic (graphic plot #1)

3. (yapılandırma 5'te) "gösterge dizisi -> gösterge arabelleği -> grafik yapısı" ilişkisi değiştirildi:

//--- indicator buffers
   // graphic plot #0
   SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);                 // Ergodic
   // graphic plot #1
   SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);               // signal line: ul-period EMA of Ergodic
   // buffers for intermediate calculations
   SetIndexBuffer(2,PriceBuffer,INDICATOR_CALCULATIONS);        // price array
   SetIndexBuffer(3,MtmBuffer,INDICATOR_CALCULATIONS);          // q-period моментум
   SetIndexBuffer(4,EMA_MtmBuffer,INDICATOR_CALCULATIONS);      // r-period of the 1st EMA
   SetIndexBuffer(5,DEMA_MtmBuffer,INDICATOR_CALCULATIONS);     // s-period of the 2nd EMA
   SetIndexBuffer(6,TEMA_MtmBuffer,INDICATOR_CALCULATIONS);     // u-period of the 3rd EMA
   SetIndexBuffer(7,AbsMtmBuffer,INDICATOR_CALCULATIONS);       // q-period Momentum (absolute value)
   SetIndexBuffer(8,EMA_AbsMtmBuffer,INDICATOR_CALCULATIONS);   // r-period of the 1st EMA (absolute value)
   SetIndexBuffer(9,DEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS);  // s-period of the 2nd EMA (absolute value)
   SetIndexBuffer(10,TEMA_AbsMtmBuffer,INDICATOR_CALCULATIONS); // u-period of the 3rd EMA (absolute value)
Ayarlar: Oluşturulmadan ilk çubukların sayısı (8)
  • #0 "Ergodik" grafik çizimi oluşturulmadan ilk çubukların sayısı değiştirilmedi. Hesaplama yöntemi Bölüm 1.4.1.1'de belirtilmiştir.
  • #1 "Sinyal" grafik çizimi oluşturulmadan ilk çubukların sayısını hesaplama yöntemleri aynıdır. SignalBuffer[] dizisi, MainBuffer[] dizisinin (yumuşatma dönemi ul) anlamlı verilerinin yumuşatılmasının sonucudur.

MainBuffer[] dizisinin indekslenmesi 0'dan başladığı ve MainBuffer[] dizisindeki anlamlı veriler (q-1)+(r-1)+(s-1)+(u-1) indeksi ile başladığı için, SignalBuffer[] dizisindeki anlamlı veriler (q-1)+(r-1)+(s-1)+(u-1)+(ul-1) indeksi ile başlar.

Genel begin5 değişkeni bildirildi:

int    begin1, begin2, begin3, begin4, begin5; // starting indexes

Hesaplama (tamamlandı, ayrıca bkz. bölüm 1.4.1.1):

//---
   begin1=q-1;         //                                    - MtmBuffer[], AbsMtmBuffer[]
   begin2=begin1+r-1;  // or =(q-1)+(r-1)                    - EMA_...[]
   begin3=begin2+s-1;  // or =(q-1)+(r-1)+(s-1)              - DEMA_...[]
   begin4=begin3+u-1;  // or =(q-1)+(r-1)+(s-1)+(u-1)        - TEMA_...[], MainBuffer[]
   begin5=begin4+ul-1; // or =(q-1)+(r-1)+(s-1)+(u-1)+(ul-1) - SignalBuffer[]
   //
   rates_total_min=begin5+1; // rates total min
//--- starting bar index for plot #0
   PlotIndexSetInteger(0,PLOT_DRAW_BEGIN,begin4);
//--- starting bar index for plot #1
   PlotIndexSetInteger(1,PLOT_DRAW_BEGIN,begin5);


1.4.3.2. Ergodik göstergeyi (fiyat,q,r,s,u,ul) hesaplama ("Blau_TSI.mq5" koduna yapılan değişiklikler ve eklemeler)

Hesaplama: Algoritma

Ergodik göstergeyi (fiyat,q,r,s,ul) hesaplama algoritması:

  1. Göstergeyi hesaplamak için yeterli veri olup olmadığını kontrol edin.
  2. Belirtilen fiyat türüne göre fiyatlar dizisini hesaplama - PriceBuffer[] dizisini doldurma.
  3. q-dönem Momentumunu hesaplama işlemine başlamak/devam etmek için indeks çubuğunu belirleme.
  4. q-dönem momentumunu ve mutlak değerini hesaplama - MtmBuffer[] ve AbsMtmBuffer[] dizilerini doldurma.
  5. EMA yöntemiyle ilk yumuşatma (r dönemi) - EMA_MtmBuffer[] ve EMA_AbsMtmBuffer[] dizilerini doldurma.
  6. EMA yöntemiyle ikinci yumuşatma (s dönemi) - DEMA_MtmBuffer[] ve DEMA_AbsMtmBuffer[] dizilerini doldurma.
  7. EMA yöntemiyle üçüncü yumuşatma (u dönemi) - TEMA_MtmBuffer[] ve TEMA_AbsMtmBuffer[] dizilerini doldurma.
  8. Gerçek Güç İndeksini hesaplama işlemine başlamak/devam etmek için indeks çubuğunu belirleme.
  9. Ergodik'i (Gerçek Güç İndeksi) hesaplama - MainBuffer[] dizisini doldurma - #0 grafik çizimini oluşturmak içindeğerleri hesaplama.
  10. Sinyal çizgisini hesaplama - EMA yöntemiyle Ergodik'i yumuşatma (ul dönemi) - SignalBuffer[] dizisini doldurma - grafik çizimi #1'i oluşturmak için değerleri hesaplama.

Algoritmadaki değişikliklerin özü (kısaca) a) (bkz. Bölüm 1) gösterge giriş zaman serilerinin minimum boyutu için gereklilik değiştirildi, b) (bkz. paragraf 10) Sinyal Çizgisinin hesaplanması değiştirildi.

Hesaplama (değişiklik): Göstergeyi hesaplamak için yeterli veri olup olmadığını kontrol edin (1)

Algoritmada herhangi bir değişiklik yoktur:

//--- rates total
   if(rates_total<rates_total_min) return(0);

Genel rates_total_min değişkeninin değerleri değiştirildi (göstergenin giriş zaman serilerinin minimum boyutu, Başlatma olayında OnInit() işlevinde hesaplandı):

   rates_total_min=begin5+1; // the minimum size of the input timeseries of the indicator
Hesaplama: Sinyal çizgisi (10)
//--- calculation of Signal Line (graphic plot #1)
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin4,ul,MainBuffer,SignalBuffer);

2. Stokastik Momentum

Dikkate alınan göstergeler (eke bakınız) iki gruba ayrılmıştır.

I. Stokastik tabanlı göstergeler:

  1. Blau_TStoch.mq5 - Stokastik (q-dönemi Stokastik, yumuşatılmış q-dönemi Stokastik),
  2. Blau_TStochI.mq5 - Stokastik İndeks (normalize edilmiş yumuşatılmış q-dönemi Stokastik);
  3. Blau_TS_Stochastic.mq5 - Stokastik TS-osilatörü (Stokastik indeks tabanlı).

II. Stokastik Momentum tabanlı göstergeler:

  1. Blau_SM.mq5 - Stokastik Momentum (q-dönem Stokastik Momentumu, yumuşatılmış q-dönem Stokastik Momentumu),
  2. Blau_SMI.mq5 - Stokastik Momentum İndeksi (normalize edilmiş yumuşatılmış q-dönem Momentumu),
  3. Blau_SM_Stochastic.mq5 - Stokastik SM-Osilatörü (Stokastik Momentum İndeksi tabanlı).


2.1. Stokastik tabanlı göstergeler

"Analiz/Teknik Göstergeler/Osilatörler/Stokastik Osilatör" bölümündeki "MetaTrader istemci terminali için Kullanım Kılavuzu", Stokastik Osilatörün teknik göstergelerine ait yerleşik istemci terminali MetaTrader 5'in ve teknik analizde kullanım yollarının bir açıklamasını sağlar (ayrıca bkz. iStochastic.)

 

2.1.1. George Lane'in Stokastik Osilatörü

Stokastik, stokastik osilatör (Stokastik, Stokastik Osilatör) - önceki q dönemleri için fiyat dalgalanması ile ilgili olarak fiyatı gösteren bir göstergedir. Göstergenin yazarı ve popüler hale getiren kişi George Lane'dir.

Ayırt Etme:

  • Hızlı Stokastik, bazen %K olarak adlandırılır,
  • Yavaş Stokastik (Sinyal Çizgisi), bazen %D olarak adlandırılır.

Stokastik George Lane formülü:

           price - LL(q)
%K = 100 * -------------
           HH(q) - LL(q)
%D = SMA(%k, ul)

Burada:

  • % K - Hızlı Stokastik,
  • % D - Yavaş Stokastik (Sinyal Çizgisi),
  • fiyat - cari dönemin fiyatı [kapanış],
  • q - Stokastik hesaplamasında kullanılan fiyatlar grafiğinin zaman dilimlerinin sayısı,
  • HH (q) - q dönemi için en yüksek fiyatların önceki q dönemleri için maksimum değeri,
  • LL (q) - q dönemi için en düşük fiyatın önceki q dönemleri için minimum değeri,
  • SMA (% K, ul) - hızlı stokastik'e (% K) uygulanan ul düzeninin basit hareketli ortalaması.

George Lane'in yorumuna göre, temel fikir, fiyat artış trendi (yükseliş trendi) sırasında fiyatın önceki maksimum değerlere yakın durma eğiliminde olmasıdır. Fiyat azalma trendi (düşüş trendi) ile fiyat, önceki minimum değerlere yakın durma eğilimindedir.

 

2.1.2. William Blau'nun Stokastik Osilatörü


Şek. 2.1. William Blau'nun Stokastik tabanlı göstergeleri

Şek. 2.1. William Blau'nun Stokastik tabanlı göstergeleri

 

2.1.2.1. Stokastik


Stokastik - önceki q dönemleri için cari dönemin fiyatından [kapanış] fiyat dalgalanmaları aralığının en düşük noktasına kadar olan mesafedir. q-dönemi stokastiğinin değeri,q-dönemi fiyat dalgalanmaları aralığının en düşük noktasına göre fiyatın ne kadar kaydırıldığını gösterir. q-dönemStokastik değerleri pozitiftir veya sıfıra eşittir.

Şek. 2.2. Stokastiğin Tanımı

Şek. 2.2. Stokastiğin Tanımı

q-dönemi Stokastik formülü:

stoch(price,q) = price - LL(q)

Burada:

  • fiyat - cari dönemin fiyatı [kapanış],
  • q - stokastik hesaplamasında bulunan fiyatlar grafiğinin zaman dilimlerinin sayısı,
  • LL (q) - q dönemi için en düşük fiyatın önceki q dönemleri için minimum değeri.

Yumuşatılmış q-dönemi Stokastik formülü:

TStoch(price,q,r,s,u) = EMA(EMA(EMA( stoch(price,q) ,r),s),u)

Burada:

  • fiyat - [kapanış] fiyatı - fiyat grafiğinin fiyat tabanı,
  • q - Stokastik hesaplamasında kullanılan çubuk sayısı,
  • stok.(fiyat,q)=fiyat-LL(q) - q-dönemi Stokastik,
  • EMA (stok. (fiyat,q),r) - ilk yumuşatma - q-dönem stokastiğine uygulanan r döneminin EMA'sı,
  • EMA (EMA(..., r),s) - ikinci yumuşatma - 1. yumuşatmanın sonucuna uygulanan s döneminin EMA'sı,
  • EMA (EMA (EMA (..., r), s), u) - üçüncü yumuşatma - 2. yumuşatmanın sonucuna uygulanan u döneminin EMA.

TStoch(fiyat,q,r,s,u) - Stokastik. Spesifikasyon

  • Dosya adı: Blau_TStoch.mq5
  • Ad: William Blau'ya göre Stokastik Göstergesi (q-dönemi Stokastik, yumuşatılmış q-dönemi Stokastik).
  • Giriş parametreleri:
    • q - stokastiğin hesaplandığı dönem (varsayılan olarak q = 5),
    • r - Stokastik'e uygulanan 1. EMA dönemi (varsayılan olarak r = 20),
    • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
    • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • AppliedPrice - fiyat türü (varsayılan AppliedPrice=PRICE_CLOSE).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • grafik çiziminin sunumunu değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi).
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse, EMA yumuşatması kullanılmaz,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u-3 +1).

 

2.1.2.2. Stokastik İndeks

Stokastik İndeks göstergesi, normalize edilmiş yumuşatılmış q-dönemi Stokastik'tir.

q-dönemq-dönemi Stokastik'in değerleri, bir yüzde biçimine eşlenir (aralık [0, 100]). Yumuşatılmış q-dönemi Stokastik'in her değeri, q-dönemi fiyat aralığının değeriyle normalize edilir. Normalizasyon, yumuşatılmış normalize edilmiş q-dönemi Stokastik'in değerinin, piyasanın aşırı alım/aşırı satım durumlarının derecesi olarak yorumlanmasına olanak tanır.

Stokastik İndeksin formülü:

                         100 * EMA(EMA(EMA( price-LL(q) ,r),s),u)       100 * TStoch(price,q,r,s,u)
TStochI(price,q,r,s,u) = ---------------------------------------- = ----------------------------------
                            EMA(EMA(EMA( HH(q)-LL(q) ,r),s),u)      EMA(EMA(EMA( HH(q)-LL(q) ,r),s),u)
if EMA(EMA(EMA(HH(q)-LL(q),r),s),u)=0, then TStochI(price,q,r,s,u)=0

Burada:

  • fiyat - [kapanış] fiyatı - fiyat grafiğinin fiyat tabanı,
  • q - Stokastik hesaplamasında kullanılan çubuk sayısı,
  • LL (q) - q dönemi için en düşük fiyatın minimum değeri,
  • HH (q) - q dönemi için en yüksek fiyatın maksimum değeri,
  • stok.(q)=fiyat-LL(q) - q-dönemi Stokastik,
  • TStoch(fiyat,q,r,s,u) - üç kez yumuşatılmış q-dönemi Stokastik,
  • HH(q)-LL(q) - q-dönemi Fiyat Aralığı,
  • EMA (..., r) - ilk yumuşatma - EMA(r), şunlara uygulanır:
    1. q-dönemi Stokastik'e,
    2. q-dönemi Fiyat Aralığı'na,
  • EMA (EMA(..., r),s) - ikinci yumuşatma - 1. yumuşatmanın sonucuna uygulanan EMA(s),
  • EMA (EMA (EMA (..., r), s), u) - üçüncü yumuşatma - 2. yumuşatmanın sonucuna uygulanan EMA(u)'dur.

TStochI(fiyat,q,r,s,u) - Stokastik İndeks. Spesifikasyon

  • Dosya adı: Blau_TStochI.mq5
  • Ad: William Blau'ya göre Stokastik İndeks (normalize edilmiş yumuşatılmış q-dönemi Stokastik).
  • Giriş parametreleri:
    • q - stokastiğin hesaplandığı dönem (varsayılan olarak q = 5),
    • r - Stokastik'e uygulanan 1. EMA dönemi (varsayılan olarak r = 20),
    • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
    • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • AppliedPrice - fiyat türü (varsayılan AppliedPrice=PRICE_CLOSE).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • grafik çizimini oluşturma stilini değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi),
    • (isteğe bağlı) İki düzey (varsayılan olarak 40 ve 60) - bir düzey ekler/kaldırır, düzeyin değerini ve açıklamasını değiştirir, düzeylerin sunum stilini değiştirir ("Düzeyler" sekmesi),
    • ayrı gösterge penceresinin ("Ölçek" sekmesi) ölçeğinin alt (varsayılan olarak 0) ve üst (varsayılan olarak 100) limitlerini değiştirir.
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse karşılık gelen EMA döneminde yumuşatma yapılmayacaktır,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u-3 +1).

 

2.1.2.3. Stokastik Osilatör

Stokastik Osilatörün tanımı:

TS_Stochastic(price,q,r,s,u) = TStochI(price,q,r,s,u)
SignalLine(price,q,r,s,u,ul) = EMA( TS_Stochastic(price,q,r,s,u) ,ul)

Burada:

  • TS_Stochastic() - Hızlı Stokastik, %k - Stokastik İndeksi TStochI(fiyat,q,r,s,u),
  • SignalLine() - Yavaş Stokastik (Sinyal Çizgisi),% d - Hızlı Stokastik'e uygulanan (% k) ul döneminin EMA'sı,
  • ul - EMA sinyal çizgisinin dönemi - William Blau'ya göre, ul değeri son anlamlı (> 1) EMA hızlı stokastik dönemine eşit olmalıdır.

TS_Stochastic(fiyat,q,r,s,u,ul) - Stokastik Osilatör. Spesifikasyon

  • Dosya adı: Blau_TS_Stochastic.mq5
  • Ad: William Blau'ya göre Stokastik Osilatör (Stokastik İndeks tabanlı).
  • Giriş parametreleri:
    • grafik çizimi #0 - Hızlı Stokastik (stokastik indeksi),% k:
      • q - Stokastik'in hesaplandığı dönem (varsayılan olarak q = 5),
      • r - Stokastik'e uygulanan 1. EMA dönemi (varsayılan olarak r = 20),
      • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
      • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • grafik çizimi #1 - Yavaş Stokastik (Sinyal Çizgisi),% d:
      • ul - Hızlı Stokastik'e uygulanan dönem EMA Sinyal Çizgisi (varsayılan olarak ul = 3),
    • AppliedPrice - fiyat türü (varsayılan AppliedPrice=PRICE_CLOSE).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • her grafik çiziminin sunum stilini değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi),
    • iki düzey (varsayılan olarak 40 ve 60) - bir düzey ekler/kaldırır, düzeyin değerini ve açıklamasını değiştirir, düzeylerin sunum stilini değiştirir ("Düzeyler" sekmesi),
    • ayrı gösterge penceresinin ("Ölçek" sekmesi) ölçeğinin alt (varsayılan olarak 0) ve üst (varsayılan olarak 100) limitlerini değiştirir.
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse, EMA yumuşatması kullanılmaz,
    • ul>0. ul = 1 ise, Yavaş Stokastik (Sinyal çizgisi) ve Hızlı Stokastik çizgileri aynıdır,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u + ul-4 +1).

 

2.1.2.4. Süreklilik


William Blau'nun Stokastik Osilatörü, George Lane'in Stokastik Osilatörünü içerir. TS_Stochastic'in (William Blau) MetaTrader 5'te uygulanan standart Stokastik Osilatöre (George Lane) karşılık gelmesi için aşağıdakiler belirtilmelidir:

TS_Stochastic( price=Close, q=KPeriod, r=1, s=1, u=1, ul=DPeriod )
Stochastic( KPeriod=q, DPeriod=ul, Slowing=1, price="Low/High", method="Exponential" )

Şek. 2.3. William Blau'nun Stokastik Osilatörü, George Lane'in Stokastik Osilatörünü içerir

Şek. 2.3. William Blau'nun Stokastik Osilatörü, George Lane'in Stokastik Osilatörünü içerir

 

2.1.2.5. Stokastik Osilatör kodu


TS_Stochastic göstergesi (fiyat,q,r,s,u,ul) örneğinde:

1) Gösterge dizileri, gösterge arabellekleri ve grafik çizimleri arasındaki ilişki:

//--- indicator buffers
   // graphic plot #0
   SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);              // fast Stochastic
   // graphic plot #1
   SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);            // slow Stochastic: ul-period EMA of the fast Stochastic
   // buffers, used for intermediate calculations
   SetIndexBuffer(2,PriceBuffer,INDICATOR_CALCULATIONS);      // price array
   SetIndexBuffer(3,LLBuffer,INDICATOR_CALCULATIONS);         // min value (q bars)
   SetIndexBuffer(4,HHBuffer,INDICATOR_CALCULATIONS);         // max value (q bars)
   SetIndexBuffer(5,StochBuffer,INDICATOR_CALCULATIONS);      // q-period Stochastic
   SetIndexBuffer(6,EMA_StochBuffer,INDICATOR_CALCULATIONS);  // r-period of the 1st EMA
   SetIndexBuffer(7,DEMA_StochBuffer,INDICATOR_CALCULATIONS); // s-period of the 2nd EMA
   SetIndexBuffer(8,TEMA_StochBuffer,INDICATOR_CALCULATIONS); // u-period of the 3rd EMA
   SetIndexBuffer(9,HHLLBuffer,INDICATOR_CALCULATIONS);       // q-period price range
   SetIndexBuffer(10,EMA_HHLLBuffer,INDICATOR_CALCULATIONS);  // r-period of the 1st EMA (price range)
   SetIndexBuffer(11,DEMA_HHLLBuffer,INDICATOR_CALCULATIONS); // s-period of the 2nd EMA (price range)
   SetIndexBuffer(12,TEMA_HHLLBuffer,INDICATOR_CALCULATIONS); // u-period of the 3rd EMA (price range)

2) q-dönemi Stokastik ve q-dönemi Fiyat Aralığı için hesaplama algoritması:

   // calculation of StochBuffer[], HHLLBuffer[], LLBuffer[], HHBuffer[]
   for(i=pos;i<rates_total;i++)
     {
      // LLBuffer[] - search for the minimal price (q bars)
      // HHBuffer[] - search for the maximal price (q bars)
      min=1000000.0;
      max=-1000000.0;
      for(k=i-(q-1);k<=i;k++)
        {
         if(min>Low[k])  min=Low[k];
         if(max<High[k]) max=High[k];
        }
      LLBuffer[i]=min;
      HHBuffer[i]=max;
      // StochBuffer[] - q-period Stochastic
      StochBuffer[i]=PriceBuffer[i]-LLBuffer[i];
      // HHLLBuffer[] - q-period price range
      HHLLBuffer[i]=HHBuffer[i]-LLBuffer[i];
     }


2.2. Stokastik Momentum tabanlı göstergeler

Şek. 2.4. William Blau'nun Stokastik Momentum tabanlı göstergeleri

Şek. 2.4. William Blau'nun Stokastik Momentum tabanlı göstergeleri

 

2.2.1. Stokastik Momentum

Stokastik Momentum (Stokastik Momentum, SM) - cari dönemin fiyatından önceki q dönemleri boyunca fiyat aralığının ortasına kadar olan mesafedir. q-dönemi Stokastik Momentum değeri fiyatın fiyat aralığındaki pozisyonunu gösterir.

q-dönemi stokastik momentumunun işareti q-dönemi fiyat aralığının ortasına göre fiyat pozisyonunu gösterir: Pozitif Stokastik Momentum'da fiyat orta noktanın üzerinde, negatif Stokastik Momentum'da fiyat orta noktanın altındadır.

Şek. 2.5. Stokastik Momentumun tanımı

Şek. 2.5. Stokastik Momentumun tanımı

q-dönemi Stokastik Momentum formülü:

sm(price,q) = price - 1/2 * [LL(q) + HH(q)]

Burada:

  • fiyat - cari dönemin fiyatı [kapanış],
  • q - Stokastik Momentumun hesaplanmasında kullanılan çubuk sayısı,
  • LL (q) - q dönemi için en düşük fiyatın minimum değeri,
  • HH (q) - q dönemi için en yüksek fiyatların maksimum değeri,
  • 1/2* [LL(q)+HH (q)] - q-dönemi fiyat aralığının ortasıdır.

Yumuşatılmış q-dönemi Stokastik Momentum formülü:

SM(price,q,r,s,u) = EMA(EMA(EMA( sm(price,q) ,r),s),u)

Burada:

  • fiyat - [kapanış] fiyatı - fiyat grafiğinin fiyat tabanı,
  • q - Stokastik momentumun hesaplanmasında kullanılan çubuk sayısı,
  • sm(fiyat,q)=fiyat-1/2*[LL(q)+HH(q)] - q-dönemi Stokastik Momentumu,
  • EMA (sm(fiyat,q),r) - ilk yumuşatma - q-dönemi Stokastik Momentumu'na uygulanan EMA(r),
  • EMA (EMA(..., r),s) - ikinci yumuşatma - 1. yumuşatmanın sonucuna uygulanan EMA(s),
  • EMA(EMA(EMA(sm(q),r),s),u) - üçüncü yumuşatma - 2. yumuşatmanın sonucuna uygulanan EMA(u)'dur.


2.2.1.2. SM(fiyat,q,r,s,u) - Stokastik Momentum. Spesifikasyon

  • Dosya adı: Blau_SM.mq5
  • Ad: William Blau'ya göre Stokastik Momentum Göstergesi (q-dönemi stokastik momentumu, yumuşatılmış q-dönemi stokastik momentumu).
  • Giriş parametreleri:
    • q - stokastik momentumun hesaplandığı dönem (varsayılan olarak q = 5),
    • r - Stokastik Momentuma uygulanan 1. EMA dönemi (varsayılan olarak r = 20),
    • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
    • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • AppliedPrice - fiyat türü (varsayılan AppliedPrice=PRICE_CLOSE).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • grafik çiziminin sunumunu değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi).
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse, EMA yumuşatması kullanılmaz,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u-3 +1).

 

2.2.2. Stokastik Momentum İndeksi

Stokastik Momentum İndeksi (SMI) - normalize edilmiş stokastik oranın bir göstergesidir (normalize edilmiş yumuşatılmış q-dönemi stokastik momentumu). q-dönemyumuşatılmış Stokastik Momentum değerleri yüzde biçiminde verilir (görüntüleme aralığı [-100, 100]).

Yumuşatılmış q-dönemi Stokastik Momentumu'nun her değeri, q-dönemi fiyat dalgalanmaları aralığının yarısının değeriyle normalize edilir. Normalizasyon , SMI değerinin piyasanın aşırı alım düzeyi (pozitif değer) veya aşırı satım düzeyi (negatif) olarak yorumlanmasını sağlar.

Stokastik Momentum İndeksinin formülü:

                     100 * EMA(EMA(EMA( price-1/2*[LL(q)+HH(q)] ,r),s),u)           100 * SM(price,q,r,s,u)
SMI(price,q,r,s,u) = ---------------------------------------------------- = ----------------------------------------
                           EMA(EMA(EMA( 1/2*[HH(q)-LL(q)] ,r),s),u)         EMA(EMA(EMA( 1/2*[HH(q)-LL(q)] ,r),s),u)
if EMA(EMA(EMA(1/2*[HH(q)-LL(q)],r),s),u)=0, then SMI(price,q,r,s,u)=0

Burada:

  • fiyat - [kapanış] fiyatı - fiyat grafiğinin fiyat tabanı,
  • LL (q) - q dönemi için en düşük fiyatın minimum değeri,
  • HH (q) - q dönemi için en yüksek fiyatların maksimum değeri,
  • sm(fiyat,q)=fiyat-1/2*[LL(q)+HH(q)] - q-dönemi Stokastik Momentumu,
  • SM(fiyat,q,r,s,u) - üç kez yumuşatılmış q-dönemi Stokastik Momentumu,
  • HH(q)-LL(q) - q-dönem fiyat aralığı,
  • 1/2* [LL (q)+HH(q)] - q-dönemi fiyat aralığının ortası,
  • 1/2*[HH(q)-LL(q)] - fiyat aralığının q-döneminin yarısı,
  • EMA (..., r) - ilk yumuşatma - EMA(r), şunlara uygulanır:
    1) q-dönemi Stokastik Momentumu
    2) q-dönemi Fiyat Aralığının yarısı,
  • EMA (EMA(..., r),s) - ikinci yumuşatma - 1. yumuşatmanın sonucuna uygulanan EMA(s),
  • EMA (EMA (EMA (..., r), s), u) - üçüncü yumuşatma - 2. yumuşatmanın sonucuna uygulanan EMA(u)'dur.


2.2.2.2. SMI(fiyat,q,r,s,u) - Stokastik Momentum İndeksi. Spesifikasyon

  • Dosya adı: Blau_SMI.mq5
  • Ad: William Blau'ya göre Stokastik Momentum İndeksi (normalize edilmiş yumuşatılmış q-dönemi Stokastik Momentumu).
  • Giriş parametreleri:
    • q - Stokastik Momentumun hesaplandığı dönem (varsayılan olarak q = 5),
    • r - Stokastik Momentuma uygulanan 1. EMA dönemi (varsayılan olarak r = 20),
    • s - 1. yumuşatma sonuçlarına uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
    • u - 2. yumuşatma sonuçlarına uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • AppliedPrice - fiyat türü (varsayılan AppliedPrice=PRICE_CLOSE).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • grafik çiziminin sunum stilini değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi),
    • (isteğe bağlı) İki düzey (varsayılan olarak -40 ve +40) - bir düzey ekler/kaldırır, düzeyin değerini ve açıklamasını değiştirir, düzeylerin sunum stilini değiştirir ("Düzeyler" sekmesi),
    • tek gösterge penceresinin ("Ölçek" sekmesi) ölçeğinin alt (varsayılan olarak -100) ve üst (varsayılan olarak 100) sınırlarını değiştirir.
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse karşılık gelen EMA döneminde yumuşatma yapılmayacaktır,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u-3 +1).

 

2.2.3. Stokastik Osilatör

Stokastik Osilatörün tanımı:
SM_Stochastic(price,q,r,s,u) = SMI(price,q,r,s,u)
SignalLine(price,q,r,s,u,ul) = EMA( SM_Stochastic(price,q,r,s,u) ,ul)

Burada:

  • SM_Stochastic() - Stokastik Momentum İndeksi SMI(fiyat,q,r,s,u),
  • SignalLine() - Sinyal Çizgisi - Stokastik Momentum İndeksine uygulanan ul döneminin EMA'sı,
  • ul - EMA sinyal çizgisinin dönemi - William Blau'ya göre, ul değeri, stokastik oranın son anlamlı (>1) EMA indeksinin dönemine eşit olmalıdır.


2.2.3.1. SM_Stochastic(fiyat,q,r,s,u,ul) - Stokastik Osilatör. Spesifikasyon

  • Dosya adı: Blau_SM_Stochastic.mq5
  • Ad: William Blau'ya göre Stokastik Osilatör (Stokastik Momentum tabanlı).
  • Giriş parametreleri:
    • grafik çizimi #0 - Stokastik Momentum İndeksi:
      • q - stokastik momentumun hesaplandığı dönem (varsayılan olarak q = 5),
      • r - Stokastik Momentuma uygulanan 1. EMA dönemi (varsayılan olarak r = 20),
      • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
      • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • grafik çizimi #1 - sinyal çizgisi:
      • ul - stokastik oran indeksi ile ilgili olarak dönem EMA sinyal çizgisi (varsayılan olarak ul = 3),
    • AppliedPrice - fiyat türü (varsayılan AppliedPrice=PRICE_CLOSE).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • her grafik çiziminin sunum stilini değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi),
    • iki düzey (varsayılan olarak -40 ve +40) - bir düzey ekler/kaldırır, düzeyin değerini ve açıklamasını değiştirir, düzeylerin oluşturma stilini değiştirir ("Düzeyler" sekmesi),
    • tek gösterge penceresinin ("Ölçek" sekmesi) ölçeğinin alt (varsayılan olarak -100) ve üst (varsayılan olarak 100) sınırlarını değiştirir.
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse karşılık gelen EMA döneminde yumuşatma yapılmayacaktır,
    • ul>0. ul = 1 ise, sinyal çizgisi stokastik oranın indeksi ile çakışır,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u + ul-4 +1).

 

2.2.4. Stokastik Osilatör kodu

SM_Stochastic (fiyat, q, r, s, u, ul):

1) Gösterge dizileri, gösterge arabellekleri ve grafik çizimleri arasındaki ilişki:

//--- indicator buffers
   // graphic plot #0
   SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);                   // Stochastic Momentum Index
   // graphic plot #1
   SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);                 // Signal Line: ul-period EMA of Stochastic Momentum Index
   // buffers for intermediate calculations (not used for plotting)
   SetIndexBuffer(2,PriceBuffer,INDICATOR_CALCULATIONS);          // price array
   SetIndexBuffer(3,LLBuffer,INDICATOR_CALCULATIONS);             // minimal price value (q bars)
   SetIndexBuffer(4,HHBuffer,INDICATOR_CALCULATIONS);             // maximal price value (q bars)
   SetIndexBuffer(5,SMBuffer,INDICATOR_CALCULATIONS);             // q-period Stochastic Momentum
   SetIndexBuffer(6,EMA_SMBuffer,INDICATOR_CALCULATIONS);         // r-period of the 1st EMA
   SetIndexBuffer(7,DEMA_SMBuffer,INDICATOR_CALCULATIONS);        // s-period of the 2nd EMA
   SetIndexBuffer(8,TEMA_SMBuffer,INDICATOR_CALCULATIONS);        // u-period of the 3rd EMA
   SetIndexBuffer(9,HalfHHLLBuffer,INDICATOR_CALCULATIONS);       // half of price range (q bars)
   SetIndexBuffer(10,EMA_HalfHHLLBuffer,INDICATOR_CALCULATIONS);  // r-period of the 1st EMA (half of price range)
   SetIndexBuffer(11,DEMA_HalfHHLLBuffer,INDICATOR_CALCULATIONS); // s-period of the 2nd EMA (half of price range)
   SetIndexBuffer(12,TEMA_HalfHHLLBuffer,INDICATOR_CALCULATIONS); // u-period of the 3rd EMA (half of price range)

2) q-dönemi Stokastik Momentumunu ve q-dönemi fiyat aralığının yarısını hesaplama algoritması:

//--- calculation of q-period Stochastic Momentum and half of price range (q bars)
   if(prev_calculated==0)       // at first call
     {
      pos=begin1;               // starting from 0
      for(i=0;i<pos;i++)        // pos values
        {
         SMBuffer[i]=0.0;       // zero values
         HalfHHLLBuffer[i]=0.0; //
         LLBuffer[i]=0.0;       //
         HHBuffer[i]=0.0;       //
        }
     }
   else pos=prev_calculated-1;  // overwise calculate only last value
   // calculation of SMBuffer[], HalfHHLLBuffer[], LLBuffer[], HHBuffer[]
   for(i=pos;i<rates_total;i++)
     {
      // calculation of LLBuffer[] - search for the minimal price (q bars)
      // calculation of HHBuffer[] - search for the maximal price (q bars)
      min=1000000.0;
      max=-1000000.0;
      for(k=i-(q-1);k<=i;k++)
        {
         if(min>Low[k])  min=Low[k];
         if(max<High[k]) max=High[k];
        }
      LLBuffer[i]=min;
      HHBuffer[i]=max;
      // calculation of SMBuffer[] - q-period Stochastic Momentum
      SMBuffer[i]=PriceBuffer[i]-0.5*(LLBuffer[i]+HHBuffer[i]);
      // calculation of HalfHHLLBuffer[] - half of price range (q bars)
      HalfHHLLBuffer[i]=0.5*(HHBuffer[i]-LLBuffer[i]);
     }

3. Trendden sapma göstergesi

Dikkate alınan göstergeler (eke bakınız) iki gruba ayrılmıştır.

I. Piyasa trendinden sapma tabanlı göstergeler.

  1. Blau_MDI.mq5- Trendden Ortalama Sapmanın bir göstergesi (ortalama sapma, hareketli ortalama sapması),
  2. Blau_Ergodic_MDI.mq5- Ergodik MDI osilatörü (ortalama sapma tabanlı).

II. Hareketli Ortalamalar Yakınsama/Iraksama tabanlı göstergeler.

  1. Blau_MACD.mq5- Hareketli Ortalamalar Yakınsama/Iraksama (MACD; yumuşatılmış MACD),
  2. Blau_Ergodic_MACD.mq5- Ergodik MACD-Osilatörü (MACD göstergesi tabanlı).


3.1. Piyasa trendlerinden sapma tabanlı göstergeler

Şek. 3.1. William Blau'nun göstergeleri, piyasa trendlerinden bir sapmaya dayanmaktadır

Şek. 3.1. William Blau'nun göstergeleri, piyasa trendlerinden bir sapmaya dayanmaktadır

 

3.1.1. Ortalama Sapma Göstergesi

Trendden ortalama sapma, fiyat ile fiyata uygulanan r döneminin EMA'sı (üstel olarak yumuşatılmış hareketli ortalama) arasındaki mesafedir.

Piyasa geliştirme trendi: Fiyata uygulanan EMA(r), fiyatların yükseliş trendini (üstel artış) veya düşüş trendini (üstel düşüş) belirlemek için kullanılır.

Hareketli ortalama, fiyat eğrisini yumuşatır, ancak hareketli ortalama dönemindeki hafif bir artış, fiyatın tersine döndüğü noktalarda açıkça görülebilen bir gecikmeye yol açar (ayrıca bkz. 1.1.1, Şek. 1.2). Trendden ortalama sapmanın değeri, fiyata uygulanan EMA(r)'ye olan mesafeyi gösterir.

Trendden ortalama sapmanın işareti fiyata uygulanan EMA(r)'ya göre fiyatın pozisyonunu gösterir: Trendden pozitif sapmada fiyat üstelden daha yüksek, trendden negatif sapmada fiyat üstelden daha düşüktür.

Trendden ortalama sapma formülü:

md(price,r) = price - EMA(price,r)

Burada:

  • fiyat - cari dönemin fiyatı,
  • EMA (fiyat,r) - piyasa trendi - fiyata uygulanan r döneminin EMA'sıdır.

"Analizler/Teknik Göstergeler/Trend Göstergeleri" bölümündeki "MetaTrader istemci terminali için Kullanım Kılavuzu"na bakın:

  1. Çift Üstel Hareketli Ortalama, DEMA,
  2. Üçlü Üstel Hareketli Ortalama, TEMA.

Benzer bir indeks Alexander Elder tarafından Ayıların Gücü ve Boğaların Gücü göstergelerinde kullanılmaktadır. "Analiz/Teknik Göstergeler/Osilatörler" bölümündeki "MetaTrader istemci terminali için Kullanım Kılavuzu"na bakın:

  1. Ayıların Gücü;
  2. Boğaların Gücü.

Trendden ortalama sapmanın göstergesi (Ortalama Sapma İndeksi, MDI) - piyasa trendinden yumuşatılmış bir ortalama sapmadır.

Trendden ortalama sapma göstergesinin formülü:

MDI(price,r,s,u) = EMA(EMA( md(price,r) ,s),u) = EMA(EMA( price-EMA(price,r) ,s),u)

Burada:

  • fiyat - [kapanış] fiyatı - fiyat grafiğinin fiyat tabanı,
  • EMA (fiyat, r) - piyasa trendi - fiyata uygulanan EMA(r)'nin ilk yumuşatması,
  • md (fiyat,r) = fiyat-EMA (fiyat,r) - trendden ortalama sapma - fiyatın fiyata uygulanan EMA(r)'den sapması,
  • EMA (md (fiyat, r), s) - ikinci yumuşatma - trendden ortalama sapmaya uygulanan EMA(s),
  • EMA (EMA (md(fiyat,r),s),u) - üçüncü yumuşatma - ikinci yumuşatmanın sonucuna uygulanan EMA(u).


3.1.1.3. MDI(fiyat,r,s,u) - Ortalama Sapma İndeksi. Spesifikasyon

  • Dosya adı: Blau_MDI.mq5
  • Ad: William Blau'ya göre piyasadan ortalama sapmanın göstergesi (ortalama sapma; yumuşatılmış ortalama sapma).
  • Giriş parametreleri:
    • r - fiyata uygulanan 1. EMA dönemi (varsayılan olarak r=20),
    • s - ortalama sapmaya uygulanan 2. EMA dönemi (varsayılan olarak, s = 5),
    • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • AppliedPrice - fiyat türü (varsayılan AppliedPrice=PRICE_CLOSE).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • grafik çiziminin sunumunu değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi).
  • Sınırlamalar:
    • r>1;
    • s>0, u>0. s veya u 1'e eşitse, EMA yumuşatması kullanılmaz,
    • fiyatlar dizisinin minimum boyutu = (r+s+u-3+1).

 

3.1.2. Ergodik MDI-osilatörü

Ergodik MDI-osilatörünün tanımı:
Ergodic_MDI(price,r,s,u) = MDI(price,r,s,u)
SignalLine(price,r,s,u,ul) = EMA( Ergodic_MDI(price,r,s,u) ,ul)

Burada:

  • Ergodic_MDI() - Ergodik - Ortalama Sapma İndeksi MDI(fiyat,r,s,u),
  • SignalLine() -a Sinyal çizgisi - Ergodik'e uygulanan ul döneminin EMA'sı,
  • ul - bir Sinyal çizgisinin EMA dönemi - William Blau'ya göre, ul değeri EMA ergodikinin son anlamlı (>1) dönemine eşit olmalıdır.


3.1.2.2. Ergodic_MDI(fiyat,r,s,u,ul) - Ergodik MDI-osilatörü. Spesifikasyon

  • Dosya adı: Blau_Ergodic_MDI.mq5
  • Ad: William Blau'ya göre Ergodik MDI-osilatörü (Ortalama Sapma İndeksi tabanlı).
  • Giriş parametreleri:
    • grafik çizim #0 - Ergodik (trendden ortalama sapmanın göstergesi):
      • r - fiyata uygulanan 1. EMA dönemi (varsayılan olarak r=20),
      • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
      • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • grafik çizimi #1 - Sinyal Çizgisi:
      • ul - Ergodik'e uygulanan dönem EMA sinyal çizgisi (varsayılan olarak ul = 3),
    • AppliedPrice - fiyat türü (varsayılan AppliedPrice=PRICE_CLOSE).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • her grafik yapısının görüntülenme stilini değiştirir - renk, genişlik, çizgi stili ("Renkler" sekmesi).
  • Sınırlamalar:
    • r>1;
    • s>0, u>0. s veya u 1'e eşitse, EMA yumuşatması kullanılmaz,
    • ul>0. ul = 1 ise, Sinyal çizgisi ve Ergodik çizgiler aynıdır,
    • fiyatlar dizisinin minimum boyutu = (r+s+u+ul-4+1).

 

3.1.3. Ergodik osilatörün kodu

Örnek olarak, Ergodic_MDI göstergesini (fiyat,r,s,u,ul) ele alalım:

1) Gösterge dizileri, gösterge arabellekleri ve grafik çizimleri arasındaki ilişki:

//--- indicator buffers
   // graphic plot #0
   SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);              // ergodic: u-period 3rd EMA
   // graphic plot #1
   SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);            // signal line: ul-period EMA of Ergodic
   // buffers for intermediate calculations; not used for plotting
   SetIndexBuffer(2,PriceBuffer,INDICATOR_CALCULATIONS);     // price array
   SetIndexBuffer(3,EMA_PriceBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA (price)
   SetIndexBuffer(4,MDBuffer,INDICATOR_CALCULATIONS);        // среднее отклонение
   SetIndexBuffer(5,DEMA_MDBuffer,INDICATOR_CALCULATIONS);   // s-period 2nd EMA

2) Ortalama sapmayı hesaplama algoritması:

//--- calculation of the mean deviation
   if(prev_calculated==0)      // at first call
     {
      pos=begin2;              // starting from 0
      for(i=0;i<pos;i++)       // pos data
         MDBuffer[i]=0.0;      // zero values
     }
   else pos=prev_calculated-1; // overwise calculate only last bar
   // r-period 1st EMA: calculation of EMA_PriceBuffer[]
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin1,r,PriceBuffer,EMA_PriceBuffer);
   // calculation of MDBuffer[]
   for(i=pos;i<rates_total;i++)
      MDBuffer[i]=PriceBuffer[i]-EMA_PriceBuffer[i];


3.2. Hareketli Ortalama Yakınsama/Iraksama Tabanlı Göstergeler

Şek. 3.2. William Blau'nun göstergeleri, Hareketli Ortalamalar Yakınsama/Iraksamaya dayanmaktadır

Şek. 3.2. William Blau'nun göstergeleri, Hareketli Ortalamalar Yakınsama/Iraksamaya dayanmaktadır

 

3.2.1. Hareketli Ortalamalar Yakınsama/Iraksama göstergesi

Hareketli Ortalama Yakınsama/Iraksama (Hareketli Ortalama Yakınsama/Iraksama, MACD) - İki üstel olarak yumuşatılmış hareketli ortalama arasındaki farktır: Fiyata uygulanan hızlı EMA(s) ve yavaş EMA(r).

MACD işareti, yavaş EMA(r)'ye göre Hızlı EMA(s)'nin pozisyonunu gösterir: Pozitif bir MACD'de EMA(s) EMA(r)'nin üzerindedir, negatif bir MACD'de EMA(s) EMA(r)'nin altındadır. MACD'nin mutlak değere göre değişimi: Artan bir|MACD| hareketli ortalamalar arasındaki farkı gösterir, azalan bir|MACD| hareketli ortalamaların yakınsamasını gösterir.

Hareketli Ortalama Yakınsama/Iraksama formülü:

macd(price,r,s) = EMA(price,s) - EMA(price,r)
s < r

Burada:

  • fiyat - cari dönemin fiyatı [kapanış],
  • EMA(fiyat,r) - Fiyata uygulanan yavaş EMA(r),
  • EMA(fiyat,s) - Fiyata uygulanan hızlı EMA(s).

MACD göstergesi, hızlı ve yavaş üstel ortalamalar arasındaki ilişkiyi gösterir (hareketli ortalamaların yumuşatılmış yakınsama/ıraksaması).

MACD göstergesinin formülü:

MACD(price,r,s,u) = EMA( macd(price,r,s) ,u) = EMA( EMA(price,s)-EMA(price,r) ,u)
s < r

Burada:

  • fiyat - [kapanış] fiyatı - fiyat grafiğinin fiyatı,
  • EMA(fiyat,r) - ilk yumuşatma - fiyata uygulanan EMA(r)'nin yavaş üstel değeri,
  • EMA(fiyat,s) - ikinci yumuşatma - fiyata uygulanan hızlı EMA(s), s,
  • macd(r,s)=EMA(fiyat,s)-EMA (fiyat,r) - MACD,
  • EMA(macd (r,s),u) - üçüncü yumuşatma - MACD'ye uygulanan EMA(u): Hızlı EMA (fiyat,s) ve yavaş EMA (fiyat,r).

3.2.1.1. MACD(fiyat,r,s,u) - Hareketli Ortalama Yakınsama/Iraksama göstergesi. Spesifikasyon

  • Dosya adı: Blau_MACD.mq5
  • Ad: William Blau'ya göre MACD göstergesi (MACD, yumuşatılmış MACD).
  • Giriş parametreleri:
    • r - fiyata uygulanan 1. EMA (yavaş) dönemi (varsayılan olarak r = 20),
    • s - fiyata uygulanan 2. EMA (hızlı) dönemi (varsayılan olarak s = 5),
    • u - hareketli ortalamaların yakınsaması/ıraksamasına uygulanan 3. EMA dönemi (varsayılan olarak u = 3),
    • AppliedPrice - fiyat türü (varsayılan AppliedPrice=PRICE_CLOSE).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • grafik çiziminin sunumunu değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi).
  • Sınırlamalar:
    • r>1, s>1;
    • s <r (teorinin gerekliliklerine göre limit, program düzeyinde kontrol edilmez),
    • u>0. u = 1 ise, yumuşatma yapılmaz,
    • fiyatlar dizisinin minimum boyutu = ([maks.(r,s)]+u-2+1).

 

3.2.2. Ergodik MACD-osilatörü

Ergodik MACD-osilatörünün tanımı:
Ergodic_MACD(price,r,s,u) = MACD(price,r,s,u)
SignalLine(price,r,s,u,ul) = EMA( Ergodic_MACD(price,r,s,u) ,ul)

Burada:

  • Ergodic_MACD () - Ergodik - hareketli ortalamalar yakınsama/ıraksamanın (MACD) bir göstergesidir (fiyat,r,s,u),
  • SignalLine() -Sinyal Çizgisi - ergodik'e uygulanan EMA(ul),
  • ul - bir sinyal çizgisinin EMA dönemi - William Blau'ya göre, ul değeri EMA ergodikinin son anlamlı (>1) dönemine eşit olmalıdır.

"Analizler/Teknik Göstergeler/Osilatörler/MACD" bölümündeki "MetaTrader istemci terminali için Kullanım Kılavuzu"nda, Hareketli ortalamaların Yakınsaması/Iraksaması (MACD), MetaTrader 5 istemci terminaline dahil edilmesi ve teknik analizde nasıl kullanılacağı açıklanmaktadır (ayrıca bkz. iMACD.)

Standart MACD'nin aksine, William Blau üstel olarak yumuşatılmış hareketli ortalamayı kullanır (standart MACD'de basit hareketli ortalama kullanılır).

3.2.2.1. Ergodic_MACD(fiyat,r,s,u,ul) - Ergodik MACD-osilatörü. Spesifikasyon

  • Dosya adı: Blau_Ergodic_MACD.mq5
  • Ad: William Blau'ya göre ergodik MACD-osilatörü (hareketli ortalamalar yakınsama/ıraksama göstergesi tabanlı).
  • Giriş parametreleri:
    • grafik çizimi #0 - Ergodik (hareketli ortalamalar yakınsama/ıraksama):
      • r - fiyata uygulanan 1. EMA (yavaş) dönemi (varsayılan olarak r = 20),
      • s - fiyata uygulanan 2. EMA (hızlı) dönemi (varsayılan olarak s = 5),
      • u - hareketli ortalamaların yakınsaması/ıraksamasına uygulanan 3. EMA dönemi (varsayılan olarak u = 3),
    • grafik çizimi #1 - Sinyal Çizgisi:
      • ul - ergodike uygulanan dönem EMA sinyal çizgisi (varsayılan olarak ul = 3),
    • AppliedPrice - fiyat türü (varsayılan AppliedPrice=PRICE_CLOSE).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • her grafik yapısının görüntülenme stilini değiştirir - renk, genişlik, çizgi stili ("Renkler" sekmesi).
  • Sınırlamalar:
    • r>1, s>1;
    • s <r (teorinin gerekliliklerine göre limit, program düzeyinde kontrol edilmez),
    • u>0. u = 1 ise, yumuşatma yapılmaz,
    • ul>0. Ul = 1 ise, sinyal çizgisi ergodik ile çakışır,
    • fiyatlar dizisinin minimum boyutu =([maks.(r,s)]+u+ul-3+1).

 

3.2.3. Ergodik MACD-Osilatörünün kodu

Örnek olarak, Ergodic_MACD göstergesini (fiyat,r,s,u,ul) ele alalım:

1) Gösterge dizileri, gösterge arabellekleri ve grafik çizimleri arasındaki bağlantı:

//--- indicator buffers
   // graphic plot #0
   SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);               // Ergodic: u-period 3rd EMA
   // graphic plot #1
   SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);             // Signal Line: ul-period EMA, applied to Ergodic
   // buffers for intermediate calculations
   SetIndexBuffer(2,PriceBuffer,INDICATOR_CALCULATIONS);      // price array
   SetIndexBuffer(3,EMA1_PriceBuffer,INDICATOR_CALCULATIONS); // r-period 1st EMA (slow), applied to price
   SetIndexBuffer(4,EMA2_PriceBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA (fast), applied to price
   SetIndexBuffer(5,MACDBuffer,INDICATOR_CALCULATIONS);       // moving averages convergence/divergence

2) Hareketli ortalamalar yakınsama/ıraksama algoritması:

//--- calculation of moving average convergence/divergence
   if(prev_calculated==0)      // at first call
     {
      pos=begin2;              // 
      for(i=0;i<pos;i++)       // pos
         MACDBuffer[i]=0.0;    // zero values
     }
   else pos=prev_calculated-1; // overwise calculate only last value
   // r-period 1st EMA: calculation of EMA1_PriceBuffer[]
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin1,r,PriceBuffer,EMA1_PriceBuffer);
   // s-period 2nd EMA: calculation of EMA2_PriceBuffer[]
   ExponentialMAOnBufferWB(rates_total,prev_calculated,begin1,s,PriceBuffer,EMA2_PriceBuffer);
   // calculation of MACDBuffer[]
   for(i=pos;i<rates_total;i++)
      MACDBuffer[i]=EMA2_PriceBuffer[i]-EMA1_PriceBuffer[i];

3.3. Ekleme

William Blau'ya göre Ergodik MDI-Osilatörü ve MACD-Osilatörü hesaplanırken normalizasyon kullanılmaz (referans için bkz. s. 1.2.1, 1.3.1). Bu nedenle, Ergodik MDI-Osilatörü ve MACD-Osilatörü, aşırı alım veya aşırı satım piyasasının derecesini yorumlamak için kullanılamaz.

Örneğin, "Analizler/Teknik Göstergeler/Osilatörler/MACD" bölümünün "MetaTrader istemci terminali için Kullanım Kılavuzu"ndan MACD gösterge sinyallerini kullanma önerileri:

MACD, aşırı alım/aşırı satım göstergesi olarak da kullanışlıdır. Daha kısa hareketli ortalama, daha uzun hareketli ortalamadan önemli ölçüde uzaklaştığında (yani, MACD yükselir), güvenlik fiyatının aşırı artması muhtemeldir ve yakında daha gerçekçi düzeylere dönecektir.

Bu durumda, teknik analiz açısından.


4. Mum Grafik Momentumu

Dikkate alınan göstergeler (eke bakınız) iki gruba ayrılmıştır.

  1. Blau_CMtm.mq5- Mum Grafik Momentumu göstergesidir (q-dönemi mum grafik momentumu, yumuşatılmış q-dönemi Mum Grafik Momentumu),
  2. İndeksler (normalize edilmiş yumuşatılmış q-dönemi Mum Grafik Momentumu):
    • Blau_CMI.mq5- Mum Grafik Momentumu İndeksi (q-dönemi Mum Grafik Momentumunun mutlak değerine göre normalize etme),
    • Blau_CSI.mq5- Mum Grafik İndeksi (q-dönemi Mum Grafik uzunluğuna göre normalize etme),
  3. Mum Grafiğin ergodik osilatörü
    • Blau_Ergodic_CMI.mq5- Ergodik CMI-Osilatörü (Mum Grafik Momentumu İndeksi tabanlı),
    • Blau_Ergodic_CSI.mq5- Ergodik CSI-Osilatörü (Mum Grafik İndeksi tabanlı).

Şek. 4.1. William Blau'nun Mum Grafik Momentumu tabanlı göstergeleri (q-dönemi Mum Grafik Momentumunun mutlak değerine göre normalize edilmiş)

Şek. 4.1. William Blau'nun, Mum Grafik Momentumu tabanlı göstergeleri (q-dönemi Mum Grafik Momentumunun mutlak değerine göre normalize edilmiş)

 

Şek. 4.2. William Blau'nun Mum Grafik Momentumu tabanlı göstergeleri (q-dönemi Mum Grafik uzunluğuna göre normalize edilmiş)

Şek. 4.2. William Blau'nun Mum Grafik Momentumu tabanlı göstergeleri (q-dönemi Mum Grafik uzunluğuna göre normalize edilmiş)

 

4.1. Mum Grafik Momentumu

4.1.1. Mum Grafik Momentumunun tanımı

Momentum (bkz. s. 1.1) - mevcut fiyat (genellikle bugünün kapanış fiyatı) ile önceki fiyat (genellikle dünün kapanış fiyatı) arasındaki farktır. Momentum, fiyat grafiğinin herhangi bir dönemindeki fiyat değişimini yansıtabilir.

Mum Grafik Momentumu (William Blau'ya göre) - aynı dönemde (bir mum grafik içinde) kapanış fiyatı ile açılış fiyatı arasındaki farktır. Mum Grafik Momentumunun işareti, fiyat değişiminin yönünü gösterir: Pozitif bir Mum Grafik Momentumu fiyatın dönem boyunca arttığı, negatif bir Mum Grafik Momentumu fiyatın dönem boyunca düştüğü anlamına gelir.

Mum Grafik Momentumunun formülü:

cmtm = close - open

Burada:

  • kapanış - (mum grafik) döneminin [geçerli] kapanış fiyatı,
  • açılış - (mum grafik) döneminin [geçerli] açılış fiyatıdır.

Evrensellik açısından, mum grafik momentumunun tanımını genişletelim:

  1. Mum Grafik Momentumu, fiyat grafiğinin herhangi bir dönemi için fiyat değişimini yansıtabilir,
  2. Fiyat tabanı (kapanış fiyatı, açılış fiyatı) rastgele seçilmiş olabilir.

Şek. 4.3. q-dönemi Mum Grafik tanımı

Şek. 4.3. Q-dönemi Mum Grafik tanımı


q-dönemi Mum Grafik Momentumunun formülü:

cmtm(price1,price2,q) = price1 - price2[q-1]

Burada:

  • q - Mum Grafik Momentumunun hesaplanmasında kullanılan fiyat grafiğindeki çubuk sayısı,
  • fiyat1 - q döneminin sonundaki fiyat [kapanış],
  • fiyat2[q-1] - q döneminin başındaki fiyattır[açılış].

Yumuşatılmış q-dönemi Mum Grafik Momentumunun formülü:

CMtm(price1,price2,q,r,s,u) = EMA(EMA(EMA( cmtm(price1,price2,q) ,r),s),u)

Burada:

  • q - Mum Grafik Momentumunun q-döneminin hesaplanmasında kullanılan fiyat grafiğindeki çubuk sayısı,
  • fiyat1 - q döneminin sonundaki fiyat [kapanış],
  • fiyat2 - q döneminin başındaki fiyat[açılış],
  • cmtm(fiyat1,fiyat2,q)=fiyat1-fiyat2[q-1] - q-dönemi Mum Grafik Momentumu,
  • EMA (cmtm (fiyat1, fiyat2, q), r) - ilk yumuşatma - q-dönemi Mum Grafik Momentumuna uygulanan EMA(r),
  • EMA (EMA(..., r),s) - ikinci yumuşatma - 1. yumuşatmanın sonucuna uygulanan EMA(s),
  • EMA (EMA (EMA (..., r), s), u) - üçüncü yumuşatma - 2. yumuşatmanın sonucuna uygulanan EMA(u)'dur.


4.1.2. CMtm(fiyat1,fiyat2,q,r,s,u) - Mum Grafik Momentumu göstergesi. Spesifikasyon
  • Dosya adı: Blau_CMtm.mq5
  • Ad: William Blau'ya göre Mum Grafik Momentumu göstergesi (yumuşatılmış q-dönemi Mum Grafik Momentumu).
  • Giriş parametreleri:
    • q - Mum Grafik Momentumunun dönemi (varsayılan olarak q = 1),
    • r - q-dönemi Mum Grafik Momentumuna uygulanan 1. EMA dönemi (varsayılan olarak r = 20),
    • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
    • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • AppliedPrice1 - fiyat türü [kapanış] (varsayılan olarak AppliedPrice=PRICE_CLOSE),
    • AppliedPrice2 - fiyat türü [açılış] (varsayılan olarak AppliedPrice=PRICE_OPEN).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • grafik çiziminin sunumunu değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi).
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse, EMA yumuşatması kullanılmaz,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u-3 +1).


4.2. Normalize Edilmiş Mum Grafik Momentumu

4.2.1. Mum Grafik Momentumu İndeksi

Mum Grafik Momentumu İndeksi (CMI) - normalize edilmiş q-dönemi Mum Grafik Momentumu'dur.

q-dönemi Mum Grafiği'nin yumuşatılmış momentumunun değerleri yüzde olarak verilmiştir ([-100, 100] aralığına eşleme). q-dönemi Mum Grafiğinin yumuşatılmış momentumunun her değeri, mutlak değerde alınan, yumuşatılmış q-dönemi Mum Grafik Momentumunun değerine göre normalize edilir. Normalizasyon, CMI değerinin aşırı alım (pozitif değer) veya aşırı satım (negatif değer) piyasa düzeyi olarak yorumlanmasına izin verir.

Mum Grafik Momentumu İndeksi için formül:

                             100 * EMA(EMA(EMA( cmtm(price1,pric2,q) ,r),s),u)          100 * CMtm(price1,pric2,q,r,s,u)
CMI(price1,price2,q,r,s,u) = –––––––––––-------------––––––––-–––––––––––––––– = –––––––––––––––-------------–––-–––––––––––––
                               EMA(EMA(EMA( |cmtm(price1,pric2,q)| ,r),s),u)     EMA(EMA(EMA( |cmtm(price1,pric2,q)| ,r),s),u)
if EMA(EMA(EMA(|cmtm(price1,pric2,q)|,r),s),u)=0, then CMI(price1,price2,q,r,s,u)=0

Burada:

  • q - mum grafiğin q-döneminin momentumunun hesaplanmasında bulunan fiyat grafiğinin zaman dilimlerinin sayısı,
  • fiyat1 - q döneminin sonundaki fiyat [kapanış],
  • fiyat2 - q döneminin başındaki fiyat[açılış],
  • cmtm(fiyat1,fiyat2,q)=fiyat1-fiyat2[q-1], - q-dönemi Mum Grafik Momentumu,
  • |cmtm(fiyat1,fiyat2,q)| - q-dönemi Mum Grafik Momentumunun mutlak değeri,
  • CMtm (fiyat,q,r,s,u) - üç kez yumuşatılmış q-dönemi Mum Grafik Momentumu,
  • EMA (..., r) - ilk yumuşatma - EMA(r), şunlara uygulanır:
    1) q-dönemi Mum Grafik Momentumu,
    2) q-dönemi Mum Grafik Momentumunun mutlak değeri,
  • EMA (EMA(..., r),s) - ikinci yumuşatma - 1. yumuşatmanın sonucuna uygulanan EMA(s),
  • EMA (EMA (EMA (..., r), s), u) - üçüncü yumuşatma - 2. yumuşatmanın sonucuna uygulanan EMA(u)'dur.


4.2.1.1. CMI(fiyat1,fiyat2,q,r,s,u) - Mum Grafik Momentumu İndeksi. Spesifikasyon

  • Dosya adı: Blau_CMI.mq5
  • Ad: William Blau'ya göre q-dönemi Mum Grafik Momentumu İndeksi (normalize edilmiş yumuşatılmış q-dönemi Mum Grafik Momentumu, q-dönemi Mum Grafik Momentumunun mutlak değeriyle normalize etme).
  • Giriş parametreleri:
    • q - Mum Grafik Momentumunun dönemi (varsayılan olarak q = 1),
    • r - q-dönemi Mum Grafik Momentumuna uygulanan 1. EMA dönemi (varsayılan olarak r = 20),
    • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
    • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • AppliedPrice1 - fiyat türü [kapanış] (varsayılan olarak AppliedPrice=PRICE_CLOSE),
    • AppliedPrice2 - fiyat türü [açılış] (varsayılan olarak AppliedPrice=PRICE_OPEN).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • grafik çiziminin sunum stilini değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi),
    • (isteğe bağlı) iki düzey (varsayılan -25 ve +25'tir) - bir düzey ekler/kaldırır; değeri, düzey açıklamasını değiştirir, düzeylerin sunum stilini değiştirir ("Düzeyler" sekmesi),
    • tek gösterge penceresinin ("Ölçek" sekmesi) ölçeğinin alt (varsayılan olarak -100) ve üst (varsayılan olarak 100) sınırlarını değiştirir.
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse karşılık gelen EMA döneminde yumuşatma yapılmayacaktır,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u-3 +1).

 

4.2.2. Mum Grafik İndeksi

Mum Grafik indeksi (CSI) - normalize edilmiş q-dönemi Mum Grafik Momentumunun (normalize edilmiş yumuşatılmış q-dönemi Mum Grafik Momentumu) bir göstergesidir. Yumuşatılmış q-dönemi Mum Grafik Momentumu değerleri, ölçeğin yüzdesi olarak verilir ([-100, 100] aralığına eşleme).

Yumuşatılmış q-dönemi Mum Grafik Momentumunun her değeri, q-dönemi fiyat aralığının değeriyle (veya q-dönemi mum grafiğinin uzunluğuyla) normalize edilir. Normalizasyon, CSI değerinin aşırı alım (pozitif değer) veya aşırı satım (negatif değer) piyasa düzeyi olarak yorumlanmasına izin verir.

Mum Grafik İndeksinin formülü:

                             100 * EMA(EMA(EMA( cmtm(price1,pric2,q) ,r),s),u)    100 * CMtm(price1,pric2,q,r,s,u)
CSI(price1,price2,q,r,s,u) = –––––––––––––––––––-–––-------------––––––––––––– = ––––––––––––––––--––-–––––––––––––
                                    EMA(EMA(EMA( HH(q)-LL(q) ,r),s),u)           EMA(EMA(EMA( HH(q)-LL(q) ,r),s),u)
if EMA(EMA(EMA(HH(q)-LL(q),r),s),u)=0, then CSI(price1,price2,q,r,s,u)=0

Burada:

  • q - q-dönemi Mum Grafik Momentumunun hesaplanmasında kullanılan fiyat grafiğindeki çubuk sayısı,
  • fiyat1 - q döneminin sonundaki fiyat [kapanış],
  • fiyat2 - q döneminin başındaki fiyat[açılış],
  • cmtm(fiyat1,fiyat2,q)=fiyat1-fiyat2[q-1] - q-dönemi Mum Grafik Momentumu,
  • LL (q) - q dönemi için en düşük fiyatın minimum değeri,
  • HH(q) - q dönemi için en yüksek fiyatın maksimum değeri,
  • HH(q)-LL(q) - q dönemi fiyat aralığı (q-dönemi mum grafiğinin uzunluğu),
  • CMtm(fiyat1,fiyat2,q,r,s,u) - üç kez yumuşatılmış q-dönemi Mum Grafik Momentumu,
  • EMA (..., r) - ilk yumuşatma - EMA(r), şunlara uygulanır:
    1) q-dönemi Mum Grafik Momentumu, 
    2) q-dönemi Fiyat Aralığı (veya q-dönemi mum grafiğinin uzunluğu),
  • EMA (EMA(..., r),s) - ikinci yumuşatma - 1. yumuşatmanın sonucuna uygulanan EMA(s),
  • EMA (EMA (EMA (..., r), s), u) - üçüncü yumuşatma - 2. yumuşatmanın sonucuna uygulanan EMA(u)'.

4.2.2.1. CSI(fiyat1,fiyat2,q,r,s,u) - Mum Grafik İndeksi. Spesifikasyon

  • Dosya adı: Blau_CSI.mq5
  • Ad: William Blau'ya göre q-dönemi Mum Grafik İndeksi (normalize edilmiş yumuşatılmış q-dönemi Mum Grafik Momentumu, q-dönemi mum grafiğinin uzunluğuna göre normalize etme).
  • Giriş parametreleri:
    • q - q-dönemi Mum Grafik Momentumunun hesaplandığı dönem (varsayılan olarak q = 1),
    • r - q-dönemi mum grafik Momentumuna uygulanan 1. EMA dönemi (varsayılan olarak r = 20),
    • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
    • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • AppliedPrice1 - fiyat türü [kapanış] (varsayılan olarak AppliedPrice=PRICE_CLOSE),
    • AppliedPrice2 - fiyat türü [açılış] (varsayılan olarak AppliedPrice=PRICE_OPEN).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • grafik çiziminin sunum stilini değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi),
    • (isteğe bağlı) iki düzey (varsayılan -25 ve +25'tir) - bir düzey ekler/kaldırır; değeri, düzey açıklamasını değiştirir, düzeylerin sunum stilini değiştirir ("Düzeyler" sekmesi),
    • tek gösterge penceresinin ("Ölçek" sekmesi) ölçeğinin alt (varsayılan olarak -100) ve üst (varsayılan olarak 100) sınırlarını değiştirir.
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse, EMA yumuşatması kullanılmaz,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u-3 +1).

 

4.3. Mum grafiğin Ergodik Osilatörleri

4.3.1. Ergodik CMI-osilatörü

Ergodik CMI-osilatörünün tanımı:
Ergodic_CMI(price1,pric2,q,r,s,u) = CMI(price1,pric2,q,r,s,u)
SignalLine(price1,pric2,q,r,s,u,ul) = EMA( Ergodic_CMI(price1,pric2,q,r,s,u) ,ul)

Burada:

  • Ergodic_CMI() - Ergodik - Mum Grafik Momentumu İndeksi CMI(fiyat1,fiyat2,q,r,s,u),
  • SignalLine() -Sinyal Çizgisi - Ergodik'e uygulanan EMA(ul),
  • ul - bir sinyal çizgisinin EMA dönemi - William Blau'ya göre, ul değeri EMA ergodikinin son anlamlı (>1) dönemine eşit olmalıdır.

Ergodic_CMI(fiyat1,fiyat2,q,r,s,u,ul) - ergodik CMI-osilatörü. Spesifikasyon

  • Dosya adı: Blau_Ergodic_CMI.mq5
  • Ad: William Blau'ya göre ergodik CMI-Osilatörü (Mum Grafik Momentumu İndeksi tabanlı).
  • Giriş parametreleri:
    • grafik çizimi #0 - Ergodik (Mum Grafik Momentumu İndeksi):
      • q - Mum Grafik Momentumunun dönemi (varsayılan olarak q = 1),
      • r - q-dönemi Mum Grafik Momentumuna uygulanan 1. EMA dönemi (varsayılan olarak r = 20),
      • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
      • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • grafik çizimi #1 - Sinyal Çizgisi:
      • ul - Ergodik'e uygulanan Sinyal Çizgisi dönemi (varsayılan olarak ul = 3),
    • AppliedPrice1 - fiyat türü [kapanış] (varsayılan olarak AppliedPrice=PRICE_CLOSE),
    • AppliedPrice2 - fiyat türü [açılış] (varsayılan olarak AppliedPrice=PRICE_OPEN).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • her grafik çiziminin sunum stilini değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi),
    • iki düzey (varsayılan olarak -25 ve +25) - bir düzey ekler/kaldırır, değeri değiştirir, düzey açıklamasını değiştirir, düzeylerin sunum stilini değiştirir ("Düzeyler" sekmesi),
    • tek gösterge penceresinin ("Ölçek" sekmesi) ölçeğinin alt (varsayılan olarak -100) ve üst (varsayılan olarak 100) sınırlarını değiştirir.
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse karşılık gelen EMA döneminde yumuşatma yapılmayacaktır,
    • ul>0. Ul = 1 ise, sinyal çizgisi ergodik ile çakışır,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u + ul-4 +1).


Ergodik CMI-osilatörünün kodu


Örnek olarak, Ergodic_CMI göstergesini (fiyat1,fiyat2,r,s,u,ul) ele alalım:

1) Gösterge dizileri, gösterge arabellekleri ve grafik çizimleri arasındaki ilişki:

//--- indicator buffers
   // graphic plot #0
   SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);                  // Ergodic
   // graphic plot #1
   SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);                // Signal Line: EMA(ul), applied to Ergodic
   // buffers for intermediate calculations
   SetIndexBuffer(2,Price1Buffer,INDICATOR_CALCULATIONS);        // price array [close]
   SetIndexBuffer(3,Price2Buffer,INDICATOR_CALCULATIONS);        // price array [open]
   SetIndexBuffer(4,CMtmBuffer,INDICATOR_CALCULATIONS);          // q-period Candlestick Momentum
   SetIndexBuffer(5,EMA_CMtmBuffer,INDICATOR_CALCULATIONS);      // r-period 1st EMA
   SetIndexBuffer(6,DEMA_CMtmBuffer,INDICATOR_CALCULATIONS);     // s-period 2nd EMA
   SetIndexBuffer(7,TEMA_CMtmBuffer,INDICATOR_CALCULATIONS);     // u-period 3rd EMA
   SetIndexBuffer(8,AbsCMtmBuffer,INDICATOR_CALCULATIONS);       // q-period Candlestick Momentum (absolute value)
   SetIndexBuffer(9,EMA_AbsCMtmBuffer,INDICATOR_CALCULATIONS);   // r-period 1st EMA (absolute value)
   SetIndexBuffer(10,DEMA_AbsCMtmBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA (absolute value)
   SetIndexBuffer(11,TEMA_AbsCMtmBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA (absolute value)

2) cmtm ve |cmtm| hesaplama algoritması:

//--- calculation of Price1Buffer[] and Price2Buffer[]
   CalculatePriceBuffer(
                        AppliedPrice1,       // applied price [close]
                        rates_total,         // rates total
                        prev_calculated,     // number of bars, calculated at previous call
                        Open,High,Low,Close, // Open[], High[], Low[], Close[]
                        Price1Buffer         // target array
                       );
   CalculatePriceBuffer(AppliedPrice2,rates_total,prev_calculated,Open,High,Low,Close,Price2Buffer);
//--- calculation of cmtm and |cmtm|
   if(prev_calculated==0)      // at first call
     {
      pos=begin1;              // 
      for(i=0;i<pos;i++)       // 
        {
         CMtmBuffer[i]=0.0;    // zero values
         AbsCMtmBuffer[i]=0.0; //
        }
     }
   else pos=prev_calculated-1; // overwise calculate only last value
   // calculation of CMtmBuffer[] and AbsCMtmBuffer[]
   for(i=pos;i<rates_total;i++)
     {
      CMtmBuffer[i]=Price1Buffer[i]-Price2Buffer[i-(q-1)];
      AbsCMtmBuffer[i]=MathAbs(CMtmBuffer[i]);
     }


4.3.2. Ergodik CSI-osilatörü

Ergodik CSI-osilatörü şu şekilde tanımlanır:

Ergodic_CSI(price1,pric2,q,r,s,u) = CSI(price1,pric2,q,r,s,u)
SignalLine(price1,pric2,q,r,s,u,ul) = EMA( Ergodic_CSI(price1,pric2,q,r,s,u) ,ul)

Burada:

  • Ergodic_CSI() - Ergodik - Mum Grafik indeksi CSI(fiyat1,fiyat2,q,r,s,u),
  • SignalLine() -Sinyal Çizgisi - Ergodik'e uygulanan EMA(u)l,
  • ul - bir Sinyal Çizgisinin EMA dönemi - William Blau'ya göre, ul değeri EMA ergodikinin son anlamlı (>1) dönemine eşit olmalıdır.


4.3.2.1. Ergodic_CSI(fiyat1,fiyat2,q,r,s,u,ul) - ergodik CSI-osilatörü. Spesifikasyon

  • Dosya adı: Blau_Ergodic_CSI.mq5
  • Ad: William Blau'ya göre Ergodik CSI-Osilatörü (Mum Grafik İndeksi tabanlı).
  • Giriş parametreleri:
    • grafik çizimi #0 - Ergodik (Mum Grafik İndeksi):
      • q - q-dönemi Mum Grafik Momentumunun hesaplandığı dönem (varsayılan olarak q = 1),
      • r - q-dönemi Mum Grafik Momentumuna uygulanan 1. EMA dönemi (varsayılan olarak r = 20),
      • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
      • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3),
    • grafik çizimi #1 - Sinyal Çizgisi:
      • ul - Ergodik'e uygulanan dönem EMA sinyal çizgisi (varsayılan olarak ul = 3),
    • AppliedPrice1 - fiyat türü [kapanış] (varsayılan olarak AppliedPrice=PRICE_CLOSE),
    • AppliedPrice2 - fiyat türü [açılış] (varsayılan olarak AppliedPrice=PRICE_OPEN).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • her grafik çiziminin sunum stilini değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi),
    • iki düzey (varsayılan olarak -25 ve +25) - bir düzey ekler/kaldırır, değeri değiştirir, düzey açıklamasını değiştirir, düzeylerin sunum stilini değiştirir ("Düzeyler" sekmesi),
    • tek gösterge penceresinin ("Ölçek" sekmesi) ölçeğinin alt (varsayılan olarak -100) ve üst (varsayılan olarak 100) sınırlarını değiştirir.
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse karşılık gelen EMA döneminde yumuşatma yapılmayacaktır,
    • ul>0. Ul = 1 ise, sinyal çizgisi ergodik ile çakışır,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u + ul-4 +1).


4.3.2.2. Ergodik CSI-osilatörünün kodu


Ergodic_CSI göstergesi (fiyat1, fiyat2,r,s,u,ul) örneğinde:

1) Gösterge dizileri, gösterge arabellekleri ve grafik çizimleri arasındaki ilişki:

//--- indicator buffers
   // graphic plot #0
   SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);               // Ergodic
   // graphic plot #1
   SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);             // Signal Line: EMA(ul), applied to Ergodic
   // buffers, used for intermediate calculations
   SetIndexBuffer(2,Price1Buffer,INDICATOR_CALCULATIONS);     // price array [close]
   SetIndexBuffer(3,Price2Buffer,INDICATOR_CALCULATIONS);     // price arrya [open]
   SetIndexBuffer(4,LLBuffer,INDICATOR_CALCULATIONS);         // lowest prices (q bars)
   SetIndexBuffer(5,HHBuffer,INDICATOR_CALCULATIONS);         // highest prices (q bars)
   SetIndexBuffer(6,CMtmBuffer,INDICATOR_CALCULATIONS);       // q-period Candlestick Momentum
   SetIndexBuffer(7,EMA_CMtmBuffer,INDICATOR_CALCULATIONS);   // r-period 1st EMA
   SetIndexBuffer(8,DEMA_CMtmBuffer,INDICATOR_CALCULATIONS);  // s-period 2nd EMA
   SetIndexBuffer(9,TEMA_CMtmBuffer,INDICATOR_CALCULATIONS);  // u-period 3rd EMA
   SetIndexBuffer(10,HHLLBuffer,INDICATOR_CALCULATIONS);      // price range (q bars)
   SetIndexBuffer(11,EMA_HHLLBuffer,INDICATOR_CALCULATIONS);  // r-period 1st EMA (price range)
   SetIndexBuffer(12,DEMA_HHLLBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA (price range)
   SetIndexBuffer(13,TEMA_HHLLBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA (price range)

2) cmtm ve q-dönemi fiyat aralığı için hesaplama algoritması: 

//--- calculation of Price1Buffer[] and Price2Buffer[]
   CalculatePriceBuffer(
                        AppliedPrice1,       // price type [close]
                        rates_total,         // rates total
                        prev_calculated,     // number of bars, calculated at previous call
                        Open,High,Low,Close, // Open[], High[], Low[], Close[]
                        Price1Buffer         // target array
                       );
   CalculatePriceBuffer(AppliedPrice2,rates_total,prev_calculated,Open,High,Low,Close,Price2Buffer);
//--- calculation of cmtm and price range (q bars)
   if(prev_calculated==0)      // at first call
     {
      pos=begin1;              // 
      for(i=0;i<pos;i++)       // 
        {
         CMtmBuffer[i]=0.0;    // zero values
         HHLLBuffer[i]=0.0;    //
         LLBuffer[i]=0.0;      //
         HHBuffer[i]=0.0;      //
        }
     }
   else pos=prev_calculated-1; // overwise calculate only last value
   // calculation of CMtmBuffer[], HHLLBuffer[], LLBuffer[], HHBuffer[]
   for(i=pos;i<rates_total;i++)
     {
      // CMtmBuffer[] - q-period Candlestick Momentum
      CMtmBuffer[i]=Price1Buffer[i]-Price2Buffer[i-(q-1)];
      // LLBuffer[] - search for the lowest price (q bars)
      // HHBuffer[] - search for the highest price (q bars)
      min=1000000.0;
      max=-1000000.0;
      for(k=i-(q-1);k<=i;k++)
        {
         if(min>Low[k])  min=Low[k];
         if(max<High[k]) max=High[k];
        }
      LLBuffer[i]=min;
      HHBuffer[i]=max;
      // HHLLBuffer[] - Price Range (q bars)
      HHLLBuffer[i]=HHBuffer[i]-LLBuffer[i];
     }

5. Yönlü Trend

Göz önünde bulundurulan göstergeler (eke bakınız):

  1. Blau_HLM.mq5- Sanal Kapanışın bir göstergesidir (q-dönemi Bileşik Yüksek-Düşük Momentum, yumuşatılmış q-dönemi Bileşik Yüksek-Düşük Momentum),
  2. Blau_DTI.mq5- Yönlü Trend İndeksi (normalize edilmiş yumuşatılmış q-dönemi Bileşik Yüksek-Düşük Momentum),
  3. Blau_Ergodic_DTI.mq5- Ergodik DTI-osilatörü (Yönlü Trend İndeksi tabanlı).

Şek. 5.1. Yönlü Trend İndeksi Göstergeleri

Şek. 5.1. Yönlü Trend İndeksi Göstergeleri

 

5.1. Bileşik Yüksek-Düşük Momentum

5.1.1. Yükseliş trendi ve düşüş trendinin momentumunu tanımlama

Trend tanımlarından biri. Maksimumfiyatların ​değerleri artarsa, o zaman bir yükseliş trendi vardır. Maksimumfiyatların ​değerleri azalırsa, o zaman düşüş trendi vardır.

Bölüm 1'de tartışılan bir grup Momentum göstergesi, fiyatların maksimum değerleri için momentumu hesaplamak için kullanılabilir: tp

Mtm( price=High, q, r, s, u )
TSI( price=High, q, r, s, u )
Ergodic( price=High, q, r, s, u )

ve minimum fiyatlar için:

Mtm( price=Low, q, r, s, u )
TSI( price=Low, q, r, s, u )
Ergodic( price=Low, q, r, s, u )

Yükseliş trendi Momentumu veya Yüksek Momentum Artışı (HMU), cari dönemin maksimum fiyatı ile q-dönemi fiyat aralığının başlangıcındaki maksimum fiyat arasındaki pozitif farktır. Yükseliş trendinin q-dönemi Momentumunun değeri, q-dönemi fiyat dalgalanmaları aralığının başlangıcındaki maksimum fiyatla karşılaştırıldığında, cari dönem için maksimum fiyatın büyümesinin bağıl hızını gösterir.

Yükseliş trendinin q-dönemi momentumunun formülü:

HMU(q) = High - High[q-1], if High - High[q-1] > 0
HMU(q) = 0, if High - High[q-1] <= 0

Burada:

  • q - yükseliş trendi momentumunun hesaplanmasında bulunan fiyat grafiğinin zaman dilimlerinin sayısı,
  • Yüksek - cari dönem için maksimum fiyat,
  • Yüksek[q–1] - geçmişteki dönemler için maksimum fiyat (q-1).

Düşüş trendi momentumu veya Düşük Momentum Düşüşü (LMD) - Bu, cari dönemin minimum fiyatı ile q-dönemi fiyat dalgalanmaları aralığının başlangıcı için en düşük fiyat arasındaki pozitif farktır. Düşüş trendinin q-dönemi momentumunun değeri, q-dönemi fiyat aralığının başlangıcı için en düşük fiyat ile karşılaştırıldığında, cari dönemin minimum fiyatındaki düşüşün bağıl hızını gösterir.

q-dönemi düşüş trendi Momentumunun formülü:

LMD(q) = -(Low - Low[q-1]), if Low - Low[q-1] < 0
LMD(q) = 0, if Low - Low[q-1] >= 0

Burada:

  • q - düşüş trendi momentumunun hesaplanmasında kullanılan fiyat grafiğinin zaman dilimlerinin sayısı,
  • Düşük - cari dönem için minimum fiyat,
  • Düşük[q-1] - geçmişteki dönemler için minimum fiyat (q-1).

Bileşik Yüksek-Düşük Momentum (Yüksek-Düşük Momentum, HLM) - yükseliş trendinin q-dönemi Momentumu ile düşüş trendinin q-dönemi Momentumu arasındaki farktır. Bileşik Yüksek-Düşük Momentumun işareti, fiyat değişiklikleri trendini gösterir: Pozitif HLM, fiyat yükselme trendi (yükseliş trendi) ve negatif HLM, fiyat düşme trendi (düşüş trendi) anlamına gelir.

Formül:

HLM(q) = HMU(q) - LMD(q)

Burada:

  • q - yükseliş trendi ve düşüş trendinin momentumlarının hesaplanmasında yer alan fiyat grafiğinin zaman dilimlerinin sayısı,
  • HMU(q) - q dönemi için yükseliş trendinin momentumu,
  • LMD(q) - q dönemi için düşüş trendinin momentumudur.

Yumuşatılmış q-dönemi Bileşik Yüksek-Düşük Momentum formülü (Sanal Kapanış):

HLM(q,r,s,u) = EMA(EMA(EMA( HLM(q) ,r),s),u) = EMA(EMA(EMA( HMU(q)-HMD(q) ,r),s),u)

Burada:

  • q - yükseliş trendi ve düşüş trendinin momentumlarının hesaplanmasında yer alan fiyat grafiğinin zaman dilimlerinin sayısı,
  • HMU(q) - q dönemi için yükseliş trendinin momentumu,
  • LMD(q) - q dönemi için düşüş trendinin momentumu,
  • HLM(q) = HMU(q)-LMD(q) - q-dönemi Bileşik Yüksek-Düşük Momentum,
  • EMA (HLM (q), r) - ilk yumuşatma - q-dönemi Bileşik Yüksek-Düşük Momentum'a uygulanan EMA(r),
  • EMA (EMA(..., r),s) - ikinci yumuşatma - 1. yumuşatmanın sonucuna uygulanan EMA(s),
  • EMA (EMA (EMA (..., r), s), u) - üçüncü yumuşatma - 2. yumuşatmanın sonucuna uygulanan EMA(u).

Maksimum ve minimum değerler için birikmiş karmaşık momentumların toplamını içeren grafiğin eğrisi sanal kapanış olarak adlandırılır.


5.1.2. HLM(q,r,s,u) - Sanal Kapanış Göstergesi. Spesifikasyon
  • Dosya adı: Blau_HLM.mq5
  • Ad: William Blau'ya göre sanal Kapanış Göstergesi (q-dönemi Bileşik Yüksek-Düşük Momentum, yumuşatılmış q-dönemi Bileşik Yüksek-Düşük Momentum).
  • Giriş parametreleri:
    • q - HLM'nin hesaplandığı dönem (varsayılan olarak q = 2),
    • r - HLM'ye uygulanan 1. EMA dönemi (varsayılan olarak r = 20),
    • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
    • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • grafik çiziminin sunumunu değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi).
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse karşılık gelen EMA döneminde yumuşatma yapılmayacaktır,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u-3 +1).

 

5.2. Yönlü Trend İndeksi

5.2.1. Yönlü Trend İndeksinin tanımı

Yönlü Trend İndeksi (Yönlü Trend İndeksi, DTI) - normalize edilmiş q-dönemi Bileşik Yüksek-Düşük Momentumun (normalize edilmiş yumuşatılmış HLM) bir göstergesidir. Yumuşatılmış HLM değerleri, ölçeğin yüzdesi olarak verilir (görüntüleme aralığı [-100, 100]).

Yumuşatılmış HLM'nin her değeri, mutlak bir değer olarak alınan yumuşatılmış bir HLM değerine göre normalize edilir. Normalizasyon, DTI değerinin aşırı alım (pozitif değer) veya aşırı satım (negatif değer) piyasa düzeyi olarak yorumlanmasına izin verir.

Yönlü Trend İndeksi formülü:

               100 * EMA(EMA(EMA( HLM(q) ,r),s),u)          100 * HLM(q,r,s,u)
DTI(q,r,s,u) = –––––––––––––––––––––––––---––––––– = ––––––––––––––--–––––––––––––––
                 EMA(EMA(EMA( |HLM(q)| ,r),s),u)     EMA(EMA(EMA( |HLM(q)| ,r),s),u)
if EMA(EMA(EMA(|HLM(q)|,r),s),u)=0, then DTI(price,q,r,s,u)=0

Burada:

  • q - yükseliş trendi ve düşüş trendinin momentumlarının hesaplanmasında yer alan fiyat grafiğinin zaman dilimlerinin sayısı,
  • HLM(q) = HMU(q)-LMD(q) - maksimum ve minimum değerler için karmaşık bir q-dönemi momentumu,
  • |HLM(q)| - mutlak değer HLM(q),
  • HLM(q,r,s,u) - üç kez yumuşatılmış HLM(q),
  • EMA(..., r) - ilk yumuşatma - EMA(r), şunlara uygulanır:
    1) HLM'ye (q),
    2) HLM'nin (q) mutlak değerine,
  • EMA (EMA(..., r),s) - ikinci yumuşatma - 1. yumuşatmanın sonucuna uygulanan EMA(s),
  • EMA (EMA (EMA (..., r), s), u) - üçüncü yumuşatma - 2. yumuşatmanın sonucuna uygulanan EMA(u)'.
5.2.2. DTI(q,r,s,u) - Yönlü Trend İndeksi. Spesifikasyon
  • Dosya adı: Blau_DTI.mq5
  • Ad: William Blau'ya göre Yönlü Trend İndeksi (normalize edilmiş yumuşatılmış q-dönemi Bileşik Yüksek-Düşük Momentum).
  • Giriş parametreleri:
    • q - HLM'nin hesaplandığı dönem (varsayılan olarak q = 2),
    • r - HLM'ye uygulanan 1. EMA dönemi (varsayılan olarak r = 20),
    • s - 1. yumuşatma sonucuna uygulanan 2. EMA dönemi (varsayılan olarak s = 5),
    • u - 2. yumuşatma sonucuna uygulanan 3. EMA dönemi (varsayılan olarak, u = 3).
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • grafik çiziminin sunum stilini değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi),
    • (isteğe bağlı) iki düzey (varsayılan -25 ve +25'tir) - bir düzey ekler/kaldırır; değeri, düzey açıklamasını değiştirir, düzeylerin sunum stilini değiştirir ("Düzeyler" sekmesi),
    • tek gösterge penceresinin ("Ölçek" sekmesi) ölçeğinin alt (varsayılan olarak -100) ve üst (varsayılan olarak 100) sınırlarını değiştirir.
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse karşılık gelen EMA döneminde yumuşatma yapılmayacaktır,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u-3 +1).

 

5.3. Ergodik DTI-osilatörü

5.3.1. Ergodik DTI-osilatörünün tanımı

Ergodic_DTI(q,r,s,u) = DTI(q,r,s,u)
SignalLine(q,r,s,u,ul) = EMA( Ergodic_DTI(q,r,s,u) ,ul)

Burada:

  • Ergodic_DTI() - Ergodik - Yönlü Trend İndeksi DTI(q,r,s,u),
  • SignalLine() - Sinyal Hattı - Ergodik'e uygulanan ul döneminin üstel olarak hareketli ortalaması,
  • ul - bir Sinyal Çizgisinin EMA dönemi - William Blau'ya göre, ul değeri EMA ergodikinin son anlamlı (>1) dönemine eşit olmalıdır.
5.3.2. Ergodic_DTI(q,r,s,u,ul) - Ergodik DTI-osilatörü. Spesifikasyon
  • Dosya adı: Blau_Ergodic_DTI.mq5
  • Ad: William Blau'nun Ergodik DTI-Osilatörü (Yönlü Trend İndeksi tabanlı).
  • Giriş parametreleri:
    • grafik çizimi #0 - ergodik (yönlü trend indeksi):
      • q - HLM'nin hesaplandığı dönem (varsayılan olarak q = 2),
      • r - HLM'ye göre 1. EMA dönemi (varsayılan olarak r = 20),
      • s - ilk yumuşatma sonuçlarına göre 2. EMA dönemi (varsayılan olarak s = 5),
      • u - ikinci yumuşatmanın sonucuna göre 3. EMA dönemi (varsayılan olarak, u = 3),
    • grafik çizimi # 1 - sinyal çizgisi:
      • ul - ergodike uygulanan dönem EMA sinyal çizgisi (varsayılan olarak ul = 3),
  • Ayrıca:
    • ayrı bir pencerede görüntülenir,
    • her grafik çiziminin sunum stilini değiştirir - renk, kalınlık, çizgi stili ("Renkler" sekmesi),
    • iki düzey (varsayılan olarak -25 ve +25) - bir düzey ekler/kaldırır, değeri değiştirir, düzey açıklamasını değiştirir, düzeylerin sunum stilini değiştirir ("Düzeyler" sekmesi),
    • tek gösterge penceresinin ("Ölçek" sekmesi) ölçeğinin alt (varsayılan olarak -100) ve üst (varsayılan olarak 100) sınırlarını değiştirir.
  • Sınırlamalar:
    • q>0;
    • r>0, s>0, u>0. r, s veya u 1'e eşitse, EMA yumuşatması kullanılmaz,
    • ul>0. Ul = 1 ise, sinyal çizgisi ergodik ile çakışır,
    • fiyatlar dizisinin minimum boyutu = (q-1 + r + s + u + ul-4 +1).


5,4. Ergodik DTI-osilatörünün kodu

Ergodic_DTI (q,r,s,u,ul) göstergesi:

1) Gösterge dizileri, gösterge arabellekleri ve grafik çizimleri arasındaki bağlantı:

//--- indicator buffers
   // graphic plot #0
   SetIndexBuffer(0,MainBuffer,INDICATOR_DATA);                 // Ergodic Line
   // graphic plot #1
   SetIndexBuffer(1,SignalBuffer,INDICATOR_DATA);               // Signal Line: EMA(ul), applied to Ergodic
   // buffers, used for intermediate calculations
   SetIndexBuffer(2,HMUBuffer,INDICATOR_CALCULATIONS);          // q-period Up Trend Momentum
   SetIndexBuffer(3,LMDBuffer,INDICATOR_CALCULATIONS);          // q-period Down Trend Momentum
   SetIndexBuffer(4,HLMBuffer,INDICATOR_CALCULATIONS);          // Composite q-period High/Low Momentum
   SetIndexBuffer(5,EMA_HLMBuffer,INDICATOR_CALCULATIONS);      // r-period 1st EMA
   SetIndexBuffer(6,DEMA_HLMBuffer,INDICATOR_CALCULATIONS);     // s-period 2nd EMA
   SetIndexBuffer(7,TEMA_HLMBuffer,INDICATOR_CALCULATIONS);     // u-period 3rd EMA
   SetIndexBuffer(8,AbsHLMBuffer,INDICATOR_CALCULATIONS);       // Composite q-period High/Low Momentum (absolute values)
   SetIndexBuffer(9,EMA_AbsHLMBuffer,INDICATOR_CALCULATIONS);   // r-period 1st EMA (absolute values)
   SetIndexBuffer(10,DEMA_AbsHLMBuffer,INDICATOR_CALCULATIONS); // s-period 2nd EMA (absolute values)
   SetIndexBuffer(11,TEMA_AbsHLMBuffer,INDICATOR_CALCULATIONS); // u-period 3rd EMA (absolute values)

2) HLM ve |HML| hesaplama algoritması:

//--- calculation of HLM and |HLM|
   if(prev_calculated==0)      // at first call
     {
      pos=begin1;              // 
      for(i=0;i<pos;i++)       // 
        {
         HLMBuffer[i]=0.0;     // zero values
         AbsHLMBuffer[i]=0.0;  //
         HMUBuffer[i]=0.0;     //
         LMDBuffer[i]=0.0;     //
        }
     }
   else pos=prev_calculated-1; // overwise calculate only last value
   // calculation of HLMBuffer[], AbsHLMBuffer[], HMUBuffer[], LMDBuffer[]
   for(i=pos;i<rates_total;i++)
     {
      HMUBuffer[i]=High[i]-High[i-(q-1)];    HMUBuffer[i]=(HMUBuffer[i]>0)?HMUBuffer[i]:0;
      LMDBuffer[i]=-1*(Low[i]-Low[i-(q-1)]); LMDBuffer[i]=(LMDBuffer[i]>0)?LMDBuffer[i]:0;
      HLMBuffer[i]=HMUBuffer[i]-LMDBuffer[i];
      AbsHLMBuffer[i]=MathAbs(HLMBuffer[i]);
     }

Sonuç

Makalenin ilk bölümü "William Blau'nun MQL5'teki Göstergeleri ve Alım Satım Sistemleri. Bölüm 1: Göstergeler", William Blau'nun "Momentum, Direction ve Divergence" kitabında açıklanan MQL5'te geliştirilen göstergelerin ve osilatörlerin bir açıklamasını sağlar.

Alım satım kararları verirken bu göstergelerin ve osilatörlerin kullanımı, "William Blau'nun MQL5'teki Göstergeleri ve Alım Satım Sistemleri" makalesinin ikinci bölümünde açıklanacaktır. Bölüm 2: Alım Satım Sistemleri".

 

Bu makalenin ek arşivinin içeriği ("Blau_Indicators_MQL5_en.zip"):

Dosya Açıklama
İçerme dosyası. Konum: "terminal_data_folder\MQL5\Include"
 WilliamBlau.mqh  
Göstergeler. Konum: "terminal_data_folder\MQL5\Indicators"
   Momentum tabanlı göstergeler
 Blau_Mtm.mq5  Momentum Göstergesi (q-dönemi momentumu, yumuşatılmış q-dönemi momentumu)
 Blau_TSI.mq5  Gerçek Güç İndeksi (Normalize edilmiş yumuşatılmış q-dönemi momentumu)
 Blau_Ergodic.mq5  Ergodik Osilatör (gerçek güç indeksi tabanlı)
   Stokastik tabanlı göstergeler
 Blau_TStoch.mq5  Stokastik (q-dönemi stokastik, yumuşatılmış q-dönemi Stokastik)
 Blau_TStochI.mq5  Stokastik indeks (normalize edilmiş yumuşatılmış q-dönemi Stokastik)
 Blau_TS_Stochastic.mq5  Stokastik TS-osilatörü (Stokastik İndeks tabanlı)
   Stokastik Momentum tabanlı göstergeler
 Blau_SM.mq5  Stokastik Momentum (q-dönemi Stokastik Momentum, yumuşatılmış q-dönem Stokastik Momentumu)
 Blau_SMI.mq5  Stokastik Momentum İndeksi (Yumuşatılmış normalize edilmiş q-stokastik momentum RSI'sı)
 Blau_SM_Stochastic.mq5  Stokastik SM-Osilatörü (Stokastik Momentum İndeksi tabanlı)
   Piyasa trendinden sapma tabanlı göstergeler
 Blau_MDI.mq5  Ortalama Sapma Göstergesi (Ortalama Sapma, yumuşatılmış ortalama sapma)
 Blau_Ergodic_MDI.mq5  Ergodik MDI-osilatörü (Ortalama Sapma göstergesi tabanlı)
   Hareketli Ortalama Yakınsama/Iraksama tabanlı göstergeler
 Blau_MACD.mq5  Hareketli ortalamaların yakınsama/ıraksama göstergesi (MACD, yumuşatılmış MACD)
 Blau_Ergodic_MACD.mq5  Ergodik MACD-osilatörü (MACD göstergesi tabanlı)
   Mum Grafik Momentumu tabanlı göstergeler
 Blau_CMtm.mq5  Mum Grafik Momentumu Göstergesi (q-dönemi Mum Grafik Momentumu, yumuşatılmış q-dönemi Mum Grafik Momentumu)
 Blau_CMI.mq5  Mum Grafik Momentumu İndeksi (normalize edilmiş yumuşatılmış q-dönemi Mum Grafik Momentumu, q-dönemi Mum Grafik Momentumunun mutlak değerine göre normalize etme)
 Blau_CSI.mq5  Mum Grafik İndeksi (normalize edilmiş yumuşatılmış q-dönemi Mum Grafik Momentumu, q-dönemi mum grafik uzunluğuna göre normalize etme)
 Blau_Ergodic_CMI.mq5  Ergodik CMI-osilatörü (Mum Grafik Momentumu İndeksi tabanlı)
 Blau_Ergodic_CSI.mq5  Ergodik CSI-osilatörü (Mum Grafik İndeksi tabanlı)
   Bileşik Momentum tabanlı göstergeler
 Blau_HLM.mq5  Sanal Kapanış Göstergesi (q-dönemi Bileşik Yüksek-Düşük Momentum, yumuşatılmış q-dönemi Bileşik Yüksek-Düşük Momentum)
 Blau_DTI.mq5  Yönlü trend indeksi (normalize edilmiş yumuşatılmış q-dönemi Bileşik Yüksek-Düşük Momentum)
 Blau_Ergodic_DTI.mq5  Ergodik DTI-osilatörü (Yönlü Trend İndeksi tabanlı)

MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal makale: https://www.mql5.com/ru/articles/190

Ekli dosyalar |
Önceden tanımlanmış risk ve R/R oranına dayalı etkileşimli yarı otomatik sürükle ve bırak Uzman Danışman (EA) oluşturma Önceden tanımlanmış risk ve R/R oranına dayalı etkileşimli yarı otomatik sürükle ve bırak Uzman Danışman (EA) oluşturma
Bazı yatırımcılar tüm alım-satımları otomatik olarak yürütür ve bazıları birkaç göstergenin çıkışına bağlı olarak otomatik ve manuel alım-satımları karıştırır. Sonraki grubun bir üyesi olarak risk ve ödül seviyelerini doğrudan grafikten dinamik olarak değerlendirmek için etkileşimli bir araca ihtiyacım vardı. Bu makale, önceden tanımlanmış hisse senedi riski ve R/R oranı ile etkileşimli yarı otomatik bir Uzman Danışman (EA) uygulamanın bir yolunu sunacaktır. Uzman Danışman (EA) riski, RR ve lot boyutu parametreleri EA paneli üzerinde çalışma süresi boyunca değiştirilebilir.
Spektrum Analizörü Oluşturma Spektrum Analizörü Oluşturma
Bu makale, okuyucularını MQL5 dilinin grafik nesnelerini kullanmanın olası bir varyantı hakkında bilgilendirmeyi amaçlamaktadır. Ayrıca, grafik nesneleri kullanarak basit bir spektrum analizörü yönetme panelini uygulayan bir gösterge analiz edilmektedir. Makale, MQL5'in temelleri hakkında bilgi sahibi olan okuyuculara yöneliktir.
CChartObject sınıfına dayalı yeni GUI pencere öğelerinin tasarlanması ve uygulanması CChartObject sınıfına dayalı yeni GUI pencere öğelerinin tasarlanması ve uygulanması
GUI arayüzlü yarı otomatik Uzman Danışman (EA) üzerine önceki makaleyi yazdıktan sonra arayüzün daha karmaşık göstergeler ve Uzman Danışman (EA) için bazı yeni işlevlerle geliştirilmesinin istendiği ortaya çıktı. MQL5 standart kitaplık sınıfları ile tanıştıktan sonra yeni pencere öğelerini uyguladım. Bu makale, göstergelerde ve Uzman Danışmanlarda (EA) kullanılabilecek yeni MQL5 GUI pencere öğelerini tasarlamaya ve uygulamaya yönelik bir işlemi açıklamaktadır. Makalede sunulan pencere öğeleri CChartObjectSpinner, CChartObjectProgressBar ve CChartObjectEditTable’dır.
Ek Arabellekler Kullanmadan Ara Hesaplamalar için Fiyat Serilerinin Ortalamasını Alma Ek Arabellekler Kullanmadan Ara Hesaplamalar için Fiyat Serilerinin Ortalamasını Alma
Bu makale, en basit ve tek tür sınıflarda paketlenmiş geleneksel ve sıra dışı ortalama alma algoritmaları hakkındadır. Bunlar, göstergelerin neredeyse tüm gelişmelerinde evrensel kullanım için tasarlanmıştır. Umarım önerilen sınıflar, özel ve teknik göstergelerin 'hantal' çağrılarına iyi bir alternatif olur.