English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
preview
Hareketli ortalamalar ile neler yapılabilir?

Hareketli ortalamalar ile neler yapılabilir?

MetaTrader 5Örnekler | 29 Ağustos 2022, 07:49
483 0
Oleh Fedorov
Oleh Fedorov

Giriş

Çalışan birkaç ticaret sistemim var. Genel olarak konuşursak, her tikte hesaplanan göstergeleri kullanmıyorum, onun yerine düz çizgileri kullanan göstergeleri tercih ediyorum. Ancak bazen, fiyat grafiğine ilişkin algımı geliştiren, hatta tamamen ticaret vizyonumu değiştiren, ama aynı zamanda üzerinde ek hesaplamalar gerektiren fikirlerle karşılaşıyorum.

İşte bu makalede de, karşılaştığım bu fikirlerden bazılarını sizlere sunacağım. Bu fikirler, en popüler ve anlaşılır göstergeler olan hareketli ortalamaları kullanacaktır.

En basit versiyonunda, gösterge değeri, herkesçe bilinen ortalama formülü kullanılarak hesaplanır:

MA[i] = (Price[i]+Price[i+1]+...+Price[i+MAPeriod])/MAPeriod

Burada MA[i] dizinin bir sonraki elemanıdır, çizgi üzerindeki bir noktadır. Price[i], mevcut çubuğun fiyatı, MAPeriod ise, ortalama için hesaplamada kullanılacak periyot sayısıdır.

Elbette istediğimiz fiyatı uygulayabiliriz: Açılış, Kapanış, Yüksek, Düşük, ağırlıklı ortalama değerler vb. Standart bir gösterge, hesaplamada kullanılacak hem fiyat türünü hem de basitten karmaşığa ilgili hesaplama yöntemini seçmemize olanak tanır. Örnekler sunarken, hesaplama yöntemini seçmeyi size bırakıyorum. Bu durum örneklerdeki fikirleri kavramak için bir önem arz etmez. Tüm örnekler, Simple Moving Average (SMA), Exponential Moving Average (EMA) veya başka herhangi bir hesaplama yönteminin kullanılmasına bakılmaksızın oldukça iyi bir şekilde çalışmaktadır. Dolayısıyla makalede, tüm ekran görüntülerinde ve varsayılan gösterge ayarlarında SMA kullanacağım. Aksi belirtilmediği takdirde tüm göstergeler Kapanış fiyatlarını kullanacaktır. Onları iyileştirmek üzere bu parametreler üzerinde denemeler yapabilirsiniz.

Tek bir çizgiden bahsediyorsam, genellikle 10 çubukluk varsayılan periyot değerini kullanacağım. Göstergede farklı periyotlara sahip birkaç çizgi kullanılıyorsa, bu çizgilerin periyotları çoğunlukla 5 ve 8 olacaktır. Bu makalede farklı periyotlara sahip ikiden fazla çizgi kullanmıyorum.

Renkler şu şekilde olacaktır: kırmızı - hızlı, turuncu - yavaş. Eğer başka bir şey kullanırsam, bunu metinde belirteceğim.


Şablon gösterge

Grafiklerde çeşitli yaklaşımları kullanırken elde edilen sinyalleri görselleştirmek amacıyla birkaç gösterge oluşturdum. Bu göstergeler, standart örneklerde bulunan standart MACD’ye benzer bir şablona dayanmaktadır. Şablon kodunun tamamını burada göstermenin bir anlamı olmadığını düşünüyorum.

Her bir göstergede, bir veya daha fazla hareketli ortalama ve ek olarak bazen de oklara olan mesafeyi ayarlamak veya kanal çizgileri çizmek için ATR kullanacağım.

Bazı fikirleri gösterge grafik penceresindeyken yansıtmak daha kolay olurken, bazı fikirler için de bu, gösterge ayrı bir penceredeyken daha kolay olur. Aşağıdaki özellikler kullanılarak bu ayarlama yapılabilir. Grafik penceresinde gösterge için şu özellik kullanılır:

#property indicator_chart_window

Ayrı bir pencerede gösterge için de şu özellik kullanılır:

#property indicator_separate_window

Bu durumda, ara ara şu özelliği kullanarak pencere yüksekliğini ayarlayacağım:

#property indicator_height 100

Elbette, bu özelliğin değeri değiştirilebilir.

Arabellek adlarının sonunda "Buffer" son eki bulunur. Örneğin, standart ok arabellekleri ArrowDownBuffer ve ArrowUpBuffer olarak adlandırılacaktır. Gösterge çizgiler çiziyorsa, arabellekler ilgili çizgilerin amaçlarına uygun olarak adlandırılacaktır.

