
DeMarker göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?
Giriş
En popüler teknik göstergelere dayalı ticaret sistemleri geliştirdiğimiz serimizin yeni makalesine hoş geldiniz. Ticarette lehimize kullanabileceğimiz yeni bir teknik aracı, göstergeyi ayrıntılı olarak inceleyeceğiz. Bu gösterge DeMarker göstergesidir, onu aşağıdaki konular aracılığıyla ele alacağız:
- DeMarker göstergesinin tanımı
- DeMarker göstergesi stratejileri
- DeMarker göstergesine dayalı ticaret sisteminin planı
- DeMarker göstergesine dayalı ticaret sistemi
- Sonuç
Bu makale boyunca, kodlarımızı yazmak için MetaQuotes Language 5 (MQL5) programlama dilini ve MetaTrader 5 işlem platformunda yerleşik MetaEditor kod düzenleyicisini kullanacağız. MetaTrader 5’in nasıl kurulacağı ve MetaEditor’ın nasıl kullanılacağı hakkında daha fazla bilgi edinmek istiyorsanız, önceki makalelerimden birinde yer alan "MetaEditor’da MQL5 kodu yazma" bölümünü okuyabilirsiniz.
Ticaret ve programlama becerilerinizi geliştirmek ve maksimum faydayı elde etmek istiyorsanız, bu makalede öğrendiklerinizi kendi başınıza uygulamanızı tavsiye ederim çünkü pratik, herhangi bir öğrenme adımında çok önemli bir faktördür. Bahsedilecek stratejilerin temel amacının göstergenin arkasındaki ana konsepti kavramak olduğunu belirtmek isterim. Dolayısıyla, temel amaç yalnızca eğitimdir ve ticaretiniz için kârlı veya uygun olacağından emin olmak için bir gerçek hesapta kullanmadan önce herhangi bir stratejiyi derinlemesine test etmelisiniz.
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.
DeMarker göstergesinin tanımı
DeMarker göstergesini tanımlamak ve hakkında daha ayrıntılı bilgi edinmek istiyorsak, ne olduğunu, neyi ölçtüğünü, manuel olarak nasıl hesaplandığını ve lehimize kullanmak için nasıl değerlendirileceğini öğrenmemiz gerekecektir. DeMarker göstergesi bir osilatör göstergesidir ve teknik analist Thomas DeMark tarafından oluşturulmuştur. Bu göstergenin adının yaratıcısından geldiği açıktır ve "DeM" göstergesi olarak da bilinmektedir. Bu teknik gösterge, ticaret enstrümanına olan talebi ölçer ve mevcut yüksek ve düşük fiyatlarını önceki fiyatlarla karşılaştırarak piyasanın yön eğilimini değerlendirir.
Bu göstergeyi manuel olarak hesaplamak için aşağıdaki adımları izleyebiliriz:
DMark(i) = SMA(DeMax, N) / (SMA(DeMax, N) + SMA(DeMin, N))
Tanımlamalar:
- DMark(i) = mevcut DeMarker değeri
- SMA = Simple Moving Average
- DeMax = DeMarker'ın maksimum değeri
- N = kullanılan periyot
- DeMin = DeMarker'ın minimum değeri
DeMax şu şekilde hesaplanabilir:
DeMax(i) = YÜKSEK(i) - YÜKSEK(i-1)
Aksi takdirde:
DeMax(i) = 0
DeMin şu şekilde hesaplanabilir:
DeMin(i) = DÜŞÜK(i-1) - DÜŞÜK(i)
Aksi takdirde:
DeMin(i) = 0
Göstergeyi hesapladıktan sonra, bahsettiğimiz gibi ticaret enstrümanına olan talebi ölçmek için kullanabileceğimiz 0 ila 1 arasında dalgalanan bir osilatör çizgisi ürettiğini görebiliriz. Günümüzde, MetaTrader 5 platformuyla standart olarak gelen hazır bir gösterge bulunduğundan, DeMarker’ı 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 --> Osilatörler --> DeMarker
Gösterge seçildiğinde, aşağıdaki gösterge parametreleri penceresi açılacaktır:
1 - periyodu ayarlamak için.
2 - göstergenin çizgisinin rengini ayarlamak için.
3 - göstergenin çizgisinin stilini ayarlamak için.
4 - göstergenin çizgisinin kalınlığını ayarlamak için.
Gösterge için uygun parametreleri ayarladıktan sonra gösterge aşağıdaki gibi grafiğe eklenecektir:
Yukarıdaki görüntüde, DeMarker göstergesinin grafiğe eklendiğini ve 0 ile 1 arasında salınan bir çizgi olarak alt pencerede görüntülendiğini görüyoruz. Çizginin söz konusu alandaki konumuna göre bu göstergeyi değerlendirebiliriz. Gösterge 0.70'e yaklaşırsa aşırı alış durumu olduğu, 0.30'a yaklaşırsa, aşırı satış durumu olduğu anlamına gelir.
DeMarker göstergesi stratejileri
Bu bölümde, DeMarker göstergesini ana konseptine uygun olarak bazı basit stratejilerle nasıl kullanabileceğimizi göreceğiz. Üç farklı stratejiden bahsedeceğiz.
Bu stratejiye göre, mevcut DeMarker değeriyle göstergenin son 5 periyotluk ortalamasını karşılaştırarak DeMarker güçlü veya DeMarker zayıf şeklinde sinyaller alacağız. Mevcut DeMarker değeri göstergenin son 5 periyotluk ortalamasından daha yüksekse, bu, DeMarker güçlü sinyali olacaktır. Diğer durumda, mevcut DeMarker değeri göstergenin son 5 periyotluk ortalamasından daha düşükse, bu da DeMarker zayıf sinyali olacaktır.
Daha basit ifadeyle,
Mevcut DeMarker değeri >= DeMarker'ın 5 periyotluk ortalaması --> DeMarker güçlü
Mevcut DeMarker değeri <= DeMarker'ın 5 periyotluk ortalaması --> DeMarker zayıf
Bu stratejiye göre, gösterge aşırı alış ve aşırı satış bölgelerine ulaştığında ilgili sinyaller alacağız. Mevcut DeMarker değeri 0.70 seviyesine eşit veya daha yüksekse, bu, aşırı alış bölgesinde olunduğuna dair bir sinyal olacaktır. Mevcut DeMarker değeri 0.30 seviyesine eşit veya daha düşükse, bu da aşırı satış bölgesinde olunduğuna dair bir sinyal olacaktır.
Daha basit ifadeyle,
Mevcut DeMarker değeri >= 0.70 --> Aşırı alış
Mevcut DeMarker değeri <= 0.30 --> Aşırı satış
Bu stratejiye göre, mevcut hareketin değişme olasılığı olduğu konusunda fikir veren boğa veya ayı türü diverjans şeklinde sinyaller alacağız. Bu sinyalleri, mevcut yüksek/düşük, önceki yüksek/düşük, mevcut DeMarker ve önceki DeMarker olmak üzere altı değeri izleyerek elde edeceğiz. Bunun basit bir diverjans durumu olduğunu belirtmekte fayda vardır, en etkili olan, fiyatların en yüksek ve en düşük seviyelerini göstergenin en yüksek ve en düşük seviyeleriyle karşılaştırıp izlemektir. Bu basit durumda, mevcut yüksek değeri önceki yüksek değerinden daha yüksekken mevcut DeMarker değeri önceki DeMarker değerinden daha düşükse, bu, ayı türü diverjans sinyali olacaktır. Eğer mevcut düşük değeri önceki düşük değerinden daha düşükken mevcut DeMarker değeri önceki DeMarker değerinden daha yüksekse, bu da boğa türü diverjans olacaktır.
Daha basit ifadeyle,
Mevcut yüksek > Önceki yüksek ve Mevcut DeMarker < Önceki DeMarker --> Ayı türü diverjans
Mevcut düşük < Önceki düşük ve Mevcut DeMarker > Önceki DeMarker --> Boğa türü diverjans
DeMarker 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 DeMarker değerini ve göstergenin son 5 periyotluk ortalamasını kontrol etmeli ve bu iki değeri birbiriyle karşılaştırmalıdır. Mevcut DeMarker değeri göstergenin son 5 periyotluk ortalamasından daha yüksekse, şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:
- DeMarker güçlü
- Mevcut DeMarker değeri
- DeMarker'ın 5 periyotluk ortalaması
Diğer senaryoda, mevcut DeMarker değeri göstergenin son 5 periyotluk ortalamasından daha düşükse, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:
- DeMarker zayıf
- Mevcut DeMarker değeri
- DeMarker'ın 5 periyotluk ortalaması
Bu stratejiye göre, ticaret sistemi her tikte mevcut DeMarker değerini kontrol etmeli ve bu değeri göstergenin 0.70 ve 0.30 değerleriyle karşılaştırmalıdır. Mevcut DeMarker değeri 0.70 seviyesine eşit veya daha yüksekse, şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:
- Aşırı alış
- Mevcut DeMarker değeri
Diğer senaryoda, mevcut DeMarker 0.30 seviyesine eşit veya daha düşükse, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:
- Aşırı satış
- Mevcut DeMarker değeri

