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

Accumulation/Distribution (AD) göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?

MetaTrader 5Ticaret | 2 Aralık 2022, 10:25
355 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Giriş

Makale serimiz, en popüler teknik göstergeleri ayrıntılı olarak incelemeye ve onları basit stratejilerle ticaret sistemleri şeklinde hayata geçirmeye adanmıştır. Ticaret sistemlerini, MetaTrader 5 işlem platformunda çalışabilmesi üzerine MQL5 dilini kullanılarak geliştiriyoruz. Bu makalede, finansal enstrümanlara farklı bir bakış açısından bakmamıza yardımcı olan hacim verileriyle ilgilenen Accumulation/Distribution (AD) göstergesini inceleyeceğiz. Aşağıda bu göstergeyi kapsayacak konular yer almaktadır:

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

İlk olarak, bu teknik göstergenin ne olduğunu, neyi ölçtüğünü ve manuel olarak nasıl hesaplandığını (arkasındaki ana fikri daha iyi anlamak adına bir örnek üzerinde de görerek) ayrıntılı olarak konuşacağız. AD göstergesinin temellerini irdeledikten sonra, onu bazı basit stratejilerle nasıl kullanabileceğimizi inceleyeceğiz. Ardından, ele aldığımız her strateji için programlarını oluştururken bize yardımcı olacak bir plan tasarlayacağız. Sonrasında da makalenin en ilginç kısmına geçeceğiz: MetaTrader 5 işlem platformunda çalıştırılabilecek bir ticaret sistemi oluşturmak için MQL5 kodumuzu nasıl yazacağımızı öğreneceğiz.

Anlayışınızı derinleştirmenize yardımcı olacağından, makaledeki kodları kendi başınıza yazarak okuduklarınızı uygulamaya çalışmanızı tavsiye ederim. Çünkü bu makale serisinin ana amacı, en popüler göstergelere dayalı ticaret sistemlerinin nasıl tasarlanacağına ilişkin yeni fikirler keşfetmeyi sağlamaktır. 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.

Şimdi, öğrenme yolculuğumuzda yeni bir adım daha atmak için konularımızı incelemeye başlayalım.

AD göstergesinin tanımı

Bu bölümde, Accumulation/Distribution (AD) göstergesi hakkında ayrıntılı olarak konuşacağız: nedir, neyi ölçmektedir ve manuel olarak nasıl hesaplanmaktadır? AD göstergesi Marc Chaikin tarafından geliştirilmiştir. Hacme dayalı bir göstergedir, yani formülünde hacim verilerini kullanır. Hacim, finansal enstrümana giren ve çıkan toplam para akışını yansıttığı için ticaretin önemli bir parçasıdır. Bize grafiklerde ek bir perspektif sağlar. AD göstergesi ayrıca trendi onaylamak veya terse dönüş konusunda uyarmak için de hacmi kullanır. 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.

Herhangi bir kümülatif gösterge gibi, AD göstergesi de para akışı hacminin her periyot için ara toplamıdır. Bu, göstergenin hesaplaması sırasında kolayca anlaşılabilir. Aşağıdaki adımlarla AD göstergesini nasıl hesaplayabileceğimize bakalım.

AD göstergesini hesaplamak için üç adım vardır:

  1. Para akışı çarpanının hesaplanması = ((kapanış-düşük)-(yüksek-kapanış))/(yüksek-düşük)
  2. Para akışı hacminin hesaplanması = para akışı çarpanı * periyot hacmi
  3. AD = önceki AD değeri + mevcut para akışı hacmi

Şimdi bu hesaplama adımlarını bir örnek üzerinde görelim. Bir finansal enstrüman için aşağıdaki verilere sahip olduğumuzu varsayalım:

Gün Yüksek Düşük Kapanış Hacim
1 55 53 54 12000
2 56 54 55 10000
3 61 59 60 15000
4 67 64 65 20000
5 63 58 60 10000
6 58 52 55 5000
7 64 58 60 7000
8 52 47 50 7500
9 52 48 48 8000
10 50 48 49 5000
11 49 47 48 6000
12 48 47 47 7500
13 50 46 48 9000
14 52 45 47 10000
15 55 46 49 7000
16 53 45 47 7500
17 51 43 46 6000
18 50 42 44 5000
19 50 43 45 15000

Şimdi bu veri tablosuna dayanarak AD göstergesini hesaplayalım.