Tanımladığım tüm global değişkenler "ext" ön ekine sahiptir (eğer arabellek değillerse). Örneğin, extATRData, ATR göstergesinin kaynak verilerini içeren bir global değişkendir.

Arabellekleri "seri" moduna geçmeden kullanacağım.

Başlatma sırasında tüm boş değerler 0 olacak şekilde ayarladım:

  PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
  PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0);
  PlotIndexSetDouble(2,PLOT_EMPTY_VALUE,0);

Böylece, yalnızca okları veya çizgileri görüntüleme koşullarını, yani yalnızca ana döngüde kalanları belirtmemiz gerekecek.

Göstergenin yeniden çizilmesinden kaçınmaya çalışıyorum, bu amaçla çizim sıfırıncı mum üzerinde gerçekleştirilecek, ancak hesaplamalar için kapanmış mumun verileri kullanılacak.


Fiyatın çizgiyi çaprazlaması (trend)

En basit olarak, МА çizgisi "doğal" haliyle tek başına kullanılır. Sanırım hepiniz ekranlarınızda benzer bir görüntü görmüşsünüzdür:

"Temiz" MA

Şekil 1. Simple Moving Average

Çoğu durumda, yatırımcılar trendi takip etmek için MA’yı kullanır. Trend, çizginin aynı tarafında bulunan bir dizi mum olarak tanımlanabilir. Örneğin, çizginin altında ikiden fazla mum kapanırsa, bu, düşüş trendidir, satış işlemlerine giriş düşünülebilir. Kapanış fiyatları çizginin üzerindeyse, bu, yükseliş trendidir, buna bağlı olarak da alış işlemlerine giriş düşünülebilir. Fiyat çizgiyi çaprazlarsa, trend değişiyor demektir.

