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

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

MetaTrader 5Alım-satım | 2 Ağustos 2023, 15:05
521 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Giriş

En popüler teknik göstergelere dayalı ticaret sistemleri geliştirdiğimiz serimizin bu yeni makalesinde, Variable Index Dynamic Average (VIDYA) göstergesini konuk ediyoruz. Bu gösterge, ticaretimizde kullanabileceğimiz trendi takip eden göstergelerinden biridir. Bu kavram, göstergenin trendi izleyerek ona göre tepkiler verdiği anlamına gelir. Yani, gecikmeli bir göstergedir: göstergenin hareketi, fiyatın hareketinden sonra gerçekleşir. VIDYA göstergesiyle çalışırken aşağıdaki konular üzerinde ilerleyeceğiz:

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


Programlama becerilerinizi geliştirmek istiyorsanız, makale boyunca okuyacaklarınızı kendi başınıza tekrarlı bir şekilde pratik yapmalısınız, çünkü pratik yapmak her türlü öğrenme sürecindeki en önemli faktörlerden biridir. Makalede, 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.

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.


VIDYA göstergesinin tanımı

Variable Index Dynamic Average (VIDYA), Tushar Chande tarafından geliştirilmiş trendi takip eden bir göstergedir. Exponential Moving Average’a benzerdir, ancak fark, VIDYA göstergesinin göreceli fiyat volatilitesine göre dinamik olarak ayarlanmasıdır. VIDYA göstergesinde volatilite, Chande Momentum Oscillator (CMO) tarafından ölçülür. Göstergeyi manuel olarak hesaplarken, CMO’nun yaptığı hesaplamayı da göreceğiz. CMO, Exponential Moving Average’ı yumuşatmak için kullanılır. Dolayısıyla buradan VIDYA göstergesinin şu iki parametreye sahip olacağını anlayabiliriz: CMO periyodu ve EMA periyodu. Göstergenin parametrelerine daha sonra daha yakından bakacağız. VIDYA göstergesi, trendin yükseliş mi yoksa düşüş mü olduğunu belirlemek için herhangi bir hareketli ortalama gibi kullanılabilir. Trend hakkında daha fazla bilgi edinmek istiyorsanız, daha önce yayınladığım bir makalemde yer alan "Trendin tanımı" bölümünü okuyabilirsiniz. Ya da alış veya satış sinyalleri üretmek için kullanılabilir. Bunu bir sonraki bölümde VIDYA göstergesine dayalı bazı basit ticaret stratejilere değinirken pratiğe dökeceğiz.

Şimdi, arkasındaki ana konsept hakkında daha fazla bilgi edinmek amacıyla VIDYA göstergesinin manuel olarak nasıl hesaplandığını öğrenelim. VIDYA göstergesinin hesaplanması:

  • EMA'yı hesapla:

EMA(i) = Price(i) * F + EMA(i-1) * (1-F)

Tanımlamalar:

EMA(i) = Mevcut EMA

Price(i) = Mevcut fiyat