Bu stratejiye göre, ticaret sistemi her tikte altı değeri (mevcut yüksek/düşük, önceki yüksek/düşük, mevcut DeMarker ve önceki DeMarker) kontrol etmeli ve bu değerleri stratejinin koşullarına uygun şekilde karşılaştırarak ilgili sinyali grafik üzerinde yorum olarak görüntülemelidir. Mevcut yüksek değeri önceki yüksek değerinden daha yüksekken mevcut DeMarker değeri önceki DeMarker değerinden daha düşükse, şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:
- Ayı türü diverjans
- Mevcut yüksek değeri
- Önceki yüksek değeri
- Mevcut DeMarker değeri
- Önceki DeMarker değeri
Diğer senaryoda, mevcut düşük değeri önceki düşük değerinden daha düşükken mevcut DeMarker değeri önceki DeMarker değerinden daha yüksekse, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:
- Boğa türü diverjans
- Mevcut düşük değeri
- Önceki düşük değeri
- Mevcut DeMarker değeri
- Önceki DeMarker değeri
DeMarker göstergesine dayalı ticaret sistemi
Bu bölümde, 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şturacağız. İlk olarak, stratejilerimizin programlarına temel olması adına mevcut DeMarker 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:
Birinci adım:
Değerlerin kesirli olarak ifade edilmesi için double fonksiyonunu kullanarak DeMarker için bir dizi oluşturalım.
double deMarkerArray[];
İkinci adım:
ArraySetAsSeries fonksiyonunu kullanarak DeMarker dizisini mevcut veriden başlayarak sıralayalım - başarılı olması durumunda true, aksi takdirde false geri döner (bool türü):
ArraySetAsSeries(deMarkerArray,true);
Üçüncü adım:
deMarkerDef için int türü değişken oluşturduktan sonra iDeMarker fonksiyonunu kullanarak DeMarker’ı tanımlayalım. iDeMarker fonksiyonu DeMarker göstergesinin tanıtıcısını geri döndürür. Parametreleri şunlardır:
- Sembol adı - Mevcut sembole uygulanmak üzere _Symbol kullanacağız.
- Zaman dilimi - Mevcut zaman dilimine uygulanmak üzere _Period kullanacağız.
- Moving Average periyodu - 14 ayarlayacağız.
int deMarkerDef = iDeMarker(_Symbol,_Period,14);
Dördüncü adım:
CopyBuffer fonksiyonunu kullanarak deMarkerArray dizisini deMarkerDef değerleriyle dolduralım. Parametreleri şunlardır:
- Gösterge tanıtıcısı - deMarkerDef 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 - deMarkerArray ayarlayacağız.
CopyBuffer(deMarkerDef,0,0,3,deMarkerArray);
Beşinci adım:
deMarkerVal 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 DeMarker değerini hesaplayalım. Parametreleri şunlardır:
- Normalleştirilmiş sayı - deMarkerArray[0] kullanacağız.
- Ondalık basamak sayısı - 6 ayarlayacağız.
double deMarkerVal = NormalizeDouble(deMarkerArray[0],6);
Altıncı adım:
Comment fonksiyonunu kullanarak mevcut DeMarker değerini grafikte yorum olarak görüntüleyelim:
Comment("DeMarker Value is ",deMarkerVal);
Bu stratejiye dayalı Uzman Danışmanın tam kodu aşağıda gösterilmektedir:
//+------------------------------------------------------------------+ //| Simple DeMarker System.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+void OnTick() void OnTick() { double deMarkerArray[]; ArraySetAsSeries(deMarkerArray,true); int deMarkerDef = iDeMarker(_Symbol,_Period,14); CopyBuffer(deMarkerDef,0,0,3,deMarkerArray); double deMarkerVal = NormalizeDouble(deMarkerArray[0],6); Comment("DeMarker Value is ",deMarkerVal); } //+------------------------------------------------------------------+
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 DeMarker değerini grafik üzerinde yorum olarak gösterecektir:
Yukarıdaki görüntüden görebileceğimiz gibi, Uzman Danışman mevcut DeMarker değerini grafiğin sol üst köşesinde yorum olarak görüntülemektedir.
Bu stratejiye dayalı Uzman Danışmanın tam kodu aşağıda gösterilmektedir:
//+------------------------------------------------------------------+ //| DeMarker Strength.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { double deMarkerArray[]; ArraySetAsSeries(deMarkerArray,true); int deMarkerDef = iDeMarker(_Symbol,_Period,14); CopyBuffer(deMarkerDef,0,0,6,deMarkerArray); double deMarkerVal = NormalizeDouble(deMarkerArray[0],4); double deMarkerVal1 = NormalizeDouble(deMarkerArray[1],4); double deMarkerVal2 = NormalizeDouble(deMarkerArray[2],4); double deMarkerVal3 = NormalizeDouble(deMarkerArray[3],4); double deMarkerVal4 = NormalizeDouble(deMarkerArray[4],4); double deMarkerVal5 = NormalizeDouble(deMarkerArray[5],4); double deMarkerAvgVal = (deMarkerVal1+deMarkerVal2+deMarkerVal3+deMarkerVal4+deMarkerVal5)/5; if(deMarkerVal>deMarkerAvgVal) { Comment("DeMarker is strong","\n", "Current DeMarker Value is ",deMarkerVal,"\n", "AVG DeMarker Value is ",deMarkerAvgVal); } if(deMarkerVal<deMarkerAvgVal) { Comment("DeMarker is weak","\n", "Current DeMarker Value is ",deMarkerVal,"\n", "AVG DeMarker Value is ",deMarkerAvgVal); } } //+------------------------------------------------------------------+
Bu koddaki farklılıklar şunlardır:
Burada yalnızca mevcut DeMarker değerini değil, aynı zamanda önceki beş DeMarker değerini de tanımlıyoruz:
double deMarkerVal = NormalizeDouble(deMarkerArray[0],4); double deMarkerVal1 = NormalizeDouble(deMarkerArray[1],4); double deMarkerVal2 = NormalizeDouble(deMarkerArray[2],4); double deMarkerVal3 = NormalizeDouble(deMarkerArray[3],4); double deMarkerVal4 = NormalizeDouble(deMarkerArray[4],4); double deMarkerVal5 = NormalizeDouble(deMarkerArray[5],4);
Önceki beş DeMarker değerinin ortalamasını (deMarkerAvgVal) hesaplıyoruz:
double deMarkerAvgVal = (deMarkerVal1+deMarkerVal2+deMarkerVal3+deMarkerVal4+deMarkerVal5)/5;
Stratejinin koşulları:
Mevcut DeMarker değerini hesapladığımız deMarkerAvgVal değeriyle karşılaştırarak uygun sinyali elde edeceğiz. Bu amaçla "If" fonksiyonunu ve söz dizimini kullanacağız:
if(ifade) --> operatör
“DeMarker güçlü” durumunda, deMarkerVal, deMarkerAvgVal'dan daha yüksek olmalı (bu, söz dizimindeki ifadedir), bu gerçekleştiğinde de ticaret sistemi grafikte yorum olarak DeMarker güçlü sinyalini geri döndürmelidir (bu, söz dizimindeki operatördür).
if(deMarkerVal>deMarkerAvgVal) { Comment("DeMarker is strong","\n", "Current DeMarker Value is ",deMarkerVal,"\n", "AVG DeMarker Value is ",deMarkerAvgVal); }
“DeMarker zayıf” durumunda ise, deMarkerVal, deMarkerAvgVal'dan daha düşük olmalı (bu, söz dizimindeki ifadedir), bu gerçekleştiğinde de ticaret sistemi grafikte yorum olarak DeMarker zayıf sinyalini geri döndürmelidir (bu, söz dizimindeki operatördür).
if(deMarkerVal<deMarkerAvgVal) { Comment("DeMarker is weak","\n", "Current DeMarker Value is ",deMarkerVal,"\n", "AVG DeMarker Value is ",deMarkerAvgVal); }
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:
DeMarker güçlü:
Yukarıdaki görüntüden görebileceğimiz gibi, program DeMarker güçlü koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:
- DeMarker güçlü --> çünkü mevcut DeMarker değeri göstergenin son beş değerinin ortalamasının üzerindedir
- Mevcut DeMarker değeri
- DeMarker'ın 5 periyotluk ortalaması
DeMarker zayıf:
Yukarıdaki görüntüden görebileceğimiz gibi, program DeMarker zayıf koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:
- DeMarker zayıf --> çünkü mevcut DeMarker değeri göstergenin son beş değerinin ortalamasının altındadır
- Mevcut DeMarker değeri
- DeMarker'ın 5 periyotluk ortalaması
Aşağıda bu stratejinin tam kodu yer almaktadır:
//+------------------------------------------------------------------+ //| Simple DeMarker System.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+void OnTick() void OnTick() { double deMarkerArray[]; ArraySetAsSeries(deMarkerArray,true); int deMarkerDef = iDeMarker(_Symbol,_Period,14); CopyBuffer(deMarkerDef,0,0,3,deMarkerArray); double deMarkerVal = NormalizeDouble(deMarkerArray[0],6); if(deMarkerVal<=0.30) { Comment("Oversold","\n", "DeMarker Value is ",deMarkerVal); } if(deMarkerVal>=0.70) { Comment("Overbought","\n", "DeMarker Value is ",deMarkerVal); } if(deMarkerVal>0.30 && deMarkerVal<0.70) { Comment("DeMarker Value is ",deMarkerVal); } } //+------------------------------------------------------------------+
Bu koddaki farklılıklar şunlardır:
Stratejinin koşulları:
“Aşırı satış” durumunda, deMarkerVal, 0.30'dan daha düşük olmalı (ifade), bu gerçekleştiğinde de ticaret sistemi grafikte yorum olarak aşırı satış sinyalini geri döndürmelidir (operatör).
if(deMarkerVal<=0.30) { Comment("Oversold","\n", "DeMarker Value is ",deMarkerVal); }
“Aşırı alış” durumunda ise, deMarkerVal, 0.70'den daha yüksek olmalı (ifade), bu gerçekleştiğinde de ticaret sistemi grafikte yorum olarak aşırı alış sinyalini geri döndürmelidir (operatör).
if(deMarkerVal>=0.70) { Comment("Overbought","\n", "DeMarker Value is ",deMarkerVal); }
deMarkerVal’ın 0.30 ile 0.70 arasında olması durumunda ise (ifade), grafikte mevcut DeMarker değeri haricinde herhangi bir sinyal gösterilmeyecektir (operatör).
if(deMarkerVal>0.30 && deMarkerVal<0.70) { Comment("DeMarker Value is ",deMarkerVal); }
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:
Aşırı alış:
Yukarıdaki görüntüden görebileceğimiz gibi, program aşırı alış koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:
- Aşırı alış
- Mevcut DeMarker değeri
Aşırı satış:
Yukarıdaki görüntüden görebileceğimiz gibi, program aşırı satış koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:
- Aşırı satış
- Mevcut DeMarker değeri
Sinyal olmaması durumunda:
Bu durumda da, grafikte mevcut DeMarker değeri haricinde herhangi bir sinyal görünmemektedir.
Bu stratejiye dayalı Uzman Danışmanın tam kodu aşağıda gösterilmektedir:
//+------------------------------------------------------------------+ //| DeMarker Divergence.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 deMarkerArray[]; MqlRates pArray[]; ArraySetAsSeries(deMarkerArray,true); ArraySetAsSeries(pArray,true); int deMarkerDef = iDeMarker(_Symbol,_Period,14); int pData = CopyRates(_Symbol,_Period,0,14,pArray); CopyBuffer(deMarkerDef,0,0,14,deMarkerArray); double deMarkerVal = NormalizeDouble(deMarkerArray[0],4); double deMarkerPrevVal = NormalizeDouble(deMarkerArray[1],4); double currentHigh = NormalizeDouble(pArray[0].high,6); double currentLow = NormalizeDouble(pArray[0].low,6); double prevHigh = NormalizeDouble(pArray[1].high,6); double prevLow = NormalizeDouble(pArray[1].low,6); if(currentHigh>prevHigh && deMarkerVal<deMarkerPrevVal) { Comment("Bearish divergence","\n", "Current High is ",currentHigh,"\n", "Prev. High Value is ",prevHigh,"\n", "Current DeMarker Value is ",deMarkerVal,"\n", "Prev. DeMarker Value is ",deMarkerPrevVal); } if(currentLow<prevLow && deMarkerVal>deMarkerPrevVal) { Comment("Bullish divergence","\n", "Current Low is ",currentLow,"\n", "Prev. Low Value is ",prevLow,"\n", "Current DeMarker Value is ",deMarkerVal,"\n", "Prev. DeMarker Value is ",deMarkerPrevVal); } } //+------------------------------------------------------------------+
Bu koddaki farklılıklar şunlardır:
İki dizi oluşturuyoruz: daha önce yaptığımız gibi double fonksiyonunu kullanarak DeMarker için ve fiyat, hacim ve makas bilgilerini depolayan MqlRates fonksiyonunu kullanarak fiyatlar için:
double deMarkerArray[]; MqlRates pArray[];
Oluşturulan bu dizileri sıralıyoruz.
ArraySetAsSeries(deMarkerArray,true); ArraySetAsSeries(pArray,true);
deMarketDef ve pData’yı tanımlıyoruz:
int deMarkerDef = iDeMarker(_Symbol,_Period,14); int pData = CopyRates(_Symbol,_Period,0,14,pArray);
deMarkerArray dizisini dolduruyoruz:
CopyBuffer(deMarkerDef,0,0,14,deMarkerArray);
deMarkerVal, deMarkerPrevVal, currentHigh, currentLow, prevHigh ve prevLow değerlerini tanımlıyoruz:
double deMarkerVal = NormalizeDouble(deMarkerArray[0],4); double deMarkerPrevVal = NormalizeDouble(deMarkerArray[1],4); double currentHigh = NormalizeDouble(pArray[0].high,6); double currentLow = NormalizeDouble(pArray[0].low,6); double prevHigh = NormalizeDouble(pArray[1].high,6); double prevLow = NormalizeDouble(pArray[1].low,6);
Stratejinin koşulları:
Ayı türü diverjans:
if(currentHigh>prevHigh && deMarkerVal<deMarkerPrevVal) { Comment("Bearish divergence","\n", "Current High is ",currentHigh,"\n", "Prev. High Value is ",prevHigh,"\n", "Current DeMarker Value is ",deMarkerVal,"\n", "Prev. DeMarker Value is ",deMarkerPrevVal); }
Boğa türü diverjans:
if(currentLow<prevLow && deMarkerVal>deMarkerPrevVal) { Comment("Bullish divergence","\n", "Current Low is ",currentLow,"\n", "Prev. Low Value is ",prevLow,"\n", "Current DeMarker Value is ",deMarkerVal,"\n", "Prev. DeMarker Value is ",deMarkerPrevVal); }
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:
Boğa türü diverjans:
Yukarıdaki görüntüden görebileceğimiz gibi, program boğa türü diverjans koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:
- Boğa türü diverjans
- Mevcut yüksek değeri
- Önceki yüksek değeri
- Mevcut DeMarker değeri
- Önceki DeMarker değeri
Ayı türü diverjans:
Yukarıdaki görüntüden görebileceğimiz gibi, program ayı türü diverjans koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:
- Ayı türü diverjans
- Mevcut yüksek değeri
- Önceki yüksek değeri
- Mevcut DeMarker değeri
- Önceki DeMarker değeri
Sonuç
Bu makalede DeMarker teknik göstergesini detaylıca inceledik. İlk olarak, ne olduğu, neyi ölçtüğü, manuel olarak nasıl hesaplandığı hakkında konuştuk. Sonrasında, bazı basit stratejileri ele alarak onu ticaretimizde nasıl kullanabileceğimizi gördük. Bu basit stratejiler şunlardı:
- DeMarker gücü: mevcut DeMarker değerine ve son beş DeMarker değerinin ortalamasına dayalı olarak DeMarker güçlü veya DeMarker zayıf şeklinde sinyaller almak için.
- DeMarker - OB ve OS: 0'dan 1'e kadar olan ölçekte mevcut DeMarker değerinin konumuna göre aşırı alış veya aşırı satış şeklinde sinyaller almak için.
- DeMarker - Diverjans: mevcut yüksek/düşük, önceki yüksek/düşük, mevcut DeMarker ve önceki DeMarker değerlerine dayalı olarak boğa veya ayı türü diverjans şeklinde sinyaller almak için.
Ardından, 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, makalenin en ilginç bölümüne geldik ve 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.
Ş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.
MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal makale: https://www.mql5.com/en/articles/11394





- Ü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