Fiyatın ortalamayı çaprazlamasını izlememize olanak sağlayan koşullar, örneğin aşağıdaki gibi olabilir:

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      ((close[i-1]<extMAData[i-1]
        && open[i-1]>extMAData[i-1]
       )
       ||(close[i-2]>extMAData[i-2]
          && open[i-2]>extMAData[i-2]
          && close[i-1]<extMAData[i-1]
          && open[i-1]<extMAData[i-1]
         )
      )

    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }
    else
      if(
        ((close[i-1]>extMAData[i-1]
          && open[i-1]<extMAData[i-1]
         )
         ||(close[i-2]<extMAData[i-2]
            && open[i-2]<extMAData[i-2]
            && close[i-1]>extMAData[i-1]
            && open[i-1]>extMAData[i-1]
           )
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   } // main cycle

Açılış fiyatlarını kontrol etmek yerine, dikkatimizi yalnızca mevcut ve önceki çubukların Kapanış fiyatlarına odaklayabiliriz. Kapanış fiyatları çizginin zıt taraflarında yer alıyorsa, fiyat çizgiyi çaprazlıyor demektir.

Gösterge dosyası MA-Breaking.mq5'tir. Grafik üzerinde çalıştırıldığında aşağıdaki görüntü elde edilir (10 barlık standart çizgi periyodu için):

MA - çaprazlama

Şekil 2. Fiyatın ortalamayı çaprazlaması

Benim düşünceme göre, bu fikir ek filtreleme olmadan pek kullanışlı olmayacaktır. Yukarıdaki görüntüye baktığımızda, yukarı okların sayısı, trend alanında bile aşağı okların sayısıyla neredeyse eşleşiyor gibi görünüyor. МА periyodu artırıldığında ok sayısı azalıyor, ancak geri dönüşü olmayan bir trende sahip keskin bir çaprazlama oldukça nadir görülen bir durum olduğundan bu da pek yardımcı olmayacaktır. Keskin bir hareketten sonra çoğunlukla bir yatay hareket meydana gelir. Dolayısıyla, filtreler arayacağız...


Destek/direnç çizgisi olarak MA

Çizgiyi kullanmanın bir sonraki oldukça net yolu, onu destek/direnç çizgisi olarak kullanmaktır. Fiyat çizgiye dokunur ancak onu çaprazlayamazsa (aynı tarafta kapanırsa), ticaret sinyali elde etmiş oluruz. Örneğin, 17 Şubat’ta 3 aşağı yönlü ve 1 yukarı yönlü (başlangıçta) hareket noktası görebiliriz.

Bu kuralı doğası gereği hem ilk işlemi açmak hem de mevcut olana eklemek için kullanabiliriz.

Bu fikir MA-Support.mq5 dosyasında gösterilmektedir.

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      (high[i-1]>=extMAData[i-1]
       && close[i-1]<extMAData[i-1]
       && open[i-1]<extMAData[i-1]
      )
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }

    else
      if(
        (low[i-1]<=extMAData[i-1]
         && close[i-1]>extMAData[i-1]
         && open[i-1]>extMAData[i-1]
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   } // Main cycle end

İşte kodun çıktısı:

Destek/direnç çizgisi olarak МА

Şekil 3. Destek/direnç çizgisi olarak MA

Bu, bir önceki seçenekten çok daha iyi görünüyor. Kârı alma seviyeleri kullanırsak veya hatta aynı yöndeki okları kullanarak emirleri biriktirip ters yönlü okla çıkış yaparsak (görünüşe bakılırsa, terse dönüş kullanarak), karlı ticaret oldukça olası görünüyor.

МА’nın periyodu ne kadar yüksek olursa, çizginin açısı o kadar düşük olur ve fiyattan da o kadar uzakta bulunur. Böylece, çaprazlama ve destek/direnç sinyalleri daha az sıklıkta gelir, ancak destek/direnç seviyeleri daha güvenilir hale gelir. Karşılaştırma için 20 periyotluk bir grafik göstereceğim. Destek/direnç sinyallerinin daha az meydana geldiğini görebiliriz. Bununla birlikte, sinyaller muhtemelen daha güvenilir olacaktır, bu nedenle zararı durdur seviyeleri kısaltılabilir.

Destek/direnç çizgisi olarak МА (artmış periyot)

Şekil 4. Daha yüksek periyotlu (20) MA

Örneğin 17 Şubat saat 4'te kırmızı çizginin alış sinyali vereceğini ve dolayısıyla zarar edeceğimizi, turuncu olanın ise satış sinyali vereceğini görebiliriz. Ama öte yandan, kırmızı çizgide de, pozisyona ekleme yapmak için sabah 8, sabah 10 ve öğleden sonra 3'teki sinyalleri kullanabiliriz.

MA’nın daha yüksek periyoda sahip olması durumunda, sinyaller daha geç gelmektedir, bu da potansiyel kârın bir kısmının kaybolmasına neden olabilir, ancak bazen sizi çok sık yapılan işlemlerden de kurtarabilir.


Eğim

Çizginin eğimi ne kadar dik olursa, fiyat o kadar hızlı hareket eder ve trendin bir sonraki mumda devam etme olasılığı o kadar artar.

Eğimi ölçmenin en kolay yolu, mevcut ve önceki değer arasındaki farkı kullanmaktır. Fark pozitif ise çizgi yukarı doğru hareket ediyor, fark negatif ise çizgi aşağı doğru hareket ediyor demektir.

MA-Slope.mq5 dosyasındaki ana döngünün kodu aşağıdadır:

//--- main cycle
  for(i=start+SlopeShift*2; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]);

    //---

    if(
      slopeIndex<0

    )
     {
      SlopeDownBuffer[i]=slopeIndex;
     }
    else
      if(
        slopeIndex>0
      )
       {
        SlopeUpBuffer[i]=slopeIndex;
       }
   } // main cycle

Burada SlopeShift, mevcut çubuğun MA değerinden kaç çubuk önceki çubuğun MA değerinin çıkarılacak olduğunu belirtir. Varsayılan değer, birdir. Ancak bu değeri artırarak, örneğin iki veya üç çubuk önceki MA değeri için fark alınarak oldukça ilginç sonuçlar elde edilebilir.

Ortaya çıkan verilerin, histogram şeklinde görüntülendiğinde, daha net olarak anlaşıldığını düşünüyorum. Sonuç aşağıda gösterilmektedir:

МА - Eğim histogramı

Şekil 5. MA - Eğim histogramı

Görüntü oldukça ilginç görünüyor.

İlk olarak, hareketteki rastgele dalgalanmalar filtreleniyor ve böylece hareketi daha rahat bir şekilde izleyebiliyoruz. Ve şu yorumu yapabiliyoruz: eğer çizgi yalnızca bir, iki veya üç çubuk boyunca aynı yönde ilerliyorsa, bir trend değişiminden bahsetmek muhtemelen erkendir. Elbette, bir trend değişimini kaçırmamak için son derece dikkatli olmalıyız.

İkinci olarak, fiyat hareketinin büyüklüğü hemen görülebilir. Histogramdaki sütunların yüksekliği belirli bir değerden azsa, bu, büyük olasılıkla bir yatay hareketle karşı karşıyayız demektir. Dolayısıyla, 2-3 çubuktan daha uzun süren ancak eğimin boyutunun az olduğu yönde işlem yapmak mantıksız olacaktır.