F (yumuşatma katsayısı) = 2 / (EMA'nın periyodu + 1)

EMA(i-1) = Önceki EMA

  • VIDYA’yı hesapla:

VIDYA(i) = Price(i) * F * ABS(CMO(i)) + VIDYA(i-1) * (1 - F * ABS(CMO(i)))

Tanımlamalar:

VIDYA(i) = Mevcut VIDYA

ABS(CMO(i)) = CMO’nun mevcut mutlak değeri

VIDYA(i-1) = Önceki VIDYA

  • CMO’yu hesapla:

CMO(i) = (UpSum(i) - DnSum(i)) / (UpSum(i) + DnSum(i))

Tanımlamalar:

UpSum(i) = Periyot boyunca gerçekleşen pozitif hareketlerin toplamının mevcut değeri

DnSum(i) = Periyot boyunca gerçekleşen negatif hareketlerin toplamının mevcut değeri

Bu şekilde, VIDYA göstergesini manuel olarak hesaplayabiliriz. Günümüzde, MetaTrader 5 platformuyla standart olarak gelen hazır bir gösterge bulunduğundan, VIDYA’yı 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 --> Trend --> Variable Index Dynamic Average

VIDYA göstergesini ekleme

Bu, program parametrelerini içeren aşağıdaki pencereyi açacaktır:

VIDYA göstergesi parametreleri

1 - CMO periyodu

2 - EMA periyodu

3 - Fiyat türü

4 - VIDYA çizgisinin rengi

5 - VIDYA çizgisinin stili

6 - VIDYA çizgisinin kalınlığı

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

Grafikte VIDYA göstergesi

Yukarıdaki görüntüden görebileceğimiz gibi, gösterge doğrudan grafik penceresine eklenir ve fiyatın üzerinde veya altında bir çizgi olarak görüntülenir. VIDYA çizgisini fiyatın üzerinde gördüğümüzde, piyasanın ayılar tarafından kontrol edildiğini anlarız ve tersi şekilde, VIDYA çizgisini fiyatın altında gördüğümüzde ise, bu da bize piyasanın boğalar tarafından kontrol edildiğini ifade eder.


VIDYA göstergesi stratejileri

Bu bölümde, VIDYA göstergesini arkasındaki ana konsepti temelinde bazı basit stratejilerle nasıl kullanabileceğimizi göreceğiz. 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.

    Birinci strateji: VIDYA - Trend tanımlayıcı

      Bu stratejiye göre, mevcut kapanış fiyatını mevcut VIDYA (9,12) (varsayılan ayarlar) değeriyle karşılaştırarak yükseliş veya düşüş trendi şeklinde sinyaller alacağız. Mevcut kapanış fiyatı mevcut VIDYA değerinden daha yüksekse, bu, yükseliş trendi sinyali olacaktır. Diğer durumda, mevcut kapanış fiyatı mevcut VIDYA değerinden daha düşükse, bu da düşüş trendi sinyali olacaktır.

      Mevcut kapanış > Mevcut VIDYA --> Yükseliş trendi

      Mevcut kapanış < Mevcut VIDYA --> Düşüş trendi

        İkinci strateji: VIDYA - Kapanış fiyatıyla çaprazlama

          Bu stratejiye göre, önceki stratejinin aynı değerlerini karşılaştırarak bu sefer alış veya satış sinyalleri alacağız. Mevcut kapanış fiyatı mevcut VIDYA değerinden daha yüksekse, bu, alış sinyali olacaktır. Tersi şekilde, mevcut kapanış fiyatı mevcut VIDYA değerinden daha düşükse, bu da satış sinyali olacaktır.

          Mevcut kapanış > Mevcut VIDYA --> Alış sinyali

          Mevcut kapanış < Mevcut VIDYA --> Satış sinyali

            Üçüncü strateji: VIDYA - İki VIDYA’nın çaprazlaması

              Bu stratejiye göre, mevcut VIDYA (9, 12) değeriyle mevcut VIDYA (20, 50) değerini karşılaştırarak alış veya satış sinyalleri alacağız. Mevcut VIDYA (9, 12) değeri mevcut VIDYA (20, 50) değerinden daha yüksekse, bu, alış sinyali olacaktır. Diğer senaryoda, mevcut VIDYA (9, 12) değeri mevcut VIDYA (20, 50) değerinden daha düşükse, bu da satış sinyali olacaktır.

              Mevcut VIDYA (9, 12) > Mevcut VIDYA (20, 50) --> Alış sinyali

              Mevcut VIDYA (9, 12) < Mevcut VIDYA (20, 50) --> Satış sinyali

              Bu üç basit strateji, VIDYA göstergesinin ticarette nasıl kullanılabileceğine dair fikir edinmeye yardımcı olacaktır.


              VIDYA 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: VIDYA - Trend tanımlayıcı

                  Bu stratejiye göre, ticaret sistemi her tikte mevcut kapanış fiyatını ve mevcut VIDYA değerini 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 kapanış fiyatı mevcut VIDYA değerinden daha yüksekse, şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

                  • Yükseliş trendi
                  • Mevcut kapanış fiyatı
                  • Mevcut VIDYA değeri

                  Diğer durumda, mevcut kapanış fiyatı mevcut VIDYA değerinden daha düşükse, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

                  • Düşüş trendi
                  • Mevcut kapanış fiyatı
                  • Mevcut VIDYA değeri

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

                  VIDYA - Trend tanımlayıcı planı

                    İkinci strateji: VIDYA - Kapanış fiyatıyla çaprazlama

                      Bu stratejiye göre, ticaret sistemi her tikte yine önceki stratejinin aynı değerlerini 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 kapanış fiyatı mevcut VIDYA değerinden daha yüksekse, şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

                      • Alış sinyali
                      • Mevcut kapanış fiyatı
                      • Mevcut VIDYA değeri

                      Tersi şekilde, mevcut kapanış fiyatı mevcut VIDYA 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 VIDYA değeri
                      Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:

                      VIDYA - Kapanış fiyatıyla çaprazlama planı

                        Üçüncü strateji: VIDYA - İki VIDYA’nın çaprazlaması

                          Bu stratejiye göre, ticaret sistemi her tikte mevcut VIDYA (9, 12) değerini ve mevcut VIDYA (20, 50) değerini 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 VIDYA (9, 12) değeri mevcut VIDYA (20, 50) değerinden daha yüksekse, şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:

                          • Alış sinyali
                          • Mevcut kapanış fiyatı
                          • Mevcut VIDYA (9, 12) değeri
                          • Mevcut VIDYA (20, 50) değeri

                          Diğer senaryoda, mevcut VIDYA (9, 12) değeri mevcut VIDYA (20, 50) 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 VIDYA (9, 12) değeri
                          • Mevcut VIDYA (20, 50) değeri

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


                          VIDYA - İki VIDYA’nın çaprazlaması planı

                          Artık stratejilerimiz için planımızı hazırladığımıza göre, şimdi makalenin en ilginç bölümüne geçebiliriz - ticaret sistemi geliştirme. 


                          VIDYA 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. İlk olarak, stratejilerimizin programlarına temel olması adına mevcut VIDYA 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:

                          Değerlerin kesirli olarak ifade edilmesi için double fonksiyonunu kullanarak VIDYA için bir dizi oluşturalım. double türü, veri türlerinden biri olan kesirli veri türlerinin bir çeşididir.

                          double vidyaArray[];

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

                          ArraySetAsSeries(vidyaArray,true);

                          vidyaDef için int türü değişken oluşturduktan sonra iVIDyA fonksiyonunu kullanarak VIDYA’yı tanımlayalım. iVIDyA fonksiyonu VIDYA göstergesinin tanıtıcısını geri döndürür.

                          Fonksiyonunun parametreleri şunlardır:

                          • Sembol adı - Mevcut sembole uygulanmak üzere _Symbol kullanacağız.
                          • Zaman dilimi - Mevcut zaman dilimine uygulanmak üzere _Period kullanacağız.
                          • Chande Momentum Oscillator periyodu - 9 ayarlayacağız.
                          • Exponential Moving Average periyodu - 12 ayarlayacağız.
                          • Exponential Moving Average için yatay kayma - 0 ayarlayacağız.
                          • Uygulanacak fiyat - Kapanış fiyatını (PRICE_CLOSE) kullanacağız.
                          int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);

                          CopyBuffer fonksiyonunu kullanarak vidyaArray dizisini vidyaDef değerleriyle dolduralım.

                          Fonksiyonunun parametreleri şunlardır:

                          • Gösterge tanıtıcısı - vidyaDef 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 - vidyaArray ayarlayacağız.
                          CopyBuffer(vidyaDef,0,0,3,vidyaArray);

                           vidyaVal 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 VIDYA değerini hesaplayalım.

                          Fonksiyonunun parametreleri şunlardır:

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

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

                          Comment("VIDYA Value is ",vidyaVal);

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

                          //+------------------------------------------------------------------+
                          //|                                                 Simple VIDYA.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 vidyaArray[];
                          
                             ArraySetAsSeries(vidyaArray,true);
                          
                             int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                          
                             CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                          
                             double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                          
                             Comment("VIDYA Value is ",vidyaVal);
                          
                            }
                          //+------------------------------------------------------------------+

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

                          Kılavuz - Simple VIDYA

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

                          Simple VIDYA penceresi

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

                          Grafiğe eklenmiş Simple VIDYA

                          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 VIDYA değerini grafik üzerinde yorum olarak gösterecektir:

                          Grafikte mevcut VIDYA değeri

                          Yukarıdaki görüntüden görebileceğimiz gibi, Uzman Danışman mevcut VIDYA değerini grafiğin sol üst köşesinde yorum olarak görüntülemektedir. Programımızdaki değerlerin MetaTrader 5'teki yerleşik VIDYA göstergesi tarafından görüntülenen değerlerle aynı olup olmadığını da kontrol edebiliriz. Bunu yapmak için, oluşturduğumuz Uzman Danışmanı yerleşik VIDYA göstergesiyle beraber grafik üzerinde çalıştıralım:

                          Simple VIDYA ile yerleşik VIDYA aynı değeri görüntülemektedir

                          Uzman Danışmanın ve göstergenin aynı değerleri görüntülediğini görüyoruz. Grafiğin sağ üst köşesinde Simple VIDYA Uzman Danışmanın eklendiğini, sol üst köşesinde ise Uzman Danışman tarafından yazılan 0.998257 değeri görünmektedir; grafiğe eklenen yerleşik göstergenin veri penceresinde de aynı değer görünmektedir.

                            Birinci strateji: VIDYA - Trend tanımlayıcı

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

                              //+------------------------------------------------------------------+
                              //|                                       VIDYA trend identifier.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 priceArray[];
                                 double vidyaArray[];
                              
                                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                 ArraySetAsSeries(vidyaArray,true);
                              
                                 int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                              
                                 CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                              
                                 double currentClose=NormalizeDouble(priceArray[2].close,6);
                                 double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                              
                                 if(currentClose>vidyaVal)
                                   {
                                    Comment("Uptrend","\n",
                                            "Current Close Value is ",currentClose,"\n",
                                            "Current VIDYA Value is ",vidyaVal);
                                   }
                              
                                 if(currentClose<vidyaVal)
                                   {
                                    Comment("Downtrend","\n",
                                            "Current Close Value is ",currentClose,"\n",
                                            "Current VIDYA Value is ",vidyaVal);
                                   }
                              
                              
                                }
                              //+------------------------------------------------------------------+

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

                              İki dizi oluşturuyoruz: daha önce yaptığımız gibi double fonksiyonunu kullanarak VIDYA için ve MqlRates fonksiyonunu kullanarak fiyatlar için:

                                 MqlRates priceArray[];
                                 double vidyaArray[];

                              Oluşturulan bu dizileri sıralıyoruz. vidyaArray için daha önce yaptığımız gibi ArraySetAsSeries fonksiyonunu kullanacağız. priceArray için de MqlRates geçmiş verilerini almak için 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ıç zamanı - 0 ayarlayacağız.
                              • Bitiş zamanı - 3 ayarlayacağız.
                              • Hedef dizi - priceArray ayarlayacağız.

                                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                 ArraySetAsSeries(vidyaArray,true);

                              Mevcut kapanış fiyatını ve mevcut VIDYA değerini tanımlıyoruz:

                                 double currentClose=NormalizeDouble(priceArray[2].close,6);
                                 double vidyaVal = NormalizeDouble(vidyaArray[0],6);

                              Stratejinin koşulları:

                              1. Yükseliş trendi:

                                 if(currentClose>vidyaVal)
                                   {
                                    Comment("Uptrend","\n",
                                            "Current Close Value is ",currentClose,"\n",
                                            "Current VIDYA Value is ",vidyaVal);
                                   }

                              2. Düşüş trendi:

                                 if(currentClose<vidyaVal)
                                   {
                                    Comment("Downtrend","\n",
                                            "Current Close Value is ",currentClose,"\n",
                                            "Current VIDYA Value is ",vidyaVal);
                                   }

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

                              Grafiğe eklenmiş VIDYA trend identifier

                              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:

                              1. Yükseliş trendi:

                              VIDYA trend identifier - Yükseliş trendi sinyali

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

                              • Yükseliş trendi
                              • Mevcut kapanış fiyatı
                              • Mevcut VIDYA değeri

                              2. Düşüş trendi:

                              VIDYA trend identifier - Düşüş trendi sinyali

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

                              • Düşüş trendi
                              • Mevcut kapanış fiyatı
                              • Mevcut VIDYA değeri
                                İkinci strateji: VIDYA - Kapanış fiyatıyla çaprazlama

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

                                  //+------------------------------------------------------------------+
                                  //|                                          VIDYA one 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()
                                    {
                                     MqlRates priceArray[];
                                     double vidyaArray[];
                                  
                                     int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                     ArraySetAsSeries(vidyaArray,true);
                                  
                                     int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                                  
                                     CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                                  
                                     double currentClose=NormalizeDouble(priceArray[2].close,6);
                                     double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                                  
                                     if(currentClose>vidyaVal)
                                       {
                                        Comment("Buy signal","\n",
                                                "Current Close Value is ",currentClose,"\n",
                                                "Current VIDYA Value is ",vidyaVal);
                                       }
                                  
                                     if(currentClose<vidyaVal)
                                       {
                                        Comment("Sell signal","\n",
                                                "Current Close Value is ",currentClose,"\n",
                                                "Current VIDYA Value is ",vidyaVal);
                                       }
                                  
                                  
                                    }
                                  //+------------------------------------------------------------------+

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

                                  Stratejinin koşulları:

                                  1. Alış sinyali:

                                     if(currentClose>vidyaVal)
                                       {
                                        Comment("Buy signal","\n",
                                                "Current Close Value is ",currentClose,"\n",
                                                "Current VIDYA Value is ",vidyaVal);
                                       }

                                  2. Satış sinyali:

                                     if(currentClose<vidyaVal)
                                       {
                                        Comment("Sell signal","\n",
                                                "Current Close Value is ",currentClose,"\n",
                                                "Current VIDYA Value is ",vidyaVal);
                                       }

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

                                  Grafiğe eklenmiş VIDYA one 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:

                                  1. Alış sinyali:

                                  VIDYA one crossover - 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 VIDYA değeri

                                  2. Satış sinyali:

                                  VIDYA one crossover - 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 VIDYA değeri
                                    Üçüncü strateji: VIDYA - İki VIDYA’nın çaprazlaması

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

                                      //+------------------------------------------------------------------+
                                      //|                                          VIDYA two 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()
                                        {
                                         MqlRates priceArray[];
                                         double vidyaArray[];
                                         double vidyaArray1[];
                                      
                                         int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                         ArraySetAsSeries(vidyaArray,true);
                                         ArraySetAsSeries(vidyaArray1,true);
                                      
                                         int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                                         int vidyaDef1 = iVIDyA(_Symbol,_Period,20,50,0,PRICE_CLOSE);
                                      
                                         CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                                         CopyBuffer(vidyaDef1,0,0,3,vidyaArray1);
                                      
                                         double currentClose=NormalizeDouble(priceArray[2].close,6);
                                         double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                                         double vidyaVal1 = NormalizeDouble(vidyaArray1[0],6);
                                      
                                         if(vidyaVal>vidyaVal1)
                                           {
                                            Comment("Buy signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current VIDYA (9,12) Value is ",vidyaVal,"\n",
                                                    "Current VIDYA (20,50) Value is ",vidyaVal1);
                                           }
                                      
                                         if(vidyaVal<vidyaVal1)
                                           {
                                            Comment("Sell signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current VIDYA (9,12) Value is ",vidyaVal,"\n",
                                                    "Current VIDYA (20,50) Value is ",vidyaVal1);
                                           }
                                      
                                      
                                        }
                                      //+------------------------------------------------------------------+

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

                                      vidyaArray, vidyaArray1 ve priceArray olmak üzere üç dizi oluşturuyoruz:

                                         MqlRates priceArray[];
                                         double vidyaArray[];
                                         double vidyaArray1[];

                                      Oluşturulan bu dizileri sıralıyoruz:

                                         int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
                                         ArraySetAsSeries(vidyaArray,true);
                                         ArraySetAsSeries(vidyaArray1,true);

                                      vidyaDef ve vidyaDef1’i tanımlıyoruz:

                                         int vidyaDef = iVIDyA(_Symbol,_Period,9,12,0,PRICE_CLOSE);
                                         int vidyaDef1 = iVIDyA(_Symbol,_Period,20,50,0,PRICE_CLOSE);

                                      vidyaArray ve vidyaArray1 dizilerini dolduruyoruz:

                                         CopyBuffer(vidyaDef,0,0,3,vidyaArray);
                                         CopyBuffer(vidyaDef1,0,0,3,vidyaArray1);

                                      currentClose, vidyaVal ve vidyaVal1 değerlerini tanımlıyoruz:

                                         double currentClose=NormalizeDouble(priceArray[2].close,6);
                                         double vidyaVal = NormalizeDouble(vidyaArray[0],6);
                                         double vidyaVal1 = NormalizeDouble(vidyaArray1[0],6);

                                      Stratejinin koşulları:

                                      1. Alış sinyali:

                                         if(vidyaVal>vidyaVal1)
                                           {
                                            Comment("Buy signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current VIDYA (9,12) Value is ",vidyaVal,"\n",
                                                    "Current VIDYA (20,50) Value is ",vidyaVal1);
                                           }

                                      2. Satış sinyali:

                                         if(vidyaVal<vidyaVal1)
                                           {
                                            Comment("Sell signal","\n",
                                                    "Current Close Value is ",currentClose,"\n",
                                                    "Current VIDYA (9,12) Value is ",vidyaVal,"\n",
                                                    "Current VIDYA (20,50) Value is ",vidyaVal1);
                                           }

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

                                      Grafiğe eklenmiş VIDYA two 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:

                                      Alış sinyali:

                                      VIDYA two crossover - 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 VIDYA (9,12) değeri
                                      • Mevcut VIDYA (20,50) değeri

                                      Satış sinyali:

                                      VIDYA two crossover - 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 VIDYA (9,12) değeri
                                      • Mevcut VIDYA (20,50) değeri


                                      Sonuç

                                      Bu makaledeki konuğumuz Variable Index Dynamic Average (VIDYA) göstergesiydi. Makalemizin “VIDYA göstergesinin tanımı” başlıklı ilk bölümünde, VIDYA göstergesinin ne olduğunu, neyi ölçtüğünü, manuel olarak nasıl hesaplandığını ve MetaTrader 5’te bulunan yerleşik VIDYA göstergesinin nasıl kullanılacağını öğrendik. Devamında, “VIDYA göstergesi stratejileri” bölümünde, göstergenin arkasındaki ana konsepte dayanan bazı basit stratejileri ele alarak onu ticaretimizde nasıl kullanabileceğimizi gördük:

                                      • VIDYA - Trend tanımlayıcı: kapanış fiyatının VIDYA çizgisinin üzerinde veya altında olmasına dayalı olarak yükseliş trendi veya düşüş trendi şeklinde sinyaller almak için.
                                      • VIDYA - Kapanış fiyatıyla çaprazlama: kapanış fiyatının VIDYA çizgisinin üzerinde veya altında olmasına dayalı olarak alış veya satış sinyalleri almak için.
                                      • VIDYA - İki VIDYA’nın çaprazlaması: VIDYA (9,12) çizgisinin VIDYA (20, 50) çizgisinin üzerinde veya altında olmasına dayalı olarak alış veya satış sinyalleri almak için.

                                      Ardından, “VIDYA göstergesine dayalı ticaret sisteminin planı” bölümünde, 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. Son olarak da “VIDYA göstergesine dayalı ticaret sistemi” bölümünde, hazırladığımız plan çerçevesinde, MetaTrader 5 işlem platformunda kullanılmak üzere, ele aldığımız stratejilere dayalı olarak MQL5 dili aracılığıyla bir ticaret sistemi oluşturduk.

                                      Umarım makale boyunca sunulan kodları kendi başınıza yazmaya çalışmışsınızdır - ticaret stratejisi kodlarını nasıl yazacağınızı bu şekilde öğrenebilirsiniz. Bu, özellikle yeni başlayanlar için çok önemlidir; programlama becerilerinizi geliştirmek istiyorsanız, okuduklarınızı kendi başınıza tekrarlı bir şekilde pratik yapmalısınız, çünkü pratik yapmak her türlü öğrenme sürecindeki en önemli faktörlerden biridir. Şunu her zaman olduğu gibi tekrar 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.

                                      Umarım makale sizin için faydalı olur ve ticaret hedeflerinize ulaşmanıza, bu veya başka herhangi bir konuda yeni fikirler bulmanıza yardım sağlar. Bu makaleyi beğendiyseniz ve buna benzer makaleler 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 - RSI, MACD, Stochastic Oscillator, Moving Average, Bollinger Bands, Envelopes dahil daha birçok araca dayalı ticaret sistemlerinin nasıl geliştirileceğini halihazırda işledik. Yeni teknik göstergeleri keşfetme yolculuğumuzda, bir sonraki makalede görüşmek üzere.

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

                                      Popülasyon optimizasyon algoritmaları: Gri kurt optimizasyonu (Grey Wolf Optimizer, GWO) Popülasyon optimizasyon algoritmaları: Gri kurt optimizasyonu (Grey Wolf Optimizer, GWO)
                                      Bu makalede en yeni modern optimizasyon algoritmalarından biri olan gri kurt optimizasyonunu ele alacağız. Test fonksiyonları üzerindeki orijinal davranışı, bu algoritmayı daha önce incelenenler arasında en dikkat çekici olanlardan biri haline getirmektedir. Bu, sinir ağlarının, çok değişkenli düzgün fonksiyonların eğitiminde kullanılan en iyi algoritmalardan biridir.
                                      Bull’s Power göstergesine dayalı bir ticaret sistemi nasıl geliştirilir? Bull’s Power göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?
                                      En popüler teknik göstergelere dayalı ticaret sistemlerinin nasıl geliştirileceğine ilişkin serimizin yeni makalesine hoş geldiniz. Bu sefer Bull’s Power teknik göstergesini inceleyeceğiz.
                                      Popülasyon optimizasyon algoritmaları: Guguk kuşu optimizasyon algoritması (Cuckoo Optimization Algorithm, COA) Popülasyon optimizasyon algoritmaları: Guguk kuşu optimizasyon algoritması (Cuckoo Optimization Algorithm, COA)
                                      İnceleyeceğimiz bir sonraki algoritma, Levy uçuşlarını kullanan guguk kuşu arama optimizasyonudur. Bu, en yeni optimizasyon algoritmalarından biridir ve derecelendirme tablosunda yeni bir liderdir.
                                      Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 21): Yeni emir sistemi (IV) Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 21): Yeni emir sistemi (IV)
                                      Sonunda görsel sistem çalışmaya başlayacak... tam olarak tamamlanmış şekilde olmasa da. Burada ana değişiklikleri yapmayı bitireceğiz. Çok sayıda değişiklik olacaktır ve onların hepsi gereklidir. Tüm çalışma oldukça ilginç olacaktır.