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

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

MetaTrader 5Ticaret | 12 Mart 2024, 15:56
150 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Giriş

Bu makalede, en popüler teknik göstergelerden biri olan Fractals göstergesini konuk edeceğiz ve ona dayalı bir ticaret sistemi geliştireceğiz. Aşağıdaki konular aracılığıyla göstergeyi ayrıntılı olarak inceleyeceğiz:

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

İlk olarak, Fractals göstergesinin arkasındaki ana fikri anlamak için, ne olduğu, neyi ölçtüğü ve manuel olarak nasıl hesaplandığı hakkında konuşacağız. Daha sonra, göstergenin ana konseptini temel alan bazı basit ticaret stratejileri aracılığıyla onu ticarette lehimize nasıl kullanabileceğimizi göreceğiz. Ardından da otomatik sinyaller üretmek için MetaTrader 5 işlem terminalinde kullanmak üzere bu stratejilere dayalı bir ticaret sistemi oluşturacağız.

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. Ayrıca, kodlama becerilerinizi geliştirmek istiyorsanız, makalede okuduklarınızı kendi başınıza uygulamaya çalışmanızı tavsiye ederim.

Bahsedilen herhangi bir stratejiyi gerçek hesabınızda kullanmadan önce test etmelisiniz çünkü bu makalenin temel amacı eğitimdir. Ayrıca, herkes için uygun olan yegane bir şey yoktur. Bu nedenle, ticaret tarzınız için uygun olduğundan emin olmalısınız.

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.

Fractals göstergesinin tanımı

Fractals göstergesi Bill Williams tarafından geliştirilmiştir. Yükseliş veya düşüş sinyalleri vererek fiyat hareketinin potansiyel hareketlerini tahmin etmeye çalışmak için tasarlanmıştır. Yükseliş sinyali yukarı yönlü potansiyel bir hareket sağlarken, düşüş sinyali aşağı yönlü potansiyel bir hareket sağlar. Bu göstergenin grafikteki yüksek ve düşük tepe seviyelerini tahmin etmeye çalıştığını da söyleyebiliriz. Bu sinyalleri, grafik üzerinde oluşturulan, fiyatların altındaki ve üstündeki oklara bakarak görebiliriz.

Yukarı doğru Fractals oku ve aşağı doğru Fractals oku olmak üzere iki farklı ok oluşturur. Bu iki okun nasıl hesaplandığını sorarsanız bu sorunun cevabı şöyledir:

Fractals göstergesi, grafikte her iki yönde yukarı veya aşağı yönlü olarak meydana gelecek belirli bir fiyat hareketi modeline gerek duyar.

Yukarı doğru Fractals oku için fiyat hareketinde aşağıdakilere ihtiyaç vardır:

  • En az beş ardışık mum veya çubuk.
  • Ortadaki mumda (üçüncü olan) en yüksek yüksek fiyatı.
  • Bu yüksek fiyatının her iki tarafında da düşük yüksekler.
  • Beşinci mum yukarıdaki koşullara uyarak kapandıktan sonra, üçüncü mumun üzerinde yukarı doğru Fractals oku oluşacaktır.

Aşağı doğru Fractals oku için fiyat hareketinde aşağıdakilere ihtiyaç vardır:

  • En az beş ardışık mum veya çubuk.
  • Ortadaki mumda (üçüncü olan) en düşük düşük fiyatı.
  • Bu düşük fiyatının her iki tarafında da yüksek düşükler.
  • Beşinci mum yukarıdaki koşullara uyarak kapandıktan sonra, üçüncü mumun üzerinde aşağı doğru Fractals oku oluşacaktır.

Neyse ki, Fractals göstergesini grafiğimize çizmek için bu adımları uygulamamıza gerek yoktur çünkü MetaTrader 5'te bizim için hazır durumdadır, tek yapmamız gereken mevcut göstergeler arasından Fractals göstergesini seçmektir. Bunu MetaTrader 5 terminalini açıp aşağıdaki yolu izleyerek yapabiliriz:

Ekle --> Göstergeler --> Bill Williams --> Fractals

Fractals göstergesini ekleme

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

Fractals göstergesi parametreleri