İlk olarak, ((kapanış-düşük)-(yüksek-kapanış))/(yüksek-düşük) şeklinde para akışı çarpanını hesaplıyoruz:

AD göstergesini hesaplama örneği

Devamında, para akışı çarpanı * periyot hacmi şeklinde para akışı hacmini hesaplıyoruz:

AD göstergesini hesaplama örneği

Son olarak da önceki AD değeri + mevcut para akışı hacmi şeklinde AD göstergesini hesaplıyoruz:

AD göstergesini hesaplama örneği

Böylece, AD göstergesini manuel olarak hesaplamış olduk. Ancak aslında, hazır bir gösterge bulunduğu için tüm bu hesaplamaları pratikte yapmak zorunda değiliz. Onları burada incelememizin amacı, göstergenin nasıl çalıştığını daha iyi anlamaktır. Şimdi AD göstergesini kullanmak istiyorsak tek yapmamız gereken onu MetaTrader 5 terminalindeki mevcut göstergeler listesinden seçmektir:

MetaTrader 5 --> Ekle sekmesi --> Göstergeler --> Hacim --> Accumulation/Distribution

AD göstergesini ekleme

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

AD göstergesi parametreleri

1. Hacim türü: Tik veya Gerçek.

2. AD eğrisinin rengi.

3. AD eğrisinin türü.

4. AD eğrisinin kalınlığı.

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

Grafikte AD göstergesi

Şimdi, AD göstergesini ticaretimizde nasıl kullanabileceğimizden bahsedeceğiz.


AD göstergesi stratejileri

Bu bölümde, AD göstergesine dayalı birkaç basit stratejiyi ele alacağız. Umarım bu bölüm sizin için faydalı olur ve AD göstergesini kullanma konusunda yeni fikirler bulmanıza yardım sağlar.

Üzerinde duracağımız stratejilerin optimize edilmesi gerektiğini göreceksiniz, bu sorun değildir. Bu basit stratejilere değiniyoruz çünkü buradaki asıl amacımız AD göstergesinin konseptini kavramak ve MQL5 diliyle bir ticaret sisteminin nasıl geliştirilebileceğini öğrenmektir. Dolayısıyla, bir gerçek hesapta kullanmadan önce her stratejiyi tam anlamıyla test ettiğinizden ve gerekirse optimize ettiğinizden emin olmalısınız. Ayrıca, stratejilerde karşılaştırılan değerlerin birbirine olan periyot mesafesini de ticaretinize uygun olacak şekilde düzenleyebilirsiniz.

Şimdi, AD göstergesiyle kullanılabilecek bazı basit stratejilere bakalım.

  • Birinci strateji: AD hareketi

Bu stratejiye göre, mevcut AD değerini önceki AD değeriyle karşılaştırarak AD eğrisinin yönünü belirleyeceğiz. Mevcut AD değeri önceki AD değerinden daha yüksekse, bu, AD yükseliyor anlamına gelir. Tam tersi şekilde, eğer mevcut AD değeri önceki AD değerinden daha düşükse, bu da AD düşüyor demektir.

Basitçe ifadeyle:

Mevcut AD > Önceki AD --> AD yükseliyor

Mevcut AD < Önceki AD --> AD düşüyor

  • İkinci strateji: AD gücü

Bu stratejiye göre, mevcut AD değerini önceki on AD değerinin maksimum ve minimum değerleriyle karşılaştırarak mevcut AD gücünü belirleyeceğiz. Mevcut AD değeri önceki on AD değerinin maksimum değerinden daha yüksekse, bu, AD güçlü anlamına gelir ve tersi olarak, mevcut AD değeri önceki on AD değerinin minimum değerinden daha düşükse, bu da AD zayıf anlamına gelir.

Basitçe ifadeyle:

Mevcut AD > Önceki 10 AD değerinin maksimum değeri --> AD güçlü

Mevcut AD < Önceki 10 AD değerinin minimum değeri --> AD zayıf

  • Üçüncü strateji: AD - Yükseliş trendi

Bu stratejiye göre, yükseliş trendi sırasında fiyat hareketinin güçlü olup olmadığını ve ayı türü diverjans oluşup olmadığını belirleyeceğiz. Ayı türü diverjans, fiyatın yeni bir yüksek yaptığı ancak göstergenin yeni bir yüksek yapamadığı durumdur. AD'nin son iki değerini ve fiyatın son iki yüksek değerini karşılaştırarak değerlendirmemizi yapacağız.

