VIDYA göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?
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:
- VIDYA göstergesinin tanımı
- VIDYA göstergesi stratejileri
- VIDYA göstergesine dayalı ticaret sisteminin planı
- VIDYA göstergesine dayalı ticaret sistemi
- 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
Bu, program parametrelerini içeren aşağıdaki pencereyi açacaktır:
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:
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.
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
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
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.
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:
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
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:
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:
Programa çift tıklayarak veya onu grafiğe sürükleyerek başlatıyoruz. Devamında, aşağıdaki pencere açılacaktır:
Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:
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:
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:
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.
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:
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:
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:
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
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:
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:
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:
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
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:
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:
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:
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
- Ücretsiz alım-satım uygulamaları
- İşlem kopyalama için 8.000'den fazla sinyal
- Finansal piyasaları keşfetmek için ekonomik haberler
Gizlilik ve Veri Koruma Politikasını ve MQL5.com Kullanım Şartlarını kabul edersiniz