Üçüncü olarak, grafiğe bakıldığında, trend segmentlerindeki çizgi neredeyse monoton bir şekilde yükseliyor veya düşüyor gibi görünmektedir, ancak histograma bakıldığında, çizginin çubuktan çubuğa gerçek değişim oranının büyük farklılıklar gösterdiği dikkat çekicidir. Bu, muhtemelen henüz fark edemediğimiz bir şeyi görmemize yardımcı olacak bir tür göreceli değerin var olduğu izlenimini vermektedir.

Onun üzerinde çalışalım (МА-Slope-Index-First.mq5)... Kod:

//--- main cycle
  for(i=start+SlopeShift*3; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]+Point()/100)
               /(extMAData[i-2]-extMAData[i-2-SlopeShift]+Point()/100);
    //---

    if(
      slopeIndex<0
    )
     {
      SlopeDownBuffer[i]=slopeIndex;
     }
    else
      if(
        slopeIndex>0
      )
       {
        SlopeUpBuffer[i]=slopeIndex;
       }
   } // main cycle

Bölünene ve bölene küçük bir değer (Point()/100) eklemek sonucu çok fazla değiştirmez, ancak 0'a bölme hatasını önler.

Aşağıdaki görüntü elde edilir:

MA - Göreceli eğim endeksi

Şekil 6. MA’nın eğiminin göreceli endeksi

Piyasa yönlerinin kesişme noktalarında keskin tepeler görülebilir. Grafiği birkaç çubuk sola kaydırırsak, fark daha da belirgin hale geliyor.

MA - Göreceli eğim endeksi (grafik sola kaydırıldı)

Şekil 7. MA’nın eğiminin göreceli endeksi (grafik sola kaydırıldı)

Şekil 7, histogramdaki tepelerin oldukça güçlü bir hareketin sınırlarını nasıl işaretlediğini çok açık bir şekilde göstermektedir. Tepelerin değerleri ile arada kalan veri dizisi arasındaki farkın da epeyce büyük olduğu görülmektedir. Tepeler ile diğer veriler arasındaki farkın bu şekilde oldukça büyük olması ve buna ek olarak tepelerin de birbirlerinden boyut olarak çok farklı olması, bizi bir sonraki adıma geçmeye itiyor. Tepelere dayalı olarak piyasanın yön değişimi çok açık olduğu için, göreceli eğim endeksi histogramının diğer verilerini analiz etmenin pek bir anlamı olduğunu düşünmüyorum. Bunun yerine, çıktıyı ikili yaparak onu daha kaba hale getirebiliriz.. Örneğin, şu şekilde (МА-Slope-Index-Bin.mq5):

//--- main cycle
  for(i=start+SlopeShift*3; i<rates_total && !IsStopped(); i++)
   {
    SlopeDownBuffer[i]=0;
    SlopeUpBuffer[i]=0;
    slopeIndex=(extMAData[i-1]-extMAData[i-1-SlopeShift]+Point()/100)
               /(extMAData[i-2]-extMAData[i-2-SlopeShift]+Point()/100);
    //---

    if(
      slopeIndex<=-SlopeThreshold
    )
     {
      SlopeDownBuffer[i]=-1;
     }
    else
      if(
        slopeIndex>=SlopeThreshold
      )
       {
        SlopeUpBuffer[i]=1;
       }
   } // Main cycle



Burada SlopeThreshold, ilk göreceli eğim endeksi histogramındaki sütunların yükseklikleri için eşik değerdir, bu değere dayalı olarak, eğer sütun eşik değeri aşıyorsa, gösterge penceresine işaret şeklinde çizilecektir. Aşağıdaki görüntüde parametre değeri 5'tir.

MA - Göreceli eğim endeksi (ikili)

Şekil 8. MA’nın eğiminin göreceli endeksi (ikili). SlopeThreshold=5.

Aşağıda SlopeThreshold=15 için görüntü yer almaktadır:

Göreceli eğim endeksi, SlopeThreshold=15

Şekil 9. MA’nın eğiminin göreceli endeksi (ikili). SlopeThreshold=15.

Kesinlikle bu işaretler daha yakından bakılmayı hak ediyor!

İncelendiğinde, bu işaretlerin varlığında, ilgili mumun veya ondan sonraki 2-3, hatta daha fazla mumun yönünün değişebileceğini göstermektedir. Her şekilde, trendin, işaretin rengine, ana yöne ve ilgili muma olan bağlılığı açıktır. Tabii ki, örneğin hesap tablolarıyla ilgili makalemde anlattığım şekilde, istatistikler hesaplanmalıdır. Ancak, burada sunulan diğer fikirlerle birlikte dahi, gösterge şimdiden umut verici görünüyor...