Mevcut AD değeri önceki AD değerinden daha yüksek olduğunda ve aynı zamanda mevcut yüksek değeri de önceki yüksek değerinden daha yüksek olduğunda, bu, yükseliş trendi sırasında fiyat hareketi güçlü demektir. Eğer mevcut AD değeri önceki AD değerinden daha düşük olup mevcut yüksek değeri önceki yüksek değerinden daha yüksekse, bu, ayı türü diverjans anlamına gelir.

Basitçe ifadeyle:

Mevcut AD > Önceki AD ve Mevcut yüksek > Önceki yüksek --> Yükseliş trendi sırasında fiyat hareketi güçlü

Mevcut AD < Önceki AD ve Mevcut yüksek > Önceki yüksek --> Ayı türü diverjans

  • Üçüncü strateji: AD - Düşüş trendi

Bu stratejiye göre, düşüş trendi sırasında fiyat hareketinin güçlü olup olmadığını ve boğa türü diverjans oluşup olmadığını belirleyeceğiz. Boğa türü diverjans, fiyatın yeni bir düşük yaptığı ancak göstergenin yeni bir düşük yapamadığı durumdur. AD'nin son iki değerini ve fiyatın son iki düşük değerini karşılaştırarak değerlendirmemizi yapacağız. Mevcut AD değeri önceki AD değerinden daha düşük olduğunda ve aynı zamanda mevcut düşük değeri de önceki düşük değerinden daha düşük olduğunda, bu, düşüş trendi sırasında fiyat hareketi güçlü demektir. Eğer mevcut AD değeri önceki AD değerinden daha yüksek olup mevcut düşük değeri önceki düşük değerinden daha düşükse, bu, boğa türü diverjans anlamına gelir.

Basitçe ifadeyle:

Mevcut AD < Önceki AD ve Mevcut düşük < Önceki düşük --> Düşüş trendi sırasında fiyat hareketi güçlü

Mevcut AD > Önceki AD ve Mevcut düşük < Önceki düşük --> Boğa türü diverjans 


AD göstergesine dayalı ticaret sisteminin planı

Artık ticaret sistemimizi oluşturmak için adımlarımızı düzenlemenin zamanı geldi. Bu bölümde, ticaret sistemimizi sorunsuz bir şekilde oluşturmamızda bize yardımcı olması adına, ele aldığımız stratejiler için bir plan hazırlayacağız. Bu aşamanın herhangi bir ticaret sistemi oluşturma sürecinde çok önemli olduğunu düşünüyorum. Plan sayesinde, gelecekteki programlardan neler istediğimizi, neler yapması gerektiklerini adım adım net bir şekilde tanımlamış olacağız.

Öncelikle, mevcut AD değerini grafik üzerinde yorum olarak görüntüleyecek program için basit bir plan oluşturalım. Bu program, stratejilerin programları için bir temel teşkil edecektir. İşte programın planı:

Mevcut AD değerini grafik üzerinde yorum olarak görüntüleyecek programın planı 

Şimdi stratejiler için plana geçelim.

  • Birinci strateji: AD hareketi

Bu stratejide, mevcut AD değerini önceki AD değeriyle karşılaştırarak AD eğrisinin yönünü belirleyeceğiz. Dolayısıyla, her tikte mevcut AD değerini ve önceki AD değerini kontrol etmemiz gerekiyor. Mevcut AD değeri önceki AD değerinden daha yüksek olduğunda, bu, AD yükseliyor olacaktır ve tersi şekilde, mevcut AD değeri önceki AD değerinden daha düşük olduğunda da, bu, AD düşüyor olacaktır. Ve sonuç olarak, grafik üzerinde şunları görüntülememiz gerekiyor: mevcut AD sinyali (AD yükseliyor veya AD düşüyor), mevcut AD değeri ve önceki AD değeri. Her değer ayrı bir satırda bulunacaktır. Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:

AD hareketi planı

  • İkinci strateji: AD gücü

