English Русский 中文 Español Deutsch 日本語 Português 한국어 Français Italiano
preview
Awesome Oscillator göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?

Awesome Oscillator göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?

MetaTrader 5Ticaret | 5 Ekim 2023, 09:45
305 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Giriş

En popüler teknik göstergelere dayalı ticaret sistemleri geliştirdiğimiz serimizin yeni makalesindeyiz. Bu makalede yeni bir teknik aracı öğreneceğiz: Awesome Oscillator göstergesi. Makaleye AO göstergesinin ne olduğunu, neyi ölçtüğünü, manuel olarak nasıl hesaplandığını görerek başlayacağız. Böylece, göstergenin arkasındaki ana fikri keşfetmiş olacağız. Sonrasında, bu fikre uygun olarak bazı basit stratejiler üzerinden onu ticaretimizde nasıl kullanabileceğimizden bahsedeceğiz. Ardından, bu stratejileri bir ticaret sistemine dönüştürürken bize yardımcı olması adına adım adım ifadeler içeren bir plan hazırlayacağız. Makalenin son bölümünde de bu stratejilere dayalı olarak hazırladığımız plan çerçevesinde otomatik sinyaller üretecek bir ticaret sistemi oluşturacağız.

Bu göstergeyi aşağıdaki konu başlıklarında ayrıntılı olarak inceleyeceğiz:

  1. Awesome Oscillator göstergesinin tanımı
  2. Awesome Oscillator göstergesi stratejileri
  3. Awesome Oscillator göstergesine dayalı ticaret sisteminin planı
  4. Awesome Oscillator göstergesine dayalı ticaret sistemi
  5. Sonuç

Makale boyunca, kodlarımızı yazmak için MetaQuotes Language 5 (MQL5) programlama dilini ve MetaTrader 5 işlem platformunda yerleşik MetaEditor kod düzenleyicisini kullanacağız. MetaTrader 5'in nasıl kurulacağı ve MetaEditor’ın nasıl kullanılacağı hakkında daha fazla bilgi edinmek istiyorsanız, önceki makalelerimden birinde yer alan "MetaEditor'da MQL5 kodu yazma" bölümünü okuyabilirsiniz. Kodlama becerilerinizi geliştirmek için makalede okuyacaklarınızı kendi başınıza tekrarlı bir şekilde pratik yapmanızı tavsiye ederim.

Sorumluluk reddi: Sağlanan tüm bilgiler ’olduğu gibi’ yalnızca bilgilendirme amaçlıdır, ticaret tavsiyesi değildir. Bu bilgiler herhangi bir sonucu garanti etmemektedir. Bu materyalleri herhangi bir işlem hesabında kullanırsanız, ortaya çıkabilecek tüm riskler size ait olacaktır.


Awesome Oscillator göstergesinin tanımı

Bu bölümde, Awesome Oscillator (AO) göstergesi hakkında detaylıca konuşacağız. AO, Bill Williams tarafından momentumu ölçmek için geliştirilmiştir. Piyasaya hangi tarafın - alıcılar veya satıcılar- hakim olduğunu netleştirmek için kullanılabilir. Gösterge, momentumu, son 5 çubuğun momentumunu son 34 çubuğun momentumuyla karşılaştırarak ölçer, diğer bir deyişle, yakın zamandaki momentumu daha büyük bir periyottaki momentumla karşılaştırır. Teknik analiz açısından bakıldığında, AO’nun üreteceği sinyalin başka bir gösterge tarafından teyit edilmesi daha yararlı olacaktır. Dolayısıyla AO göstergesinin başka bir teknik araçla birlikte kullanılması daha doğrudur. Bu göstergenin neyi ölçtüğünü daha iyi anlamak için, hesaplamanın hangi bileşenlerden oluştuğunu görelim. Bunu yapmak adına, göstergeyi manuel olarak hesaplayalım.

AO, 5 periyotluk Simple Moving Average ile 34 periyotluk Simple Moving Average arasındaki farktır. AO’nun hesaplanmasında medyan fiyatı kullanacağız.

MEDIAN PRICE = (HIGH + LOW) / 2 

AO = SMA (MEDIAN PRICE, 5) - SMA (MEDIAN PRICE, 34)

Tanımlamalar:

MEDIAN PRICE = enstrümanın medyan fiyatı

HIGH = yüksek fiyatı

LOW = düşük fiyatı

AO = Awesome Oscillator değeri

SMA = Simple Moving Average

Günümüzde, MetaTrader 5 platformuyla standart olarak gelen hazır bir gösterge bulunduğundan, Awesome Oscillator’ı manuel olarak hesaplamamıza gerek yoktur.