Elbette histogram üzerindeki ikili çizgilerin (işaretlerin), önceki göstergelere benzer şekilde kolayca oklarla değiştirilebileceğini düşünüyorum.


Tek hareketli ortalamaya dayalı kanallar

Yukarıda açıklanan fikirlere ek olarak, fiyat hareketi volatilitesini de dikkate almak için hareketli ortalamalara dayalı kanallar oluşturabiliriz. Onları oluşturmak için birçok seçenek mevcuttur. Ben ise sadece iki tanesini ele alacağım.

İlki çok basittir çünkü yalnızca standart MA göstergesi gerektirir. Göstergeyi grafiğe eklerken basitçe seviyeler eklemeliyiz. Buradaki tek kötü durum, her zaman dilimi için bu seviyelerin farklı olması gerektiğidir. Zaman dilimini her değiştirdiğimde bu seviyeleri girmekten kaçınmak adına onları tek bir "paket" halinde topladım. JPY için şu şekildedir:

Basit kanal - MA

Şekil 10. Kanal seviyelerinin listesi

H1'de görüntü aşağıdaki gibi görünmektedir:

Seviyelere sahip kanal

Şekil 11. Seviyelerin görünümü (H1)

Seviyeler burada destek/direnç seviyeleri olarak ayarlanmıştır. Dolayısıyla, eğer mum seviyeye dokunur (veya ona oldukça yaklaşır) ve devamında ondan geri dönerse, bu, trende karşı giriş için sinyal anlamına gelir. Örneğin, yukarıdaki ekran görüntüsünde kanal 22 Şubat'ta satış için iyi bir an meydana geldiğini gösteriyor. Emri, sinyal mumunun ortasına veya sonuna yerleştirebiliriz (buradaki durum için, geri dönüşten sonra, sinyal mumunun Düşük fiyatına - 115.100'e emir yerleştirilebilir, 115.265'e de durdurma seviyesi girilebilirdi). Minimum hedef, hareketli ortalamaya dokunmaktır, nihai hedef ise, aynı kanalın karşı sınırına dokunmaktır.

Burada, fiyatın dar kanalı çaprazlamasına dayalı da ticaret yapmak mümkündür. Örneğin, 22 Şubat'ta saat 9’daki mumun, dar kanalın üst sınırının üzerinde kapandığı görülmektedir. İki boğa tipinde mum ortalamanın üzerinde kapanırken, aralarındaki ayı tipinde mum alt sınırın ötesine geçememiştir. Ve aynı zamanda, MA'nın eğimi de açık bir şekilde azalmaktadır (MA-Slope göstergesini grafiğe ekleyip bakarsak bu çok net şekilde görülebilir). Tüm bunlar net bir alış sinyali olarak kullanılabilir. Durdurma seviyesi için 114.570 belirlenebilir. Çıkış noktası da, seviyeler kullanılarak hesaplanabilir. Buna dayalı olarak, onu da 115.230 olarak ayarlayabiliriz. Alternatif şekilde, mumlara bağlı şekilde takip eden durdurmayı kullanabilir veya başka bir yöntem tercih edebiliriz.

Bu zaman diliminde yalnızca iki kanalın görülebildiğine dikkat edin: en içteki ve ondan biraz daha büyük olan. Daha yüksek bir zaman dilimine, örneğin D1'e geçersek, +-50 kanalı neredeyse gizlenirken, +-300 ve +-1500 kanalları da artık ana kanallar haline gelir. Aylık zaman dilimi için olan kanal da D1’de bazen görülebilir, hatta sinyaller bile sağlayabilir. Ancak zaman dilimindeki en görünür kanallar hangisiyse, onların sinyal sağlama açısından kullanılması en uygun olacaktır.

D1’de kanallar

Şekil 12. Seviyelerin görünümü (D1)

Benzer bir görüntü haftalık/aylık zaman diliminde de olacaktır. Onlar için en uygun olan dördüncü kanadır, üçüncü kanal ise yardımcı kanal olarak kullanılabilir.

En içteki kanal M1-M15 için tasarlanmıştır.

Ayarlama prensibi açıktır: gerekli zaman dilimine geçiyoruz ve seviyenin boyutunu, fiyat alt, üst seviyelere minimum sayıda temas edecek, ancak aynı zamanda bu temas noktaları arasındaki mesafe mümkün olan maksimum düzeyde olacak şekilde seçiyoruz. Bunu yapmanın en kolay yolu, zaman dilimindeki en önemli düzeltmenin boyutunu ölçmek ve bu değeri 2'ye bölmektir. Aşağıdaki animasyon bu işlemi göstermektedir:

