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

Mohamed Abdelmaaboud | 2 Ağustos, 2023

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(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(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(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:

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:

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:

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:

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:

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:

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:

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

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

Fonksiyonunun parametreleri şunlardır:

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:

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:

   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:

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:

İ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:

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:

Üçü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:

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:


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:

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.