Bu stratejide, mevcut AD değerini önceki on AD değerinin maksimum ve minimum değerleriyle karşılaştırarak mevcut AD gücünü belirleyeceğiz. Mevcut AD değeri önceki on AD değerinin maksimum değerinden daha yüksekse, bu, AD güçlü olacaktır ve tersi olarak, mevcut AD değeri önceki on AD değerinin minimum değerinden daha düşükse, bu da AD zayıf olacaktır. Ve sonuç olarak, grafik üzerinde şunları görüntülememiz gerekiyor: mevcut AD sinyali (AD güçlü veya AD zayıf), mevcut AD değeri, önceki on AD değerinin maksimum değeri ve önceki on AD değerinin minimum değeri. Her değer ayrı bir satırda bulunacaktır.

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

AD gücü planı

  • Üçüncü strateji: AD - Yükseliş trendi

Bu stratejide, mevcut fiyat hareketini ve ayı türü diverjans var olup olmadığını değerlendireceğiz. Bu amaçla, yükseliş trendi sırasında, ilk olarak, mevcut AD değerini kontrol etmemiz ve önceki AD değeriyle karşılaştırmamız gerekiyor. Mevcut AD değeri önceki AD değerinden daha yüksekse: mevcut yüksek değerini kontrol etmemiz ve önceki yüksek değeriyle karşılaştırmamız gerekiyor ve eğer mevcut yüksek değeri de önceki yüksek değerinden daha yüksekse, bu, yükseliş trendi sırasında fiyat hareketi güçlü olacaktır. Mevcut AD değeri önceki AD değerinden daha düşükse: yine mevcut yüksek değerini kontrol etmemiz ve önceki yüksek değeriyle karşılaştırmamız gerekiyor ve eğer mevcut yüksek değeri önceki yüksek değerinden daha yüksekse, bu, ayı türü diverjans olacaktır. Ve sonuç olarak, grafik üzerinde şunları görüntülememiz gerekiyor: mevcut AD sinyali (yükseliş trendi sırasında fiyat hareketi güçlü veya ayı türü diverjans), mevcut AD değeri, önceki AD değeri, mevcut yüksek değeri ve önceki yüksek değeri. Her değer ayrı bir satırda bulunacaktır.

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

AD - Yükseliş trendi planı

  • Üçüncü strateji: AD - Düşüş trendi

Bu stratejide, mevcut fiyat hareketini ve boğa türü diverjans var olup olmadığını değerlendireceğiz. Bu amaçla, düşüş trendi sırasında, ilk olarak, mevcut AD değerini kontrol etmemiz ve önceki AD değeriyle karşılaştırmamız gerekiyor. Mevcut AD değeri önceki AD değerinden daha düşükse: mevcut düşük değerini kontrol etmemiz ve önceki düşük değeriyle karşılaştırmamız gerekiyor ve eğer mevcut düşük değeri de önceki düşük değerinden daha düşükse, bu, düşüş trendi sırasında fiyat hareketi güçlü olacaktır. Mevcut AD değeri önceki AD değerinden daha yüksekse: yine mevcut düşük değerini kontrol etmemiz ve önceki düşük değeriyle karşılaştırmamız gerekiyor ve eğer mevcut düşük değeri önceki düşük değerinden daha düşükse, bu, boğa türü diverjans olacaktır. Ve sonuç olarak, grafik üzerinde şunları görüntülememiz gerekiyor: mevcut AD sinyali (düşüş trendi sırasında fiyat hareketi güçlü veya boğa türü diverjans), mevcut AD değeri, önceki AD değeri, mevcut yüksek değeri ve önceki yüksek değeri. Her değer ayrı bir satırda bulunacaktır.

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

AD - Düşüş trendi planı


AD 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. Stratejilerimizin programlarına temel olması için yalnızca mevcut AD değerini geri döndüren basit bir program yazarak başlayalım:

  • Kesirli sayıların görüntülenebilmesi adına double fonksiyonunu kullanarak AD değerleri için bir dizi oluşturuyoruz:
double ADArray[];
  • ArraySetAsSeries fonksiyonunu kullanarak diziyi mevcut veriden başlayarak sıralıyoruz:
ArraySetAsSeries(ADArray,true);
  • ADDef için int türü değişkeni oluşturduktan sonra iAD fonksiyonunu kullanarak AD'yi tanımlıyoruz. iAD fonksiyonu, Accumulation/Distribution göstergesinin tanıtıcısını geri döndürür. Parametreleri şunlardır: sembol, periyot, hacim.