Kanal boyutunu ölçme

Şekil 13. Kanal volatilitesini ölçme (D1)

Bu kaba ölçümlerin devamında, boyutların daha hassas bir şekilde ayarlanması gerekebilir, ki bu da oldukça kolaydır...


İki hareketli ortalamaya dayalı kanallar (ATR3x5)

Yukarıda açıklanan kanallar iyidir ancak birkaç dezavantajı vardır.

İlk olarak, kanal boyutu her zaman dilimi ve sembol için manuel olarak seçilmelidir. Süreci otomatikleştirmek muhtemelen mümkündür, ancak zordur.

İkinci olarak da, seviyeler arabelleklerde depolanmamaktadır, bu da onları programlayarak kullanmanın zor olacağı anlamına gelir.

Hareketli ortalamalara ve ATR'a dayalı kanal ise bu dezavantajlara sahip değildir. Fikir basittir. Periyodu 3 olan iki Moving Average göstergesi alıyoruz. Birini Yüksek fiyatlara (high) uygularken, diğerini Düşük fiyatlara (low) uyguluyoruz. Ardından, elde edilen çizgileri uygun yönde (alttaki aşağı, üstteki yukarı olacak şekilde) 5 periyotluk ATR mesafesi kadar kaydırıyoruz.

Ve böylece kanal hazır! Her sembole ideal şekilde uyum sağlar, çaprazlamalar oldukça nadir olacağı için çoğunlukla destek/direnç olarak çalışacaktır. Ayrıca kanal sınırlarına dokunuşları tespit etmek amacıyla oklar ekledim.

//--- main cycle
  for(i=start+3; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    MAUpBuffer[i]=extMAUpData[i]+extATRData[i]*DistanceCoefficient;
    MADownBuffer[i]=extMADownData[i]-extATRData[i]*DistanceCoefficient;

    if(
      (high[i-1]>=MAUpBuffer[i-1]
       && close[i-1]<MAUpBuffer[i-1])
      ||(
        close[i-2]>MAUpBuffer[i-2]
        && close[i-1]<MAUpBuffer[i-1]
      )
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/5;
     }
    else
      if(
        (low[i-1]<=MADownBuffer[i-1]
         && close[i-1]>MADownBuffer[i-1])
        ||(
          close[i-2]<MADownBuffer[i-2]
          &&close[i-1]>MADownBuffer[i-1]
        )
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/5;
       }
   }// main cycle

Burada DistanceCoefficient, göstergeyi belirli koşullara göre ayarlamak için kanal sınırlarına olan mesafeyi değiştirmemize olanak sağlayan bir gösterge parametresidir. Parametre herhangi bir kesirli değer alabilir. Ancak, 2'den fazla ayarlamanın pek bir anlamı yoktur, çünkü bu durumda oklar neredeyse tamamen kaybolur, yani hiçbir sinyal oluşmaz.

ART3x5 kanalı

Şekil 14. ATR3x5 kanalı

Elbette, gösterge burada açıklanan (veya açıklanmayan) herhangi bir başka gösterge ile birlikte kullanılabilir.

Görüntüye bakarken fiyatın göstergenin sınırlarıyla ile nasıl etkileşimine girdiğine dikkat etmenizi öneririm. Bu yardımcı olabilir.


Farklı periyotlarla birden fazla gösterge

Şu ana kadar, ticaret sinyallerini almak için tek bir MA çizgisini nasıl kullanabileceğimizi inceledik. Tabi ki, farklı periyotlara sahip göstergeler de eklenerek ticarete girişin doğruluğu büyük ölçüde artırılabilir.

O halde, periyotları 5 ve 8 olan iki çizgiyle bir grafik oluşturalım. Periyotlar Fibonacci serisinden isteğe bağlı olarak alınmıştır. Periyotlardan biri "hızlı" çizgiyi tanımlarken, diğeri "yavaş" çizgiyi tanımlar.

Aynı anda iki MA

Şekil 15. Tek grafik üzerinde iki MA

Yukarıda anlattığımız özelliklere ek olarak, burada, iki MA’nın birbirleriyle ilişkisi de incelenerek analiz yapılabilir: birbirlerini çaprazlamaları. МА'lar arasındaki mesafe de değerlendirilebilir.

Bu koşullar, çizgilerin her biri tarafından oluşturulan sinyalleri güçlendirebilir/zayıflatabilir veya bağımsız giriş sinyalleri de oluşturabilir.