1- Okların rengini ayarlamak için.

2- Kalınlığı ayarlamak için.

Tamama tıkladıktan sonra, gösterge aşağıdaki gibi grafiğe eklenecektir:

Grafikte Fractals göstergesi

Gördüğümüz gibi, mumların üstünde ve altında fiyat hareketindeki potansiyel harekete atıfta bulunan oklar vardır. Mumların altında potansiyel yukarı yönlü hareketi gösteren aşağı doğru oklar ve mumların üzerinde de potansiyel aşağı yönlü hareketi gösteren yukarı doğru oklar görüyoruz.

Fractals göstergesi stratejileri

Bu bölümde, Fractals göstergesini arkasındaki ana konsepti temelinde bazı basit stratejilerle nasıl kullanabileceğimizi göreceğiz. İlk başta Fractals göstergesini bağımsız olarak kullanacağız, ardından daha fazla içgörü elde etmek ve sinyallerini geliştirmek için onu diğer teknik göstergelerle birlikte kombine edeceğiz.

Birinci strateji: Fractals yüksek ve düşük

    Bu stratejiye göre Fractals’ın oluşturduğu ok türüne göre Fractals yüksek ve Fractals düşük şeklinde sinyaller alacağız. Gösterge aşağı doğru ok oluşturduysa, bu, Fractals düşük sinyali olacaktır. Gösterge yukarı doğru ok oluşturduysa, bu da Fractals yüksek sinyali olacaktır.

    Daha basit ifadeyle,

    Aşağı doğru ok --> Fractals düşük

    Yukarı doğru ok --> Fractals yüksek

    İkinci strateji: Fractals ve MA

      Bu stratejiye göre, oluşturulan Fractals göstergesi sinyaline ek olarak fiyatın konumu ve hareketli ortalamanın ilişkisine dayalı fiyat hareketinin yönüne göre alış ve satış sinyalleri alacağız. Kapanış fiyatı hareketli ortalamanın üzerindeyse ve Fractals göstergesi aşağı doğru ok oluşturduysa, bu, alış sinyali olacaktır. Kapanış fiyatı hareketli ortalamanın altındaysa ve Fractals göstergesi yukarı doğru ok oluşturduysa, bu da satış sinyali olacaktır.

      Daha basit ifadeyle,

      Kapanış fiyatı > MA ve Aşağı doğru ok oluştu --> Alış sinyali

      Kapanış fiyatı < MA ve Yukarı doğru ok oluştu --> Satış sinyali

      Üçüncü strateji: Fractals ve Alligator

        Bu stratejiye göre, oluşturulan Fractals göstergesi sinyaline ek olarak fiyatın konumu ve Alligator göstergesinin ilişkisine dayalı fiyat hareketinin yönüne göre alış ve satış sinyalleri alacağız. Alligator’ın Lips çizgisi Teeth ve Jaws’un üzerindeyse, Teeth çizgisi Jaws’un üzerindeyse, kapanış fiyatı Teeth’in üzerindeyse ve Fractals göstergesi sinyali aşağı doğru ok oluşturduysa, bu, alış sinyali olacaktır. Diğer senaryoda, Lips çizgisi Teeth ve Jaws’un altındaysa, Teeth çizgisi Jaws’un altındaysa, kapanış fiyatı Teeth’in altındaysa ve Fractals göstergesi sinyali yukarı doğru ok oluşturduysa, bu da satış sinyali olacaktır.

        Daha basit ifadeyle,

        Lips > Teeth ve Jaws, Teeth > Jaws, Kapanış fiyatı > Teeth ve Fractals aşağı doğru ok oluşturdu --> Alış sinyali

        Lips < Teeth ve Jaws, Teeth < Jaws, Kapanış fiyatı < Teeth ve Fractals yukarı doğru ok oluşturdu --> Satış sinyali

        Fractals göstergesine dayalı ticaret sisteminin planı

        Şimdi, fikirlerimizi düzenleyerek onlar için sorunsuz ve kolay bir şekilde bir ticaret sistemi oluşturmamıza yardımcı olması amacıyla, bahsedilen her strateji için olmak üzere adım adım ifadeler içeren bir plan hazırlayacağız.

        1. Fractals yüksek ve düşük

          Bu stratejiye göre, fracUpValue ve fracDownValue değerlerini sürekli kontrol ederek Fractals göstergesinin sinyal değerlerini grafikte yorum olarak geri döndürecek bir ticaret sistemi oluşturmamız gerekiyor. fracUp sıfırdan büyükse veya boş değeri yoksa ve fracDown'ın boş değeri varsa, ticaret sisteminin grafikte aşağıdaki değere sahip bir yorumu geri döndürmesine ihtiyacımız vardır:

            • Fractals yüksek: n

          Diğer durumda, eğer fracDown sıfırdan büyükse veya boş değeri yoksa ve fracUp’ın boş değeri varsa, bu kez de ticaret sisteminin grafikte aşağıdaki değere sahip bir yorumu geri döndürmesine ihtiyacımız vardır:

            • Fractals düşük: n

          Bu stratejinin planı aşağıdadır:

          Fractals yüksek ve düşük planı

          2. Fractals ve MA

            Bu stratejiye göre, aşağıdaki değerlerin sürekli kontrol edilmesine dayalı olarak alış ve satış sinyallerini grafikte yorum olarak geri döndürecek bir ticaret sistemi oluşturmamız gerekiyor:

              • Kapanış fiyatı
              • EMA (Exponential Moving Average) değeri
              • fracDown değeri
              • fracUp değeri

            Kapanış fiyatı EMA değerinden daha yüksekse ve fracDown değeri boş değere sahip değilse, ticaret sisteminin aşağıdaki değerleri geri döndürmesine ihtiyacımız vardır:

              • Alış sinyali
              • Mevcut EMA
              • Fractals düşük: n

            Diğer durumda, kapanış fiyatı EMA değerinden daha düşükse ve fracUp değeri boş değere sahip değilse, bu kez de ticaret sisteminin aşağıdaki değerleri geri döndürmesine ihtiyacımız vardır:

              • Satış sinyali
              • Mevcut EMA
              • Fractals yüksek: n

            Aşağıdaki görüntü bu stratejinin planını göstermektedir:

            Fractals ve MA planı

            3. Fractals ve Alligator

              Bu stratejiye göre, yine aşağıdaki değerlerin sürekli kontrol edilmesine dayalı olarak alış ve satış sinyallerini grafikte yorum olarak geri döndürecek bir ticaret sistemi oluşturmamız gerekiyor:

                • Lips değeri
                • Teeth değeri
                • Jaws değeri
                • Kapanış fiyatı
                • fracDown değeri
                • fracUp değeri

              Lips değeri Teeth ve Jaws değerlerinden daha yüksekse, Teeth değeri Jaws değerinden daha yüksekse, kapanış fiyatı Teeth değerinden daha yüksekse ve fracDown değeri boş değere sahip değilse, ticaret sisteminin grafik üzerinde aşağıdaki değerleri geri döndürmesine ihtiyacımız vardır:

                • Alış sinyali
                • Jaws değeri n
                • Teeth değeri n
                • Lips değeri n
                • Fractals düşük: n

              Diğer durumda, Lips değeri Teeth ve Jaws değerlerinden daha düşükse, Teeth değeri Jaws değerinden daha düşükse, kapanış fiyatı Teeth değerinden daha düşükse ve fracUp değeri boş değere sahip değilse, bu kez de ticaret sisteminin grafik üzerinde aşağıdaki değerleri geri döndürmesine ihtiyacımız vardır:

                • Satış sinyali
                • Jaws değeri n
                • Teeth değeri n
                • Lips değeri n
                • Fractals yüksek: n

              Aşağıdaki görüntü bu stratejinin planını göstermektedir:

              Fractals ve Alligator planı

              Fractals göstergesine dayalı ticaret sistemi

              Bu bölümde, MetaTrader 5 terminalinde çalıştırmak üzere adım adım bahsedilen stratejilere dayalı bir ticaret sisteminin nasıl oluşturulacağını öğreneceğiz. Şimdi, stratejilerimizin programları için temel olması adına, ilk olarak Fractals göstergesi değerlerini grafik üzerinde yorum olarak geri döndürecek basit bir Fractals sistemi oluşturalım:

              double fonksiyonunu kullanarak yukarı ve aşağı doğru Fractals okları için diziler oluşturalım:

                 double fracUpArray[];
                 double fracDownArray[];

              ArraySetAsSeries fonksiyonunu kullanarak verileri sıralayalım. Parametreleri şunlardır:

              • dizi - oluşturulan fracUpArray ve fracDownArray dizilerini kullanacağız.
              • bayrak - true kullanacağız.
                 ArraySetAsSeries(fracUpArray,true);
                 ArraySetAsSeries(fracDownArray,true);

              fracDef için int türü değişken oluşturduktan sonra iFractals fonksiyonunu kullanarak Fractals göstergesini tanımlayalım. iFractals fonksiyonu Fractals 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 fracDef=iFractals(_Symbol,_Period);

              CopyBuffer fonksiyonunu kullanarak, tanımladığımız Fractals göstergesine göre verileri dolduralım. Parametreleri şunlardır:

              • Gösterge tanıtıcısı - fracDef gösterge tanımını kullanacağız.
              • Gösterge arabellek numarası - fracUp için UPPER_LINE ve fracDown için LOWER_LINE kullanacağız.
              • Başlangıç konumu - 1 ayarlayacağız.
              • Kopyalanacak veri miktarı - 3 ayarlayacağız.
              • Hedef dizi - fracUpArray ve fracDownArray ayarlayacağız.
                 CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                 CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);

              Fractals göstergesi değerlerini alalım:

                 double fracUpValue=NormalizeDouble(fracUpArray[0],5);
                 double fracDownValue=NormalizeDouble(fracDownArray[0],5);

              fracUpValue ve faceDownValue için boş değer olması durumunda sıfır değerini geri döndürelim:

                 if(fracUpValue==EMPTY_VALUE)
                    fracUpValue = 0;
                 if(fracDownValue==EMPTY_VALUE)
                    fracDownValue = 0;

              Fractals göstergesi değerlerini grafik üzerinde yorum olarak görüntüleyelim:

                 Comment("Fractals Up Value = ",fracUpValue,"\n",
                         "Fractals Down Value = ",fracDownValue);

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

              //+------------------------------------------------------------------+
              //|                                       Simple Fractals System.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()
                {
              //creating price array
                 double fracUpArray[];
                 double fracDownArray[];
              //Sorting data
                 ArraySetAsSeries(fracUpArray,true);
                 ArraySetAsSeries(fracDownArray,true);
              //define frac
                 int fracDef=iFractals(_Symbol,_Period);
              //define data and store result
                 CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                 CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
              //get values of fracUp and fracDown
                 double fracUpValue=NormalizeDouble(fracUpArray[0],5);
                 double fracDownValue=NormalizeDouble(fracDownArray[0],5);
              //returning zero if there is empty value of fracUp
                 if(fracUpValue==EMPTY_VALUE)
                    fracUpValue = 0;
              //returning zero if there is empty value of fracDown
                 if(fracDownValue==EMPTY_VALUE)
                    fracDownValue = 0;
              //comment on the chart
                 Comment("Fractals Up Value = ",fracUpValue,"\n",
                         "Fractals Down Value = ",fracDownValue);
                }
              //+------------------------------------------------------------------+

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

              Kılavuz - Simple Fractals System

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

              Simple Fractals System 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 Fractals System

              Grafiğin sağ üst köşesinde görebildiğimiz gibi Uzman Danışman grafiğe eklendi ve şimdi değerleri almaya hazırız:

              Grafikte Fractals göstergesi değerleri

              Sol üst köşede görebileceğimiz gibi iki değere sahibiz:

              • Yukarı doğru Fractals değeri = n
              • Aşağı doğru Fractals değeri = 0

              Yukarı doğru Fractals değerine sahip olduğumuz için aşağı doğru Fractals değeri sıfırdır.

              Grafikte Fractals göstergesi değerleri

              İki değere sahibiz:

              • Yukarı doğru Fractals değeri = 0
              • Aşağı doğru Fractals değeri = n

              Aşağı doğru Fractals değerine sahip olduğumuz için yukarı doğru Fractals değeri sıfırdır.

              1. Fractals yüksek ve düşük

                Fractals yüksek ve düşük stratejisinin ticaret sistemini oluşturmak için tam kod aşağıdadır:

                //+------------------------------------------------------------------+
                //|                                      Fractals highs and lows.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()
                  {
                //creating arrays
                   double fracUpArray[];
                   double fracDownArray[];
                //Sorting data
                   ArraySetAsSeries(fracUpArray,true);
                   ArraySetAsSeries(fracDownArray,true);
                //define frac
                   int fracDef = iFractals(_Symbol,_Period);
                //define data and store result
                   CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                   CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
                //define values
                   double fracUpValue = NormalizeDouble(fracUpArray[0],5);
                   double fracDownValue = NormalizeDouble(fracDownArray[0],5);
                //returning zero in case of empty values
                   if(fracUpValue ==EMPTY_VALUE)
                      fracUpValue = 0;
                   if(fracDownValue ==EMPTY_VALUE)
                      fracDownValue = 0;
                //conditions of the strategy and comment on the chart with highs and lows
                //in case of high
                   if(fracUpValue>0)
                     {
                      Comment("Fractals High around: ",fracUpValue);
                     }
                //in case of low
                   if(fracDownValue>0)
                     {
                      Comment("Fractals Low around: ",fracDownValue);
                     }
                  }
                //+------------------------------------------------------------------+

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

                Stratejinin koşulları:

                Fractals yüksek sinyali:

                   if(fracUpValue>0)
                     {
                      Comment("Fractals High around: ",fracUpValue);
                     }

                Fractals düşük sinyali:

                   if(fracDownValue>0)
                     {
                      Comment("Fractals Low around: ",fracDownValue);
                     }

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

                Grafiğe eklenmiş Fractals highs and lows

                Şimdi istenen değerleri alabiliriz. Fractals düşük sinyali:

                Fractals highs and lows - Fractals düşük sinyali

                Yukarıdaki grafikte sol üst köşede, Fractals göstergesinin bir düşük değer oluşturması nedeniyle Fractals düşük sinyalini ve değerini görüyoruz.

                Fractals yüksek sinyali:

                Fractals highs and lows - Fractals yüksek sinyali

                Görebildiğimiz gibi gösterge grafikte bir yüksek değer oluşturduğundan Fractals yüksek sinyaline ve değerine sahibiz.

                2. Fractals ve MA

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

                  //+------------------------------------------------------------------+
                  //|                                             Fractals with MA.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()
                    {
                  //creating arrays
                     double fracUpArray[];
                     double fracDownArray[];
                     MqlRates priceArray[];
                     double maArray[];
                  //Sorting data
                     ArraySetAsSeries(fracUpArray,true);
                     ArraySetAsSeries(fracDownArray,true);
                     ArraySetAsSeries(priceArray,true);
                     ArraySetAsSeries(maArray,true);
                  //define values
                     int fracDef = iFractals(_Symbol,_Period);
                     int Data = CopyRates(_Symbol,_Period,0,3,priceArray);
                     int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
                  //define data and store result
                     CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                     CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
                     CopyBuffer(maDef,0,0,3,maArray);
                  //get values
                     double fracUpValue = NormalizeDouble(fracUpArray[0],5);
                     double fracDownValue = NormalizeDouble(fracDownArray[0],5);
                     double closingPrice = priceArray[0].close;
                     double maValue = NormalizeDouble(maArray[0],6);
                     bool isBuy = false;
                     bool isSell = false;
                  //conditions of the strategy and comment on the chart
                  //in case of buy
                     if(closingPrice > maValue && fracDownValue != EMPTY_VALUE)
                       {
                        Comment("Buy","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals Low around: ",fracDownValue);
                        isBuy = true;
                       }
                  //in case of sell
                     if(closingPrice < maValue && fracUpValue != EMPTY_VALUE)
                       {
                        Comment("Sell","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals High around: ",fracUpValue);
                        isSell = true;
                       }
                    }
                  //+------------------------------------------------------------------+

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

                  İki dizi daha oluşturuyoruz: double fonksiyonunu kullanarak hareketli ortalama için ve fiyat, hacim ve makas bilgilerini depolayan MqlRates fonksiyonunu kullanarak fiyatlar için:

                     MqlRates priceArray[];
                     double maArray[];

                  Bu iki dizinin verilerini sıralıyoruz:

                     ArraySetAsSeries(priceArray,true);
                     ArraySetAsSeries(maArray,true);

                  CopyRates fonksiyonunu kullanılarak MqlRates'in geçmiş verilerini alıyoruz. 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ı - 3 ayarlayacağız.
                  • Hedef dizi - priceArray ayarlayacağız.

                  "iMA" fonksiyonunu kullanarak hareketli ortalamayı tanımlıyoruz. 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 Data = CopyRates(_Symbol,_Period,0,3,priceArray);
                     int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);

                  Verileri sıralıyoruz:

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

                  Kapanış fiyatını ve MA değerini tanımlıyoruz:

                  double closingPrice = priceArray[0].close;
                  double maValue = NormalizeDouble(maArray[0],6);

                  Aynı mumun alış ve satış sinyalleri arasındaki çakışmayı önlemek adına isBuy ve isSell için iki bool değişkeni oluşturuyoruz:

                     bool isBuy = false;
                     bool isSell = false;

                  Stratejinin koşulları:

                  Alış sinyali:

                     if(closingPrice > maValue && fracDownValue != EMPTY_VALUE)
                       {
                        Comment("Buy","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals Low around: ",fracDownValue);
                        isBuy = true;
                       }

                  Satış sinyali:

                     if(closingPrice < maValue && fracUpValue != EMPTY_VALUE)
                       {
                        Comment("Sell","\n",
                                "Current EMA: ",maValue,"\n",
                                "Fractals High around: ",fracUpValue);
                        isSell = true;
                       }

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

                  Grafiğe eklenmiş Fractals with MA

                  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ı. Şimdi sinyalleri alabiliriz:

                  Alış sinyali:

                  Fractals with MA - 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 EMA
                  • Fractals düşük: n

                  Satış sinyali:

                  Fractals with MA - Satış sinyali

                  Aşağıdaki değerlere sahibiz:

                  • Satış sinyali
                  • Mevcut EMA
                  • Fractals yüksek: n

                  3. Fractals ve Alligator

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

                    //+------------------------------------------------------------------+
                    //|                                      Fractals with Alligator.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()
                      {
                    //creating arrays
                       double fracUpArray[];
                       double fracDownArray[];
                       MqlRates priceArray[];
                       double jawsArray[];
                       double teethArray[];
                       double lipsArray[];
                    //Sorting data
                       ArraySetAsSeries(fracUpArray,true);
                       ArraySetAsSeries(fracDownArray,true);
                       ArraySetAsSeries(jawsArray,true);
                       ArraySetAsSeries(teethArray,true);
                       ArraySetAsSeries(lipsArray,true);
                    //define values
                       int fracDef=iFractals(_Symbol,_Period);
                       int Data = CopyRates(_Symbol,_Period,0,3,priceArray);
                       int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                    //define data and store result
                       CopyBuffer(fracDef,UPPER_LINE,2,1,fracUpArray);
                       CopyBuffer(fracDef,LOWER_LINE,2,1,fracDownArray);
                       CopyBuffer(alligatorDef,0,0,3,jawsArray);
                       CopyBuffer(alligatorDef,1,0,3,teethArray);
                       CopyBuffer(alligatorDef,2,0,3,lipsArray);
                    //get values
                       double fracUpValue=NormalizeDouble(fracUpArray[0],5);
                       double fracDownValue=NormalizeDouble(fracDownArray[0],5);
                       double closingPrice = priceArray[0].close;
                       double jawsValue=NormalizeDouble(jawsArray[0],5);
                       double teethValue=NormalizeDouble(teethArray[0],5);
                       double lipsValue=NormalizeDouble(lipsArray[0],5);
                    //creating bool variables to aviod buy ans sell signals at the same time
                       bool isBuy = false;
                       bool isSell = false;
                    //conditions of the strategy and comment on the chart
                    //in case of buy
                       if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue
                       && closingPrice > teethValue && fracDownValue != EMPTY_VALUE)
                         {
                          Comment("Buy","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals Low around: ",fracDownValue);
                          isBuy = true;
                         }
                    //in case of sell
                       if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue
                       && closingPrice < teethValue && fracUpValue != EMPTY_VALUE)
                         {
                          Comment("Sell","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals High around: ",fracUpValue);
                          isSell = true;
                         }
                      }
                    //+------------------------------------------------------------------+

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

                    Alligator bileşenleri için üç dizi oluşturuyoruz:

                       double jawsArray[];
                       double teethArray[];
                       double lipsArray[];

                    ArraySetAsSeries fonksiyonunu kullanarak bu dizilerdeki verileri sıralıyoruz:

                       ArraySetAsSeries(jawsArray,true);
                       ArraySetAsSeries(teethArray,true);
                       ArraySetAsSeries(lipsArray,true);

                    iAlligator fonksiyonunu kullanarak Alligator göstergesini tanımlıyoruz. Parametreleri şunlardır:

                    • Sembol adı - Mevcut sembole uygulanmak üzere _Symbol kullanacağız.
                    • Zaman dilimi - Mevcut zaman dilimine uygulanmak üzere _Period kullanacağız.
                    • Jaws’un periyodu - 13 ayarlayacağız.
                    • Jaws’un kayması - 8 ayarlayacağız.
                    • Teeth’in periyodu - 8 ayarlayacağız.
                    • Teeth’in kayması - 5 ayarlayacağız.
                    • Lips’in periyodu - 5 ayarlayacağız.
                    • Lips’in kayması - 3 ayarlayacağız.
                    • Moving Average yöntemi - Smoothed Moving Average (MODE_SMMA) kullanacağız.
                    • Uygulanacak fiyat - Medyan fiyatı (PRICE_MEDIAN) kullanacağız.
                    int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);

                    CopyBuffer fonksiyonunu kullanarak, tanımladığımız Alligator göstergesine göre verileri dolduruyoruz. Parametreleri şunlardır:

                    • Gösterge tanıtıcısı - alligatorDef gösterge tanımını kullanacağız.
                    • Gösterge arabellek numarası - Jaws için 0, Teeth için 1 ve Lips için 2 ayarlayacağız.
                    • Başlangıç konumu - 0 ayarlayacağız.
                    • Kopyalanacak veri miktarı - 3 ayarlayacağız.
                    • Hedef dizi - jawsArray, teethArray ve lipsArray ayarlayacağız.
                       CopyBuffer(alligatorDef,0,0,3,jawsArray);
                       CopyBuffer(alligatorDef,1,0,3,teethArray);
                       CopyBuffer(alligatorDef,2,0,3,lipsArray);

                    Alligator bileşenlerinin değerlerini alıyoruz:

                       double jawsValue=NormalizeDouble(jawsArray[0],5);
                       double teethValue=NormalizeDouble(teethArray[0],5);
                       double lipsValue=NormalizeDouble(lipsArray[0],5);

                    Stratejinin koşulları:

                    Alış sinyali:

                       if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue
                       && closingPrice > teethValue && fracDownValue != EMPTY_VALUE)
                         {
                          Comment("Buy","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals Low around: ",fracDownValue);
                          isBuy = true;
                         }

                    Satış sinyali:

                       if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue
                       && closingPrice < teethValue && fracUpValue != EMPTY_VALUE)
                         {
                          Comment("Sell","\n",
                                  "jawsValue = ",jawsValue,"\n",
                                  "teethValue = ",teethValue,"\n",
                                  "lipsValue = ",lipsValue,"\n",
                                  "Fractals High around: ",fracUpValue);
                          isSell = true;
                         }

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

                    Grafiğe eklenmiş Fractals with Alligator

                    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ı.

                    Şimdi sinyalleri alabiliriz:

                    Alış sinyali:

                    Fractals with Alligator - 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
                    • Jaws değeri
                    • Teeth değeri
                    • Lips değeri
                    • Fractals düşük değeri

                    Fractals with Alligator - 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
                    • Jaws değeri
                    • Teeth değeri
                    • Lips değeri
                    • Fractals yüksek değeri


                    Sonuç

                    Fractals teknik göstergesi, tek başına bir araç olarak veya bu makalede gördüğümüz gibi yararlı bilgiler sağladığı için başka bir teknik göstergeyle birlikte ticarette yararlı ve etkilidir. Makalenin ilk bölümünde, Fractals göstergesinin ne olduğunu, neyi ölçtüğünü, nasıl hesaplanarak grafik üzerinde oluşturulduğunu ve MetaTrader 5 terminalinde kullanılmak üzere yerleşik göstergenin nasıl ekleneceğini öğrendik. Devamında, bir sonraki bölümde göstergeyi aşağıdaki basit ticaret stratejileriyle nasıl kullanabileceğimizi gördük:

                    • Fractals yüksek ve düşük: Fractals göstergesinin yüksek ve düşük seviyelerini tespit etmek ve bu bilgiyi grafikte sinyal olarak almak için.
                    • Fractals ve MA: oluşturulan Fractals göstergesi sinyaline ek olarak fiyatın konumu ve hareketli ortalamanın ilişkisine dayalı fiyat hareketinin yönüne göre alış ve satış sinyalleri almak için.
                    • Fractals ve Alligator: oluşturulan Fractals göstergesi sinyaline ek olarak fiyatın konumu ve Alligator göstergesinin ilişkisine dayalı fiyat hareketinin yönüne göre alış ve satış sinyalleri almak için.

                    Ayrıca, bu stratejileri MQL5 ile kodlayarak, MetaTrader 5 grafiğinde otomatik sinyaller almak için bahsedilen her stratejiye dayalı bir ticaret sistemini nasıl oluşturabileceğimizi de öğrendik. Umarım bu makaleyi okumaktan tam fayda sağlamak ve bu makalenin konusu veya ilgili herhangi bir konu hakkında daha fazla bilgi edinmek ve derinlemesine anlayış elde etmek amacıyla okuduklarınızı kendi başınıza uygulamaya çalışmışsınızdır.

                    Kârlı olup olmayacağından emin olmak için makalede bahsedilen herhangi bir stratejiyi gerçek hesabınızda kullanmadan önce tam anlamıyla test etmeniz gerektiğini tekrar hatırlatmak istiyorum. Umarım makaleyi yararlı bulmuşsunuzdur ve ticaret sonuçlarınızı iyi bir şekilde geliştirebilecek yeni şeyler öğrenmişsinizdir. Makaleyi beğendiyseniz 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 üzere.

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

                    Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 26): Geleceğe doğru (I) Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 26): Geleceğe doğru (I)
                    Bugün emir sistemimizi bir üst seviyeye taşıyacağız. Ancak önce üzerinde durmamız gereken birkaç şey var. Şimdi, nasıl ticaret yapmak istediğimizle ilgili bazı çözülmesi gereken konulara odaklanacağız.
                    Popülasyon optimizasyon algoritmaları: İstilacı yabancı ot optimizasyonu (Invasive Weed Optimization, IWO) Popülasyon optimizasyon algoritmaları: İstilacı yabancı ot optimizasyonu (Invasive Weed Optimization, IWO)
                    Yabancı otların çok çeşitli koşullarda hayatta kalma konusundaki şaşırtıcı yeteneği, güçlü bir optimizasyon algoritması için bir fikir haline gelmiştir. IWO, daha önce incelenenler arasındaki en iyi algoritmalardan biridir.
                    Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 27): Geleceğe doğru (II) Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 27): Geleceğe doğru (II)
                    Doğrudan grafik üzerinde daha eksiksiz bir emir sistemine geçiş yapıyoruz. Bu makalede, emir sistemini düzeltmenin, daha doğrusu daha kolay anlaşılır hale getirmenin bir yolunu göreceğiz.
                    ONNX modellerinin regresyon metrikleri kullanılarak değerlendirilmesi ONNX modellerinin regresyon metrikleri kullanılarak değerlendirilmesi
                    Regresyon, etiketlenmemiş bir örnekten gerçek değeri tahmin etme görevidir. Regresyon metrikleri, regresyon modeli tahminlerinin doğruluğunu değerlendirmek için kullanılır.