Tek yapmamız gereken mevcut göstergeler arasından onu seçmektir: MetaTrader 5'i açın --> Ekle sekmesine tıklayın --> Göstergeler --> Bill Williams --> Awesome Oscillator

Awesome Oscillator göstergesini ekleme

Gösterge seçildiğinde, aşağıdaki gösterge parametreleri penceresi açılacaktır:

Awesome Oscillator göstergesi parametreleri

Tanımlamalar:

1 - yükselen değerlerin rengi

2 - histogramın kalınlığı

3 - düşen değerlerin rengi

Gösterge için uygun parametreleri ayarladıktan sonra gösterge aşağıdaki gibi grafiğe eklenecektir:

Grafikte Awesome Oscillator göstergesi

Yukarıdaki görüntüde, Awesome Oscillator göstergesinin grafiğe eklendiğini ve 0 etrafında salınan bir histogram olarak alt pencerede görüntülendiğini görüyoruz.


Awesome Oscillator göstergesi stratejileri

Bu bölümde, Awesome Oscillator göstergesini ana konseptine uygun olarak bazı basit stratejilerle nasıl kullanabileceğimizi göreceğiz. Kullanışlı, kârlı ve ticaretinize uygun olduğundan emin olmak için gerçek hesabınızda kullanmadan önce herhangi bir stratejiyi ayrıntılı bir şekilde test ettiğinizden emin olmalısınız. Buna bağlı olarak, aşağıda bahsedeceğimiz stratejilerin optimizasyona ihtiyaç duyduğunu fark edebilirsiniz çünkü bu stratejiler yalnızca eğitim amaçlıdır ve optimizasyona ihtiyaç duymaları normaldir. Bu göstergeyi, daha etkili bilgiler sağlayacağı için başka bir göstergeyle kombine etmek akıllıca olacaktır. Birden çok göstergenin bir arada kullanılması teknik analizin önemli özelliklerindendir. Finansal enstrümana birçok perspektiften bakmaya olanak sağlayarak, hakkında daha fazla bilgi edinmeyi ve büyük resmi daha net görmeyi mümkün kılar. Bu makalede de Awesome Oscillator göstergesini hareketli ortalamayla birlikte kullanacağız - bu kombinasyon daha güvenilir alış ve satış sinyalleri üretilmesini sağlayacaktır.

    Birinci strateji: AO - Sıfırı çaprazlama

      Bu stratejiye göre, mevcut AO değerinin sıfır seviyesinin üzerinde veya altında olmasına dayalı olarak yükseliş hareketi veya düşüş hareketi şeklinde sinyaller alacağız. Mevcut AO değeri sıfır seviyesinin üzerindeyse, bu, yükseliş hareketi sinyali olacaktır. Eğer mevcut AO değeri sıfır seviyesini altındaysa, bu da düşüş hareketi sinyali olacaktır.

      Daha basit ifadeyle,

      Mevcut AO > 0 --> Yükseliş hareketi

      Mevcut AO < 0 --> Düşüş hareketi

        İkinci strateji: AO gücü

          Bu stratejiye göre, mevcut AO değeriyle göstergenin son 5 periyotluk ortalamasını karşılaştırarak AO güçlü veya AO zayıf şeklinde sinyaller alacağız. Mevcut AO değeri göstergenin son 5 periyotluk ortalamasından daha yüksekse, bu, AO güçlü sinyali olacaktır. Eğer mevcut AO değeri göstergenin son 5 periyotluk ortalamasından daha düşükse, bu da AO zayıf sinyali olacaktır.

          Daha basit ifadeyle,

          Mevcut AO > AO'nun 5 periyotluk ortalaması --> AO güçlü

          Mevcut AO < AO'nun 5 periyotluk ortalaması --> AO zayıf

            Üçüncü strateji: AO ve MA

              Bu stratejiye göre, belirli koşullara bağlı olarak alış veya satış sinyalleri alacağız. Mevcut AO değeri sıfır seviyesinin üzerindeyse ve bununla birlikte mevcut kapanış fiyatı 50 periyotluk EMA değerinden daha yüksekse, bu, alış sinyali olacaktır. Eğer mevcut AO değeri sıfır seviyesinin altındaysa ve bununla birlikte mevcut kapanış fiyatı 50 periyotluk EMA değerinden daha düşükse, bu da satış sinyali olacaktır.

              Daha basit ifadeyle,

              Mevcut AO > Sıfır seviyesi ve Mevcut kapanış > 50 periyotluk EMA --> Alış sinyali

              Mevcut AO < Sıfır seviyesi ve Mevcut kapanış < 50 periyotluk EMA --> Satış sinyali

              Awesome Oscillator göstergesine dayalı ticaret sisteminin planı

              Bu bölümde, ele aldığımız stratejiler için ticaret sistemini oluştururken bize yardımcı olması adına ilgili her strateji için olmak üzere adım adım ifadeler içeren bir plan hazırlayacağız.

                Birinci strateji: AO - Sıfırı çaprazlama

                  Bu stratejiye göre, ticaret sistemi her tikte mevcut AO değerini kontrol etmeli ve bu değeri sıfır seviyesiyle karşılaştırmalıdır. Daha sonra bu karşılaştırmanın sonucuna göre ilgili sinyali grafik üzerinde yorum olarak görüntülemelidir. Mevcut AO değeri sıfır seviyesinin üzerindeyse, şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

                  • Yükseliş hareketi
                  • Mevcut AO değeri

                  Diğer senaryoda, mevcut AO değeri sıfır seviyesinin altındaysa, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

                  • Düşüş hareketi
                  • Mevcut AO değeri

                  Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:

                  AO - Sıfırı çaprazlama planı

                    İkinci strateji: AO gücü

                      Bu stratejiye göre, ticaret sistemi her tikte mevcut AO değerini ve göstergenin son 5 periyotluk ortalamasını kontrol etmeli ve bu iki değeri birbiriyle karşılaştırmalıdır. Daha sonra bu karşılaştırmanın sonucuna göre ilgili sinyali grafik üzerinde yorum olarak görüntülemelidir. Mevcut AO değeri göstergenin son 5 periyotluk ortalamasından daha yüksekse, şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

                      • AO güçlü
                      • Mevcut AO değeri
                      • Birinci AO değeri
                      • İkinci AO değeri
                      • Üçüncü AO değeri
                      • Dördüncü AO değeri
                      • Beşinci AO değeri
                      • Ortalama AO değeri

                      Diğer senaryoda, mevcut AO değeri göstergenin son 5 periyotluk ortalamasından daha düşükse, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

                      • AO zayıf
                      • Mevcut AO değeri
                      • Birinci AO değeri
                      • İkinci AO değeri
                      • Üçüncü AO değeri
                      • Dördüncü AO değeri
                      • Beşinci AO değeri
                      • Ortalama AO değeri

                      Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:

                      AO gücü planı

                        Üçüncü strateji: AO ve MA

                          Bu stratejiye göre, ticaret sistemi her tikte aşağıdaki değerleri kontrol etmeli ve bu değerleri stratejinin koşullarına uygun şekilde karşılaştırarak ilgili sinyali grafik üzerinde yorum olarak görüntülemelidir:

                          • Mevcut AO değeri
                          • AO göstergesinin sıfır seviyesi
                          • Mevcut kapanış fiyatı
                          • 50 periyotluk EMA değeri

                          Mevcut AO değeri sıfır seviyesinin üzerindeyse ve bununla birlikte mevcut kapanış fiyatı 50 periyotluk EMA değerinden daha yüksekse, ticaret sistemi şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

                          • Alış sinyali
                          • Mevcut kapanış fiyatı
                          • Mevcut AO değeri
                          • Mevcut MA değeri

                          Diğer senaryoda, mevcut AO değeri sıfır seviyesinin altındaysa ve bununla birlikte mevcut kapanış fiyatı 50 periyotluk EMA değerinden daha düşükse, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

                          • Satış sinyali
                          • Mevcut kapanış fiyatı
                          • Mevcut AO değeri
                          • Mevcut MA değeri

                          Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:

                          AO ve MA planı

                          Awesome Oscillator göstergesine dayalı ticaret sistemi

                          Bu bölümde, hazırladığımız plan çerçevesinde ele aldığımız stratejilere dayalı olarak bir ticaret sistemi oluşturacağız. Öncelikle, stratejilerimizin programlarına temel olması adına mevcut AO değerini grafik üzerinde yorum olarak görüntüleyecek basit bir program yazalım.

                          Adım adım nasıl yapılacağını görelim:

                          double fonksiyonunu kullanarak AO için bir dizi oluşturalım:

                          double aoArray[];

                          ArraySetAsSeries fonksiyonunu kullanarak AO dizisini mevcut veriden başlayarak sıralayalım - başarılı olması durumunda true, aksi takdirde false geri döner (bool türü). Parametreleri şunlardır:

                          • Hedef dizi - aoArray ayarlayacağız.
                          • Bayrak - Dizi indeksleme yönü olarak true değerini kullanacağız.
                          ArraySetAsSeries(aoArray,true);

                          aoDef için int türü değişken oluşturduktan sonra iAO fonksiyonunu kullanarak AO’yu tanımlayalım. iAO fonksiyonu AO göstergesinin tanıtıcısını geri döndürür. Parametreleri şunlardır:

                          • Sembol adı - Mevcut sembole uygulanmak üzere _Symbol kullanacağız.
                          • Zaman dilimi - Mevcut zaman dilimine uygulanmak üzere _Period kullanacağız.
                          int aoDef = iAO(_Symbol,_Period);

                          CopyBuffer fonksiyonunu kullanarak aoArray dizisini aoDef değerleriyle dolduralım. Parametreleri şunlardır: 

                          • Gösterge tanıtıcısı - aoDef gösterge tanımını kullanacağız.
                          • Gösterge arabellek numarası - 0 ayarlayacağız.
                          • Başlangıç konumu - 0 ayarlayacağız.
                          • Kopyalanacak veri miktarı - 3 ayarlayacağız.
                          • Hedef dizi - aoArray ayarlayacağız.
                          CopyBuffer(aoDef,0,0,3,aoArray);

                          aoVal için double türü değişken oluşturduktan sonra, double türünde değer geri döndüren NormalizeDouble fonksiyonunu kullanarak mevcut AO değerini hesaplayalım. Parametreleri şunlardır:

                          • Normalleştirilmiş sayı - aoArray[0] kullanacağız.
                          • Ondalık basamak sayısı - 7 ayarlayacağız.
                          double aoVal = NormalizeDouble(aoArray[0],7);

                          Comment fonksiyonunu kullanarak mevcut AO değerini grafikte yorum olarak görüntüleyelim:

                          Comment("AO Value is ",aoVal);

                          Bu stratejiye dayalı Uzman Danışmanın tam kodu aşağıda gösterilmektedir:

                          //+------------------------------------------------------------------+
                          //|                                                    Simple AO.mq5 |
                          //|                                  Copyright 2022, MetaQuotes Ltd. |
                          //|                                             https://www.mql5.com |
                          //+------------------------------------------------------------------+
                          #property copyright "Copyright 2022, MetaQuotes Ltd."
                          #property link      "https://www.mql5.com"
                          #property version   "1.00"
                          //+------------------------------------------------------------------+
                          //| Expert initialization function                                   |
                          //+------------------------------------------------------------------+
                            void OnTick()
                            {
                             double aoArray[];
                             ArraySetAsSeries(aoArray,true);
                             int aoDef = iAO(_Symbol,_Period);
                             CopyBuffer(aoDef,0,0,3,aoArray);
                             double aoVal = NormalizeDouble(aoArray[0],7);
                             Comment("AO Value is ",aoVal);
                            }
                          //+------------------------------------------------------------------+

                          Uzman Danışmanın kodunu derliyoruz, böylece onu MetaTrader 5 terminalinde Kılavuz penceresinde bulabiliriz:

                          Kılavuz - Simple AO

                          Programa çift tıklayarak veya onu grafiğe sürükleyerek başlatıyoruz. Devamında, aşağıdaki pencere açılacaktır:

                          Simple AO penceresi

                          "Algoritmik ticarete izin ver" seçeneğini etkinleştirip Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

                          Grafiğe eklenmiş Simple AO

                          Gördüğümüz üzere, grafiğin sağ üst köşesinde Uzman Danışmanın grafik üzerinde çalıştığına dair bir ifade ortaya çıktı. Böylece, program mevcut AO değerini grafik üzerinde yorum olarak gösterecektir:

                          Grafikte mevcut AO değeri

                          Yukarıdaki görüntüden görebileceğimiz gibi, Uzman Danışman mevcut AO değerini grafiğin sol üst köşesinde yorum olarak görüntülemektedir.

                            Birinci strateji: AO - Sıfırı çaprazlama

                              Bu stratejiye dayalı Uzman Danışmanın tam kodu aşağıda gösterilmektedir:

                              //+------------------------------------------------------------------+
                              //|                                            AO Zero Crossover.mq5 |
                              //|                                  Copyright 2022, MetaQuotes Ltd. |
                              //|                                             https://www.mql5.com |
                              //+------------------------------------------------------------------+
                              #property copyright "Copyright 2022, MetaQuotes Ltd."
                              #property link      "https://www.mql5.com"
                              #property version   "1.00"
                              //+------------------------------------------------------------------+
                              void OnTick()
                                {
                                 double aoArray[];
                                 ArraySetAsSeries(aoArray,true);
                                 int aoDef = iAO(_Symbol,_Period);
                                 CopyBuffer(aoDef,0,0,3,aoArray);
                                 double aoVal = NormalizeDouble(aoArray[0],7);
                                 if(aoVal > 0)
                                   {
                                    Comment("Bullish","\n"
                                            "AO Value is ",aoVal);
                                   }
                              
                                 if(aoVal < 0)
                                   {
                                    Comment("Bearish","\n"
                                            "AO Value is ",aoVal);
                                   }
                                }
                              //+------------------------------------------------------------------+

                              Bu koddaki farklılıklar şunlardır:

                              Stratejinin koşulları:

                              Yükseliş hareketi:

                                 if(aoVal > 0)
                                   {
                                    Comment("Bullish","\n"
                                            "AO Value is ",aoVal);
                                   }

                              Düşüş hareketi:

                                 if(aoVal < 0)
                                   {
                                    Comment("Bearish","\n"
                                            "AO Value is ",aoVal);
                                   }

                              Bu kodu derledikten ve hata olmadığından emin olduktan sonra, Uzman Danışmanı yukarıda belirttiğimiz gibi Kılavuz üzerinden grafiğe ekliyoruz:

                              Grafiğe eklenmiş AO Zero Crossover

                              Gördüğümüz üzere, grafiğin sağ üst köşesinde Uzman Danışmanın grafik üzerinde çalıştığına dair bir ifade ortaya çıktı. Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları gösterecektir:

                              Yükseliş hareketi:

                              AO Zero Crossover - Yükseliş hareketi sinyali

                              Yukarıdaki görüntüden görebileceğimiz gibi, program yükseliş hareketi koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:

                              • Yükseliş hareketi
                              • Mevcut AO değeri

                              Düşüş hareketi:

                              AO Zero Crossover - Düşüş hareketi sinyali

                              Yukarıdaki görüntüden görebileceğimiz gibi, program düşüş hareketi koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:

                              • Düşüş hareketi
                              • Mevcut AO değeri

                                İkinci strateji: AO gücü

                                  Bu stratejiye dayalı Uzman Danışmanın tam kodu aşağıda gösterilmektedir:

                                  //+------------------------------------------------------------------+
                                  //|                                                  AO Strength.mq5 |
                                  //|                                  Copyright 2022, MetaQuotes Ltd. |
                                  //|                                             https://www.mql5.com |
                                  //+------------------------------------------------------------------+
                                  #property copyright "Copyright 2022, MetaQuotes Ltd."
                                  #property link      "https://www.mql5.com"
                                  #property version   "1.00"
                                  //+------------------------------------------------------------------+
                                  void OnTick()
                                    {
                                     double aoArray[];
                                     ArraySetAsSeries(aoArray,true);
                                     int aoDef = iAO(_Symbol,_Period);
                                     CopyBuffer(aoDef,0,0,6,aoArray);
                                  
                                  
                                     double aoCurrVal = NormalizeDouble(aoArray[0],6);
                                     double aoFifthVal = NormalizeDouble(aoArray[1],6);
                                     double aoFourthVal = NormalizeDouble(aoArray[2],6);
                                     double aoThirdVal = NormalizeDouble(aoArray[3],6);
                                     double aoSecondVal = NormalizeDouble(aoArray[4],6);
                                     double aoFirstVal = NormalizeDouble(aoArray[5],6);
                                  
                                     double aoAvgVal = NormalizeDouble((aoFifthVal+aoFourthVal+aoThirdVal+aoSecondVal+aoFirstVal)/5,6);
                                  
                                     if(aoCurrVal > aoAvgVal)
                                       {
                                        Comment("AO Movement is strong","\n",
                                                "AO CurrVal : ",aoCurrVal,"\n",
                                                "AO FirstVal : ",aoFifthVal,"\n",
                                                "AO SecondVal : ",aoFourthVal,"\n",
                                                "AO ThirdVal : ",aoThirdVal,"\n",
                                                "AO FourthVal : ",aoSecondVal,"\n",
                                                "AO FifthVal : ",aoFirstVal,"\n",
                                                "AO AvgVal : ",aoAvgVal
                                               );
                                       }
                                  
                                     if(aoCurrVal < aoAvgVal)
                                       {
                                        Comment("AO Movement is Weak","\n",
                                                "AO CurrVal : ",aoCurrVal,"\n",
                                                "AO FirstVal : ",aoFifthVal,"\n",
                                                "AO SecondVal : ",aoFourthVal,"\n",
                                                "AO ThirdVal : ",aoThirdVal,"\n",
                                                "AO FourthVal : ",aoSecondVal,"\n",
                                                "AO FifthVal : ",aoFirstVal,"\n",
                                                "AO AvgVal : ",aoAvgVal
                                               );
                                       }
                                  
                                    }
                                  //+------------------------------------------------------------------+

                                  Bu koddaki farklılıklar şunlardır:

                                  Burada yalnızca mevcut AO değerini değil, aynı zamanda önceki beş AO değerini de tanımlıyoruz:

                                     double aoCurrVal = NormalizeDouble(aoArray[0],6);
                                     double aoFifthVal = NormalizeDouble(aoArray[1],6);
                                     double aoFourthVal = NormalizeDouble(aoArray[2],6);
                                     double aoThirdVal = NormalizeDouble(aoArray[3],6);
                                     double aoSecondVal = NormalizeDouble(aoArray[4],6);
                                     double aoFirstVal = NormalizeDouble(aoArray[5],6);

                                  Önceki beş AO değerinin ortalamasını (aoAvgVal) hesaplıyoruz:

                                  double aoAvgVal = NormalizeDouble((aoFifthVal+aoFourthVal+aoThirdVal+aoSecondVal+aoFirstVal)/5,6);

                                  Stratejinin koşulları:

                                  AO güçlü:

                                     if(aoCurrVal > aoAvgVal)
                                       {
                                        Comment("AO Movement is strong","\n",
                                                "AO CurrVal : ",aoCurrVal,"\n",
                                                "AO FirstVal : ",aoFifthVal,"\n",
                                                "AO SecondVal : ",aoFourthVal,"\n",
                                                "AO ThirdVal : ",aoThirdVal,"\n",
                                                "AO FourthVal : ",aoSecondVal,"\n",
                                                "AO FifthVal : ",aoFirstVal,"\n",
                                                "AO AvgVal : ",aoAvgVal
                                               );
                                       }

                                  AO zayıf:

                                     if(aoCurrVal < aoAvgVal)
                                       {
                                        Comment("AO Movement is Weak","\n",
                                                "AO CurrVal : ",aoCurrVal,"\n",
                                                "AO FirstVal : ",aoFifthVal,"\n",
                                                "AO SecondVal : ",aoFourthVal,"\n",
                                                "AO ThirdVal : ",aoThirdVal,"\n",
                                                "AO FourthVal : ",aoSecondVal,"\n",
                                                "AO FifthVal : ",aoFirstVal,"\n",
                                                "AO AvgVal : ",aoAvgVal
                                               );
                                       }

                                  Derledikten sonra hata olmadığından emin olup Uzman Danışmanı grafiğe ekliyoruz:

                                  Grafiğe eklenmiş AO Strength

                                  Gördüğümüz üzere, grafiğin sağ üst köşesinde Uzman Danışmanın grafik üzerinde çalıştığına dair bir ifade ortaya çıktı. Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları gösterecektir:

                                  AO güçlü:

                                  AO Strength - AO güçlü sinyali

                                  Yukarıdaki görüntüden görebileceğimiz gibi, program AO güçlü sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:

                                  • AO güçlü
                                  • Mevcut AO değeri
                                  • Birinci AO değeri
                                  • İkinci AO değeri
                                  • Üçüncü AO değeri
                                  • Dördüncü AO değeri
                                  • Beşinci AO değeri
                                  • Ortalama AO değeri

                                  AO zayıf:

                                  AO Strength - AO zayıf sinyali

                                  Yukarıdaki görüntüden görebileceğimiz gibi, program AO zayıf sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:

                                  • AO zayıf
                                  • Mevcut AO değeri
                                  • Birinci AO değeri
                                  • İkinci AO değeri
                                  • Üçüncü AO değeri
                                  • Dördüncü AO değeri
                                  • Beşinci AO değeri
                                  • Ortalama AO değeri

                                    Üçüncü strateji: AO ve MA

                                      Bu stratejiye dayalı Uzman Danışmanın tam kodu aşağıda gösterilmektedir:

                                      //+------------------------------------------------------------------+
                                      //|                                             AO & MA Strategy.mq5 |
                                      //|                                  Copyright 2022, MetaQuotes Ltd. |
                                      //|                                             https://www.mql5.com |
                                      //+------------------------------------------------------------------+
                                      #property copyright "Copyright 2022, MetaQuotes Ltd."
                                      #property link      "https://www.mql5.com"
                                      #property version   "1.00"
                                      //+------------------------------------------------------------------+
                                      void OnTick()
                                        {
                                         MqlRates pArray[];
                                         double aoArray[];
                                         double maArray[];
                                      
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                         ArraySetAsSeries(aoArray,true);
                                         ArraySetAsSeries(maArray,true);
                                         
                                         int aoDef = iAO(_Symbol,_Period);
                                         int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
                                      
                                         CopyBuffer(aoDef,0,0,3,aoArray);
                                         CopyBuffer(maDef,0,0,3,maArray);
                                      
                                         double closingPrice = pArray[0].close;
                                         double aoVal = NormalizeDouble(aoArray[0],7);
                                         double maVal = NormalizeDouble(maArray[0],7);
                                      
                                         if(aoVal > 0 && closingPrice > maVal)
                                           {
                                            Comment("Buy","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "AO Value is ",aoVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                      
                                         if(aoVal < 0 && closingPrice < maVal)
                                           {
                                            Comment("Sell","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "AO Value is ",aoVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                      
                                        }
                                      //+------------------------------------------------------------------+

                                      Bu koddaki farklılıklar şunlardır:

                                      Üç dizi oluşturuyoruz (pArray, aoArray ve maArray). pArray dışındaki diziler için double fonksiyonunu kullanacağız, pArray için ise fiyat, hacim ve makas bilgilerini depolayan MqlRates fonksiyonunu kullanacağız:

                                         MqlRates pArray[];
                                         double aoArray[];
                                         double maArray[];

                                      ArraySetAsSeries fonksiyonunu kullanarak aoArray ve maArray dizilerini mevcut veriden başlayarak sıralıyoruz - başarılı olması durumunda true, aksi takdirde false geri döner (bool türü). pArray için MqlRates geçmiş verilerini almak adına CopyRates fonksiyonunu kullanacağız. CopyRates fonksiyonunun parametreleri şunlardır:

                                      • Sembol adı - Mevcut sembole uygulanmak üzere _Symbol kullanacağız.
                                      • Zaman dilimi - Mevcut zaman dilimine uygulanmak üzere _Period kullanacağız.
                                      • Başlangıç konumu - 0 ayarlayacağız. 
                                      • Kopyalanacak veri miktarı - 1 ayarlayacağız.
                                      • Hedef dizi - pArray ayarlayacağız.
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                         ArraySetAsSeries(aoArray,true);
                                         ArraySetAsSeries(maArray,true);

                                      Öncesinde yaptığımız gibi iAO fonksiyonunu kullanarak AO’yu tanımlıyoruz ve ayrıca şimdi iMA fonksiyonunu kullanarak da MA’yı tanımlıyoruz. iMA fonksiyonunun parametreleri şunlardır:

                                      • Sembol adı - Mevcut sembole uygulanmak üzere _Symbol kullanacağız. 
                                      • Zaman dilimi - Mevcut zaman dilimine uygulanmak üzere _Period kullanacağız.
                                      • Moving Average periyodu - 50 ayarlayacağız. 
                                      • Moving Average kayma miktarı - 0 ayarlayacağız. 
                                      • Moving Average yöntemi - Exponential Moving Average (MODE_EMA) kullanacağız. 
                                      • Uygulanacak fiyat - Kapanış fiyatını (PRICE_CLOSE) kullanacağız.
                                         int aoDef = iAO(_Symbol,_Period);
                                         int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);

                                      CopyBuffer fonksiyonunu kullanarak oluşturduğumuz dizileri aoDef ve maDef değerleriyle dolduruyoruz:

                                         CopyBuffer(aoDef,0,0,3,aoArray);
                                         CopyBuffer(maDef,0,0,3,maArray);

                                      Kapanış fiyatını, AO ve MA değerlerini tanımlıyoruz:

                                         double closingPrice = pArray[0].close;
                                         double aoVal = NormalizeDouble(aoArray[0],7);
                                         double maVal = NormalizeDouble(maArray[0],7);

                                      Stratejinin koşulları:

                                      Alış sinyali:

                                         if(aoVal > 0 && closingPrice > maVal)
                                           {
                                            Comment("Buy","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "AO Value is ",aoVal,"\n",
                                                    "MA Value is ",maVal);
                                           }

                                      Satış sinyali:

                                         if(aoVal < 0 && closingPrice < maVal)
                                           {
                                            Comment("Sell","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "AO Value is ",aoVal,"\n",
                                                    "MA Value is ",maVal);
                                           }

                                      Uzman Danışmanın kodunu derliyoruz ve grafiğe ekliyoruz:

                                      Grafiğe eklenmiş AO & MA Strategy

                                      Gördüğümüz üzere, grafiğin sağ üst köşesinde Uzman Danışmanın grafik üzerinde çalıştığına dair bir ifade ortaya çıktı. Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları gösterecektir:

                                      Alış sinyali:

                                      AO & MA Strategy - Alış sinyali

                                      Yukarıdaki görüntüden görebileceğimiz gibi, program alış sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:

                                      • Alış sinyali
                                      • Mevcut kapanış fiyatı
                                      • Mevcut AO değeri
                                      • Mevcut MA değeri

                                      Satış sinyali:

                                      AO & MA Strategy - Satış sinyali

                                      Yukarıdaki görüntüden görebileceğimiz gibi, program satış sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:

                                      • Satış sinyali
                                      • Mevcut kapanış fiyatı
                                      • Mevcut AO değeri
                                      • Mevcut MA değeri


                                      Sonuç

                                      Serimizin bu makalesinde Awesome Oscillator göstergesini inceledik. Makalemizin ilk bölümünde, Awesome Oscillator göstergesinin ne olduğu, neyi ölçtüğü ve manuel olarak nasıl hesaplandığı hakkında konuştuk. Devamında, bazı basit stratejileri ele alarak onu ticaretimizde nasıl kullanabileceğimizi değerlendirdik. Bu basit stratejiler şunlardı:

                                      • Birinci strateji: AO - Sıfırı çaprazlama - gösterge değerinin sıfır seviyesinin üzerinde veya altında olmasına dayalı olarak yükseliş hareketi veya düşüş hareketi şeklinde sinyaller almak için.
                                      • İkinci strateji: AO gücü - mevcut AO değerine ve son beş AO değerinin ortalamasına dayalı olarak AO güçlü veya AO zayıf şeklinde sinyaller almak için. 
                                      • Üçüncü strateji: AO ve MA - mevcut AO, göstergenin sıfır seviyesi, mevcut kapanış ve 50 periyotluk EMA değerlerine dayalı olarak alış veya satış sinyalleri almak için.

                                      Sonrasında, ele aldığımız stratejiler için ticaret sistemini oluştururken bize yardımcı olması adına ilgili her strateji için olmak üzere adım adım ifadeler içeren bir plan hazırladık. Makalenin son bölümünde de hazırladığımız plan çerçevesinde, MetaTrader 5 işlem platformunda kullanılmak üzere, ele aldığımız stratejilere dayalı olarak otomatik sinyaller üretecek bir ticaret sistemi oluşturduk.

                                      Programlama becerilerinizi geliştirmek istiyorsanız, okuduklarınızı kendi başınıza tekrarlı bir şekilde pratik yapmanız gerekir, çünkü pratik yapmak her türlü öğrenme sürecindeki en önemli faktörlerden biridir. Şunu da her zaman olduğu gibi bir kez daha hatırlatmak istiyorum: herhangi bir stratejiyi bir gerçek hesapta kullanmadan önce onu tam anlamıyla test ettiğinizden emin olmalısınız. Başkaları için yararlı olan bir şey, sizin için mutlaka yararlı olmayabilir.

                                      Bu makaleyi beğendiyseniz, yararlı bulduysanız ve buna benzer daha fazla makale okumak istiyorsanız, en popüler teknik göstergelere dayalı ticaret sistemlerinin nasıl geliştirileceğini öğrenme konulu bu serideki diğer makaleleri de okuyabilirsiniz. Bir sonraki makalede görüşmek dileğiyle.

                                      MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
                                      Orijinal makale: https://www.mql5.com/en/articles/11468

                                      Ekli dosyalar |
                                      Simple_AO.mq5 (1.01 KB)
                                      AO_Strength.mq5 (2.07 KB)
                                      Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 22): Yeni emir sistemi (V) Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 22): Yeni emir sistemi (V)
                                      Bugün yeni emir sistemini geliştirmeye devam edeceğiz. Yeni bir sistemi uygulamak o kadar da kolay değildir, zira sık sık süreci büyük ölçüde zorlaştıran sorunlarla karşılaşırız. Bu sorunlar ortaya çıktığında durmalı ve ilerlediğimiz yönü yeniden analiz etmeliyiz.
                                      Relative Vigor Index göstergesine dayalı bir ticaret sistemi nasıl geliştirilir? Relative Vigor Index göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?
                                      En popüler teknik göstergelere dayalı ticaret sistemlerini nasıl geliştireceğimizi öğrendiğimiz serimizin yeni makalesindeyiz. Bu makalede Relative Vigor Index göstergesi üzerinde çalışacağız.
                                      Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 23): Yeni emir sistemi (VI) Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 23): Yeni emir sistemi (VI)
                                      Emir sistemini daha akıcı hale getireceğiz. Bu makalede, pozisyon eşik seviyelerini çok daha hızlı değiştirebilmek için kodda yapılması gereken değişiklikleri ele alacağız.
                                      Popülasyon optimizasyon algoritmaları: Balık sürüsü arama (Fish School Search, FSS) Popülasyon optimizasyon algoritmaları: Balık sürüsü arama (Fish School Search, FSS)
                                      Balık sürüsü arama (Fish School Search, FSS) algoritması, %80'e varan çoğunluğu türdeş organize topluluklar halinde yüzen balıkların sürü içerisindeki davranışlarından esinlenen yeni bir optimizasyon algoritmasıdır. Balık kümelerinin, yiyecek arama ve avcılardan korunma verimliliğinde önemli bir rol oynadığı kanıtlanmıştır.