İki MA’nın birbirleriyle ilişkisi. Çaprazlama

Hızlı MA yavaş olanın üzerinde yer alıyorsa, ilgili zaman diliminde, büyük olasılıkla yükseliş trendinde olduğumuzu söyleyebiliriz ve sonraki mumların boğa tipinde olması çok muhtemeldir. Bu sinyallerin kalitesini artırmak için elbette MA’ların eğimi gibi diğer parametreler de dikkate alınmalıdır.

Hızlı MA yavaş olanın altında yer alıyorsa, ilgili zaman diliminde, büyük olasılıkla düşüş trendinde olduğumuzu söyleyebiliriz ve sonraki mumların ayı tipinde olması çok muhtemeldir.

Dolayısıyla, hızlı MA yavaş MA’yı çaprazladığında bir trend değişiminden söz edebiliriz.

Hadi MA'ların çaprazlamasına yanıt veren bir gösterge yazalım. Ek olarak, yanlış girişleri azaltmak adına yatay hareketleri de hesaba katmalıyız. Bunun için, MA’ların eğiminin şiddeti dikkate alınabilir. Sinyalleri aramak için aşağıdaki kodu kullanabiliriz (MA2-Breaking):

//--- main cycle
  for(i=start+3+SlopeShift*2; i<rates_total && !IsStopped(); i++)
   {
    ArrowDownBuffer[i]=0;
    ArrowUpBuffer[i]=0;

    //---

    if(
      extMAFastData[i-1]<extMASlowData[i-1]
      && extMAFastData[i-2]>=extMASlowData[i-2]
      && MASlope(extMAFastData,i-1)<-SlopeThreshold
      && MASlope(extMASlowData,i-1)<SlopeThreshold/SlowDelimiter
    )
     {
      ArrowDownBuffer[i]=high[i]+extATRData[i]/3;
     }
    else
      if(
        extMAFastData[i-1]>extMASlowData[i-1]
        && extMAFastData[i-2]<=extMASlowData[i-2]
        && MASlope(extMAFastData,i-1)>SlopeThreshold
        && MASlope(extMASlowData,i-1)>-SlopeThreshold/SlowDelimiter
      )
       {
        ArrowUpBuffer[i]=low[i]-extATRData[i]/3;
       }
   } // main cycle

Burada MASlope, Eğim bölümünde verilen örneğe benzer şekilde MA’nın eğimini hesaplayan bir fonksiyondur. İlgili çizginin veri dizisini ve hesaplamaların yapılacağı çubuğun indeksini parametre olarak kabul eder.

SlopeThreshold, hızlı MA’nın eğim histogramındaki sütunların yükseklikleri için eşik değerdir. Hızlı MA’nın eğimi çaprazlama sırasında çok küçükse, büyük olasılıkla bir yatay hareketle karşı karşıyayızdır. Yatay hareket genellikle çok sayıda yanlış pozitif oluşturur, bunun sonunda da zararlara neden olur.

SlowDelimiter, yavaş MA’nın eğim historamına uygulanacak eşiğin sınırlayıcısıdır. Bazen çaprazlamadan sonra, örneğin yükseliş için, hızlı MA çoktan yukarı doğru yönelmişken, yavaş MA yeni yeni tersine dönüyor olabilir, oldukça iyi bir sinyal bu süreçte meydana gelebilir. Diğer bir deyişle,

MASlope(extMASlowData,i-1)>-SlopeThreshold/SlowDelimiter

koşulu şu anlama gelir: yavaş MA’nın eğimi ya çok küçük negatif (hafif boyutta aşağı yönde) ya sıfır ya da pozitif olabilir, ancak keskin bir negatif olamaz.

Göstergeyi saf haliyle kullanırsak, eşik ve sınırlayıcı her bir enstrüman ve zaman dilimi için ayrı ayrı seçilmelidir. SlopeThreshold=0.017 ve SlowDelimiter=5 olacak şekilde USDJPY H1 için elde edilen sonuç aşağıda yer almaktadır:

Eğimi dikkate alan MA çaprazlama sinyalleri

Şekil 16. Eğimi dikkate alan MA çaprazlama sinyalleri

Okların daha net görülebilmesi için görüntüde çizgiler yoktur. Doğru kârı alma değerini seçersek (veya seviyelere göre çıkış yaparsak), çok yıkıcı olmayan zararı durdur seviyeleri ayarlayarak hemen hemen her oktan kâr elde edebileceği görülmektedir.

Aynı grafiğe daha yakından bakalım:

Eğimi dikkate alan MA çaprazlama sinyalleri (yakınlaştırılmış)