int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
  • Kopyalanan veri miktarını geri döndüren CopyBuffer fonksiyonunu kullanarak ADArray dizisini ADDef değerleriyle dolduruyoruz. Parametreleri şunlardır: gösterge tanıtıcısı, arabellek numarası, başlangıç zamanı, bitiş zamanı, arabellek.
CopyBuffer(ADDef,0,0,3,ADArray);
  • ADValue için int türü değişken oluşturduktan sonra, double türünde değer geri döndüren NormalizeDouble fonksiyonunu kullanarak mevcut AD değerini hesaplıyoruz: 
int ADValue=NormalizeDouble(ADArray[0],5);
  • Comment fonksiyonunu kullanarak mevcut AD değerini grafikte yorum olarak görüntülüyoruz:
Comment("AD Value is: ",ADValue);

Mevcut AD değerini grafikte yorum olarak görüntüleyen programın kodu aşağıdadır:

//+------------------------------------------------------------------+
//|                                                    Simple AD.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()
  {
   //create an array for AD
   double ADArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(ADArray,true);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD value
   int ADValue=NormalizeDouble(ADArray[0],5);
   
   //creating a comment with AD value
   Comment("AD Value is: ",ADValue);  
  }
//+------------------------------------------------------------------+

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

Kılavuz - Simple AD

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

Simple AD penceresi

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

Grafiğe eklenmiş Simple AD

Böylece, gösterge mevcut AD değerini grafik üzerinde yorum olarak görüntüleyecektir:

Grafikte mevcut AD değeri

Programımızdaki değerlerin MetaTrader 5'teki yerleşik Accumulation/Distribution 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ı standart Accumulation/Distribution göstergesiyle beraber grafik üzerinde çalıştıralım. Bu durumda, her iki program da aşağıdaki ekran görüntüsünde gösterildiği gibi aynı değerleri görüntüleyecektir:

Simple AD ile standart AD aynı değeri görüntülemektedir

  • Birinci strateji: AD hareketi

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