Şekil 17. Eğimi dikkate alan MA çaprazlama sinyalleri (yakınlaştırılmış)

Hatırlayabileceğiniz gibi, sinyal sıfır indeksli mumda gelmektedir. Ancak, bir önceki mum analiz edilmektedir. Dolayısıyla, okun neden çizildiğini anlamak için yeşil çizginin olduğu çubuğa bakmamız gerekir.

Neden grafikte sağ tarafta iki ok yok? İkisinde de eğim, yavaş veya hızlı MA için eşiği aşmamıştır, bu nedenle gösterge oraları yatay hareket olarak kabul etmiştir. Ancak, oralarda eşiği göze almadan oluşacak sinyallerle işlemlere girmiş olsaydım, piyasa daha da yükseldiği ve daha iyi bir fiyata ikinci işlemden çıkmak mümkün olacağı için büyük olasılıkla homurdanmak adına herhangi bir nedenim olmazdı.

MA çaprazlama sinyalleri - trend devam ediyor

Şekil 18. MA çaprazlama sinyalleri - trend devam ediyor


Sonuç

Bu konuda hala söyleyeceklerim var, ancak bunları başka bir makaleye saklayacağım.

Bu makalede, piyasanın yönünü takip etmemize olanak sağlayan MA'larla ilgili temel şeyleri ele aldık.

MA’nın çeşitli şekilde kullanımına ilişkin fikirleri grafiksel olarak görselleştiren göstergelerin kodlarını inceledik.

Bu göstergeleri birlikte kullanarak MA’ya dayalı ticaret stratejilerini geliştirmenin yollarına değindik.

Bir sonraki makalede, hareketli ortalamalar ve onlardan türetilen göstergeler hakkındaki verilere dayanarak her bir mumun konumunu nasıl hesaplayabileceğimizi anlatmaya çalışacağım.

Makalede sağlanan bilgilerin sizin için yararlı olacağını umuyorum, ancak onların ticaretinizde size kârlılık sağlayacağının garantisi yoktur.

Ticaret yolunda kâr yoldaşınız olsun. Bir sonraki makalede görüşmek dileğiyle.

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

Ekli dosyalar |
jx-Breaking.mq5 (5.56 KB)
h9-Support.mq5 (5.22 KB)
lw-Slope.mq5 (4.66 KB)
ATR3x5.mq5 (7.34 KB)
wr2-Crossing.mq5 (6.5 KB)
Veri Bilimi ve Makine Öğrenimi (Bölüm 02): Lojistik Regresyon Veri Bilimi ve Makine Öğrenimi (Bölüm 02): Lojistik Regresyon
Veri sınıflandırması, bir algo yatırımcısı ve bir programcı için çok önemli bir şeydir. Bu makalede, evet veya hayırları, yükseliş ve düşüşleri, alış ve satışları belirlememize yardımcı olabilecek sınıflandırma lojistik algoritmalarından birine odaklanacağız.
Veri Bilimi ve Makine Öğrenimi (Bölüm 01): Lineer Regresyon Veri Bilimi ve Makine Öğrenimi (Bölüm 01): Lineer Regresyon
Yatırımcılar olarak sistemlerimizi ve kendimizi sayıların söylediklerine dayalı şekilde kararlar alma konusunda eğitmemizin zamanı geldi. Tüm dünyanın hareket ettiği şekilde, görsel veya sezgisel olarak değil, biz, bu genel dalganın yönüne dik olarak hareket edeceğiz.
ADX göstergesine dayalı bir ticaret sistemi nasıl geliştirilir? ADX göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?
Bu makalede de, en popüler göstergeleri kullanarak ticaret sistemleri oluşturma konulu serimize devam ediyoruz. Bu sefer ADX (Average Directional Index) göstergesinden bahsedeceğiz. Ticarette nasıl yararlı olabileceğini anlamak adına bu göstergeyi ayrıntılı olarak ele alacağız. Ayrıca basit stratejilerle nasıl kullanılacağını öğreneceğiz. Çünkü bir şeyi derinlemesine öğrenerek, onun hakkında daha fazla içgörü elde edebilir ve onu daha iyi kullanabiliriz.
Stochastic Oscillator göstergesine dayalı bir ticaret sistemi nasıl geliştirilir? Stochastic Oscillator göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?
Öğrenme serimize devam ediyoruz - temel bilgilerimizde yeni bir blok daha oluşturmak adına bu sefer de diğer bir popüler ve kullanışlı gösterge olan Stochastic Oscillator’ı inceleyeceğiz ve onu kullanarak bir ticaret sisteminin nasıl tasarlanacağını öğreneceğiz.