//+------------------------------------------------------------------+
//|                                           Simple AD movement.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()
  {
   //create array for AD
   double ADArray[];
   
   //sorting array from the current data
   ArraySetAsSeries(ADArray,true);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   //Comparing two values and giving signal
   //Rising AD
   if(ADCurrrentValue>ADPrevValue)
   {
      Comment("AD line is rising","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue);
   }
   
   //Declining AD
   if(ADCurrrentValue<ADPrevValue)
   {
      Comment("AD line is declining","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue);
   }  
  }
//+------------------------------------------------------------------+

Bu kod, temel koddan farklıdır. Farklılıklar şunlardır:

  • Mevcut AD değerini ve önceki AD değerini hesaplıyoruz:
int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
int ADPrevValue=NormalizeDouble(ADArray[1],5);
  • Stratejiye göre koşulları ayarlıyoruz ve grafik üzerinde yorumları görüntülüyoruz:
    • AD yükseliyor:
if(ADCurrrentValue>ADPrevValue)
{
 Comment("AD line is rising","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue);
}
    • AD düşüyor:
if(ADCurrrentValue<ADPrevValue)
{
 Comment("AD line is declining","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue);
} 

Derledikten sonra, programın dosyasını Kılavuz penceresinden bulabiliriz:

Kılavuz - Simple AD movement

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

Simple AD movement penceresi

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

Grafiğe eklenmiş Simple AD movement

Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları görüntüleyecektir:

AD yükseliyor,

Mevcut veriler: 

Simple AD movement - AD yükseliyor - Mevcut veriler 

Önceki veriler:

Simple AD movement - AD yükseliyor - Önceki verileralt

AD düşüyor,

Mevcut veriler:

Simple AD movement - AD düşüyor - Mevcut veriler

Önceki veriler:

Simple AD movement - AD düşüyor - Önceki verileralt

  • İkinci strateji: AD gücü

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

//+------------------------------------------------------------------+
//|                                           Simple AD strength.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
void OnTick()
  {
   //Create array for AD
   double ADArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(ADArray,true);
  
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,10,ADArray);
 
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
  
   //Defining Max and Min values from the last 10 AD values
   int ADMax =ArrayMaximum(ADArray,1,10);
   int ADMin =ArrayMinimum(ADArray,1,10);
   
   //Calculating Max and Min values
   int ADMaxValue=ADArray[ADMax];
   int ADMinValue=ADArray[ADMin];

   //Comparing two values and giving signal
   //AD current is strong
   if(ADCurrrentValue>ADMaxValue)
   {
      Comment("AD Current value is strong","\n","AD current value is: ,",ADCurrrentValue,
   "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
   }
   
   //AD current is weak
   if(ADCurrrentValue<ADMinValue)
   {
      Comment("AD Current value is weak","\n","AD current value is: ,",ADCurrrentValue,
   "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
   }
  }
//+------------------------------------------------------------------+

Bir önceki koda göre burada birçok farklılık mevcuttur. Farklılıklar aşağıda açıklanmaktadır:

  • ADMaxValue ve ADMinValue için int türü değişkenler oluşturduktan sonra, ArrayMaximum ve ArrayMinimum fonksiyonlarını kullanarak son on AD değerinin maksimum ve minimum değerlerini tanımlıyoruz: ArrayMaximum en büyük elemanı arar ve bulunan elemanın indeksini geri döndürür. Parametreleri şunlardır: sayısal dizi, başlangıç indeksi ve aranacak eleman sayısı. ArrayMinimum da benzer görevi yapar, ancak o en küçük elemanı arar.
int ADMax =ArrayMaximum(ADArray,1,10);
int ADMin =ArrayMinimum(ADArray,1,10);
  • ADMaxValue ve ADMinValue için int türü değişkenler oluşturduktan sonra onları hesaplıyoruz:
int ADMaxValue=ADArray[ADMax];
int ADMinValue=ADArray[ADMin];
  • Stratejiye göre koşulları ayarlıyoruz ve grafik üzerinde yorumları görüntülüyoruz:
    • AD güçlü:
if(ADCurrrentValue>ADMaxValue)
{
 Comment("AD Current value is strong","\n","AD current value is: ,",ADCurrrentValue,
 "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
}
    • AD zayıf:
if(ADCurrrentValue<ADMinValue)
{
 Comment("AD Current value is weak","\n","AD current value is: ,",ADCurrrentValue,
 "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
}

Derledikten sonra, programın dosyasını Kılavuz penceresinden bulabiliriz:

Kılavuz - Simple AD strength

 

Dosyayı grafik üzerine sürükleyip bıraktıktan sonra, aşağıdaki pencere görünecektir:

Simple AD strength penceresi

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

Grafiğe eklenmiş Simple AD strength

Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları görüntüleyecektir:

AD güçlü:

Simple AD strength - AD güçlü

AD zayıf:

Simple AD strength - AD zayıf

  • Üçüncü strateji: AD - Yükseliş trendi

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

//+------------------------------------------------------------------+
//|                                          Simple AD - uptrend.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()
  {
   //Create two arrays for AD and price
   double ADArray[];
   MqlRates PriceArray[];
   
   //sorting the two arrays
   ArraySetAsSeries(ADArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   //calculating current and previous highs
   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);         
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); 
   
   //Comparing two values and giving signal
   //Strong Up move
   if(ADCurrrentValue > ADPrevValue && CurrentHighValue>PrevHighValue)
   {
      Comment("Strong Up Move During The Uptrend","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current high value is: ",CurrentHighValue,
      "\n","Previous high value is: ",PrevHighValue);    
   }   
   
   //in case of divergence
   if(ADCurrrentValue < ADPrevValue && CurrentHighValue>PrevHighValue)
   {
      Comment("Bearish Divergence","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentHighValue,
      "\n","Previous low value is: ",PrevHighValue);      
   }   
  }
//+------------------------------------------------------------------+

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

  • İki dizi oluşturuyoruz: biri double fonksiyonunu kullanarak AD değerleri için ve diğeri de fiyatlar hakkında bilgi depolayan MqlRates fonksiyonunu kullanarak fiyatlar için.
double ADArray[];
MqlRates PriceArray[];
  • Dizileri sıralıyoruz: ArraySetAsSeries fonksiyonunu kullanarak AD değerleri için ve (Data için int türü değişken oluşturduktan sonra) CopyRates fonksiyonunu kullanarak fiyatlar için.
ArraySetAsSeries(ADArray,true);
int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
  • AD'yi tanımlıyoruz ve onunla ADArray dizisini dolduruyoruz:
int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);

CopyBuffer(ADDef,0,0,3,ADArray);
  • Mevcut AD, önceki AD, mevcut yüksek ve önceki yüksek değerlerini hesaplıyoruz:
int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
int ADPrevValue=NormalizeDouble(ADArray[1],5);

double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);         
double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); 
  • Stratejiye göre koşulları ayarlıyoruz ve grafik üzerinde yorumları görüntülüyoruz:
    • Yükseliş trendi sırasında fiyat hareketi güçlü:
if(ADCurrrentValue > ADPrevValue && CurrentHighValue>PrevHighValue)
{
 Comment("Strong Up Move During The Uptrend","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current high value is: ",CurrentHighValue,
 "\n","Previous high value is: ",PrevHighValue);    
} 
    • Ayı türü diverjans:
if(ADCurrrentValue < ADPrevValue && CurrentHighValue>PrevHighValue)
{
 Comment("Bearish Divergence","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentHighValue,
 "\n","Previous low value is: ",PrevHighValue);      
} 

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

Kılavuz - Simple AD - uptrend

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

Simple AD - uptrend penceresi

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

Grafiğe eklenmiş Simple AD - uptrend

Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları görüntüleyecektir:

Yükseliş trendi sırasında fiyat hareketi güçlü,

Mevcut veriler:

Simple AD - uptrend - Yükseliş trendi sırasında fiyat hareketi güçlü - Mevcut veriler

Önceki veriler:

Simple AD - uptrend - Yükseliş trendi sırasında fiyat hareketi güçlü - Önceki veriler

Ayı türü diverjans,

Mevcut veriler:

Simple AD - uptrend - Ayı türü diverjans - Mevcut veriler

Önceki veriler:

Simple AD - uptrend - Ayı türü diverjans - Önceki veriler

  • Üçüncü strateji: AD - Düşüş trendi

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

//+------------------------------------------------------------------+
//|                                        Simple AD - downtrend.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //creating a string variable for signal
   string signal="";
   
   //Create two arrays for AD and price
   double ADArray[];
   MqlRates PriceArray[];
   
   //sorting the two arrays
   ArraySetAsSeries(ADArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5);         
   double PrevLowValue=NormalizeDouble(PriceArray[1].low,5); 
   
   //Comparing two values and giving signal
   //Strong down move
   if(ADCurrrentValue < ADPrevValue && CurrentLowValue<PrevLowValue)
   {
      Comment("Strong Down Move During The Downtrend","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentLowValue,
      "\n","Previous low value is: ",PrevLowValue);      
   }
   
   //in case of divergence
   if(ADCurrrentValue > ADPrevValue && CurrentLowValue<PrevLowValue)
   {
      Comment("Bullish Divergence","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentLowValue,
      "\n","Previous low value is: ",PrevLowValue);      
   }  
  }
//+------------------------------------------------------------------+

Bu koddaki farklılıklar aynıdır:

  • Stratejiye göre koşulları ayarlıyoruz ve grafik üzerinde yorumları görüntülüyoruz:
    • Düşüş trendi sırasında fiyat hareketi güçlü:
if(ADCurrrentValue < ADPrevValue && CurrentLowValue<PrevLowValue)
{
 Comment("Strong Down Move During The Downtrend","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentLowValue,
 "\n","Previous low value is: ",PrevLowValue);      
}
    • Boğa türü diverjans:
if(ADCurrrentValue > ADPrevValue && CurrentLowValue<PrevLowValue)
{
 Comment("Bullish Divergence","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentLowValue,
 "\n","Previous low value is: ",PrevLowValue);      
} 

Derledikten sonra, programın dosyasını Kılavuz penceresinden bulabiliriz:

Kılavuz - Simple AD - downtrend

Dosyayı grafik üzerine sürükleyip bıraktıktan sonra, aşağıdaki pencere görünecektir:

Simple AD - downtrend penceresi

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

Grafiğe eklenmiş Simple AD - downtrend

Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları görüntüleyecektir:

Düşüş trendi sırasında fiyat hareketi güçlü,

Mevcut veriler:

Simple AD - downtrend - Düşüş trendi sırasında fiyat hareketi güçlü - Mevcut veriler

Önceki veriler:

Simple AD - downtrend - Düşüş trendi sırasında fiyat hareketi güçlü - Önceki veriler

Boğa türü diverjans,

Mevcut veriler:

Simple AD - downtrend - Boğa türü diverjans - Mevcut veriler

Önceki veriler:

Simple AD - downtrend - Boğa türü diverjans - Önceki veriler


Sonuç

Bu makalede, hacme dayalı göstergelerden biri olan Accumulation/Distribution (AD) göstergesini inceledik. İlk olarak, AD göstergesinin ne olduğu, neyi ölçtüğü ve manuel olarak nasıl hesaplandığı hakkında konuştuk. Sonrasında, basit stratejilerle onu nasıl kullanabileceğimizi gördük. Ardından, ele aldığımız stratejiler için ticaret sisteminin kodunu yazarken bize yardımcı olması adına bir plan hazırladık. Son olarak da her strateji için MQL5'te bir Uzman Danışman oluşturduk, onları MetaTrader 5 işlem platformunda çalıştırdık ve oluşturdukları sinyallerin örneklerini gördük. Terminal, sinyaller elde edebilmemiz için stratejileri otomatikleştirmemize olanak tanır. Bu harika bir özelliktir çünkü bilgisayar bizim için ticaret yapar ya da hiç olmazsa zararlı olabilecek duygulardan kaçınmamıza ve ticaret kararlarımızı iyileştirmemize yardımcı olacak net, doğru ve hızlı bilgiler sunar.

Ticaret tarzınıza ve anlayışınıza uygun olduklarından emin olmak için bir gerçek hesap üzerinde uygulamadan önce öğrendiğiniz tüm yeni bilgileri kapsamlı bir şekilde test ettiğinizden emin olmalısız. Çünkü başkaları için işe yarayan bir şey, sizin için mutlaka işe yaramayabilir. Veya en azından daha iyi sonuçlar almak için optimizasyona ihtiyaç duyduklarını fark edebilirsiniz. Bu makalenin ve bu serideki diğer makalelerin temel amacı, en popüler teknik göstergeler için MQL5’i kullanarak basit stratejilerin nasıl kodlanacağını öğrenmektir. Edindiğiniz bilgileri kendi başınıza uygulamanızı tavsiye ederim çünkü pratik yapmak ve tekrar etmek öğrenme sürecindeki en önemli faktördür.

Umarım makale sizin için faydalı olur ve ticaret hedeflerinize ulaşmanıza yardım sağlar. Bu makaleyi beğendiyseniz ve buna benzer makaleler okumak istiyorsanız, popüler teknik göstergelere dayalı ticaret sistemlerinin nasıl geliştirileceğini öğrenme konulu bu serideki diğer makaleleri de okuyabilirsiniz. Bir sonraki makale de görüşünceye kadar hoşça kalın.

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

MQL5'te matrisler ve vektörlerle çalışma MQL5'te matrisler ve vektörlerle çalışma
Matematik problemlerinin verimli bir şekilde çözülebilmesi adına MQL5’e matrisler ve vektörler eklendi. Yeni türler, matematiksel gösterime yakın, öz ve anlaşılır kodlar yazmak için yerleşik metotlar sağlar. Diziler iyidir, ancak matrisler çok daha iyidir çünkü matrislerin çok daha verimli olduğu birçok durum vardır.
OBV göstergesine dayalı bir ticaret sistemi nasıl geliştirilir? OBV göstergesine dayalı bir ticaret sistemi nasıl geliştirilir?
Bu, en popüler göstergelere dayalı ticaret sistemleri geliştirdiğimiz serimizin yeni makalesidir. Bu sefer On Balance Volume (OBV) göstergesini inceleyeceğiz - onu nasıl kullanabileceğimizi ve ona dayalı bir ticaret sistemini nasıl tasarlayabileceğimizi öğreneceğiz.
Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 12): Zaman ve ticaret (I) Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 12): Zaman ve ticaret (I)
Bugün emir akışını hızlı bir şekilde yorumlayabilmek amacıyla zaman ve ticaret sistemi oluşturacağız. Bu makalede sistemi inşa edeceğiz. Bir sonraki makalede ise eksik olan bilgileri yerine koyarak sistemi tamamlayacağız.
Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 11): Çapraz emir sistemi Sıfırdan bir ticaret Uzman Danışmanı geliştirme (Bölüm 11): Çapraz emir sistemi
Bu makalede çapraz emir sistemi oluşturacağız. Yatırımcıların hayatını çok zorlaştıran bir varlık türü vardır - vadeliler. Peki neden hayatı zorlaştırıyorlar?