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

Mohamed Abdelmaaboud | 5 Eylül, 2022

Giriş

Bu makalede de, teknik ticaret için başka bir araç hakkında konuşacağız. Bu araç, piyasa hareketlerini daha iyi anlamamıza ve daha verimli ticaret yapmamıza olanak sağlayan en kullanışlı araçlardan biridir. Genel olarak, teknik göstergelerin en önemli özelliklerinden biri, hesaplanma şekilleri nedeniyle fiyatların kendisinde görünmeyen şeyleri bize gösterebilmeleridir. Bu makalede inceleyeceğimiz Average Directional Index (ADX) göstergesi de böyle bir göstergedir. Ticarette nasıl yararlı olabileceğini anlamak adına bu göstergeyi ayrıntılı olarak ele alacağız. Ayrıca basit stratejilerle nasıl kullanılacağını öğreneceğiz. Çünkü bir şeyi derinlemesine öğrenerek, onun hakkında daha fazla içgörü elde edebilir ve onu daha iyi kullanabiliriz.

Bu amaçla şu konuları değerlendireceğiz:

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

“ADX göstergesinin tanımı” başlığı altında, Average Directional Index (ADX) göstergesinin ne olduğunu ve neyi ölçtüğünü ve onu derinlemesine anlayabilmek ve kârlı bir şekilde kullanabilmek adına manuel olarak nasıl hesaplandığını detaylı olarak tartışacağız. Devamında, “ADX göstergesi stratejileri” bölümünde, ADX göstergesiyle ticarette kullanılabilecek bazı basit stratejileri ele alacağız. Sonrasında, “ADX göstergesine dayalı ticaret sisteminin planı” adlı bölümde ise, ele aldığımız bu stratejileri bir ticaret sistemi haline getirmek amacıyla onları programlarken bize yardımcı olacak bir plan hazırlayacağız. Son olarak, “ADX göstergesine dayalı ticaret sistemi” bölümünde de, hazırladığımız bu plan çerçevesinde bir ticaret sisteminin nasıl yazılacağını öğreneceğiz.

Tüm bu konularda, MetaTrader 5 işlem platformunu ve MetaTrader 5’te yerleşik olan MetaQuotes Language Düzenleyicisini kullanacağız. MetaTrader 5'i şu linkten indirebilirsiniz: https://www.metatrader5.com/en/download

MetaTrader 5'i indirip kurduktan sonra aşağıdaki terminal penceresini göreceksiniz:

MT5 

Becerilerinizi hızla geliştirmesi ve konuyu derinlemesine anlamanızı sağlaması amacıyla bu makaledeki her şeyi kendiniz uygulamanızı tavsiye ederim. Pratik yapmak, her konuda gelişmek için en önemli anahtardır. Bu nedenle, her konsepti kendiniz uygulamaya çalışmanız ve test etmeniz sizin için çok daha iyi olacaktır. Oluşturulacak programları üzerinde test etmek için bir demo hesabınızın olması da önemlidir. Henüz böyle bir hesabınız yoksa, doğrudan MetaTrader 5 platformundan bir demo hesabı açabilirsiniz: MetaTrader 5 terminali --> Dosya sekmesi --> Hesap Aç --> demo hesabını onun aracılığıyla açmak için brokerınızın adını girebilir veya MetaQuotes'u seçebilirsiniz --> İleri --> Risksiz şekilde sanal parayla ticaret yapmak için bir demo hesabı aç --> İleri --> bilgilerinizi girin, hesap gereksinimlerini belirleyin ve pencerenin aşağısındaki kutucuğu onaylayın --> İleri --> böylece, sizin için bir demo hesabı açılacak ve bilgilerini göreceksiniz --> Tamam.

Artık bu hesabı sanal parayla ticaret yapmak için kullanabilirsiniz. Hesaba giriş yapmak adına, terminalden Dosya sekmesini açın --> İşlem Hesabına Giriş Yap --> demo hesabınızın bilgilerini girin --> Tamama tıklayın.

Sorumluluk reddi: Sağlanan tüm bilgiler 'olduğu gibi' yalnızca bilgilendirme amaçlıdır, ticaret tavsiyesi değildir. Bu materyalleri herhangi bir işlem hesabında kullanırsanız, ortaya çıkabilecek tüm riskler size ait olacaktır.

Şimdi, ticaret sonuçlarımızda olumlu şekilde fark yaratabilecek yeni bir aracı öğrenmeye başlayalım.


ADX göstergesinin tanımı

Bu bölümde, teknik ticaret dünyasındaki en popüler göstergelerden biri hakkında ayrıntılı olarak konuşacağız. Ne olduğunu, neyi ölçtüğünü ve nasıl hesaplandığını göreceğiz. Tüm bunlar, ADX göstergesine dayalı stratejileri ve onlarla nasıl ticaret yapılabileceğini daha iyi anlamamıza olanak sağlayacaktır. Average Directional Index (ADX) göstergesi Welles Wilder tarafından geliştirilmiştir. Gösterge, trendi ölçer ve bir trendin varlığının veya yokluğunun onayını sağlar. Hesaplanma mantığına bakarsak, gösterge bir periyodun işlem aralığını bir önceki periyodun işlem aralığıyla karşılaştırır.

Bu karşılaştırmanın sonucu olarak, şunları elde ederiz:

Sadece pozitif yönlü hareket varsa, bu, periyodun yüksek değerinin bir önceki periyodun yüksek değerini aştığı anlamına gelir ve sadece +DM var olarak ifade edilir.

Aşağıdaki görüntü, bu fiyat hareketinin grafikte nasıl görünebileceğini göstermektedir:

Sadece +DM var

Tersi durumda ise, sadece negatif yönlü hareket varsa, bu, periyodun düşük değerinin bir önceki periyodun düşük değerini aştığı anlamına gelir ve sadece -DM var olarak ifade edilir.

Aşağıdaki görüntü, bu fiyat hareketinin grafikte nasıl görünebileceğini göstermektedir:

Sadece -DM var

Hem pozitif yönlü hem de negatif yönlü hareket yoksa, bu, periyodun yüksek ve düşük değerlerinin bir önceki periyodun yüksek ve düşük değerlerini aşmadığı anlamına gelir ve hem +DM, hem de -DM yok olarak ifade edilir.

Aşağıdaki görüntü, bu fiyat hareketinin grafikte nasıl görünebileceğini göstermektedir:

Hem +DM, hem de -DM yok

Hem pozitif yönlü hem de negatif yönlü hareket varsa, bu, periyodun yüksek ve düşük değerlerinin bir önceki periyodun yüksek ve düşük değerlerini aştığı anlamına gelir ve hem +DM, hem de -DM var olarak ifade edilir.

Aşağıdaki görüntü, bu fiyat hareketinin grafikte nasıl görünebileceğini göstermektedir: 

Hem +DM, hem de -DM var

Şimdi göstergenin nasıl hesaplandığına bakalım. Tüm değerlerin mutlak olması gerektiğini unutmayın. Hesaplama (ADX) adımları aşağıda verilmiştir:

1- +DM ve -DM'i hesapla:

Bu adımda, periyodun bir önceki periyoda göre yukarı veya aşağı yönlü hareket yapıp yapmadığını belirlememiz gerekiyor. Yani, iki şeyi hesaplayacağız:

Şu şekilde hesaplanır: +DM = mevcut yüksek - önceki yüksek
Şu şekilde hesaplanır: -DM = mevcut düşük - önceki düşük

Böylece, hesaplanacak her periyodu kontrol edeceğiz ve sadece +DM, sadece -DM veya diğer durumların olup olmadığına karar vereceğiz.

+DM=n
-DM=0

+DM=0

-DM=n

Bazı durumlarda, hem +DM, hem de -DM mevcut olmayabilir veya hem +DM hem de -DM mevcut olabilir. Bu gibi durumlara aşağıdaki şekillerde müdahale ederiz:

+DM=0

-DM=0

DM yok

+DM>-DM ise +DM değeri dikkate alınır:

 +DM>-DM

+DM<-DM ise -DM değeri dikkate alınır:

 +DM<-DM

+DM=-DM ise ikisi de yok sayılır ve 0 değeri dikkate alınır:

+DM=-DM

2- Gerçek aralığı (True Range, TR) hesapla:

DM'i hesapladıktan sonra, bu adımda, hesaplanan her periyodun TR değerini hesaplayacağız. Bu değer aşağıdakilerin en büyük olanı olacaktır:

3- Hesaplanan ilk 14 periyodun değerlerinin (+DM, -DM ve TR) toplamlarını hesapla:

İlk 14 periyot için +DM,-DM ve TR toplamlarını hesapladıktan sonra, 14'ten sonraki günümüze olan periyotlar için her 14 periyotluk toplamları hesaplamak adına aşağıdaki formülleri kullanacağız (her 14 periyotluk toplamlar: +DM14, -DM14 ve TR14 olarak ifade edilecek):

15’inci periyot ve devamındakiler için her +DM14 toplamı = (önceki +DM14 - ((önceki +DM14)/14)) + mevcut +DM

15’inci periyot ve devamındakiler için her -DM14 toplamı = (önceki -DM14 - ((önceki -DM14)/14)) + mevcut -DM

15’inci periyot ve devamındakiler için her TR14 toplamı = (önceki TR14 - (önceki TR14)/14)) + mevcut TR

4- 14’üncü periyot ve devamındakiler için +DI ve -DI’ları hesapla (+DI ve -DI’ları hesaplayabilmek için 14’üncü periyottan başlıyoruz, çünkü +DI ve -DI’ları hesaplayabilmemiz adına +DM14, -DM14 ve TR14’ler gereklidir):
+DI = 100*(+DM14/TR14)
-DI = 100*(-DM14/TR14)

5- +DI ve -DI’ların farklarını hesapla:

DI farkı = (+DI) - (-DI)

6- +DI ve -DI’ların toplamlarını hesapla:

DI toplamı = (+DI) + (-DI)

7- DX’leri hesapla:

DX = 100*((DI farkı)/(DI toplamı))
8- ADX'i hesapla (ADX’in hesaplanabilmesi adına 14 periyot boyunca DX’ler gereklidir):
ADX = 14 DX’in ortalaması

Bunlar ADX göstergesinin hesaplama adımlarıydı. Şimdi örnek olarak belirli bir veri kümesini kullanarak ADX göstergesinin nasıl hesaplanacağını görelim. Varsayalım ki aşağıdaki verilere sahibiz:

Gün Yüksek Düşük Kapanış
1 110 90 100
2 140 120 130
3 160 120 140
4 150 110 130
5 140 100 130
6 150 130 140
7 170 150 160
8 180 160 170
9 170 150 155
10 170 130 140
11 180 155 160
12 190 175 180
13 220 190 190
14 230 200 200
15 215 205 210
16 200 190 200
17 195 180 190
18 195 180 185
19 210 185 195
20 220 190 200
21 233 195 208
22 246 200 216
23 258 205 223
24 271 210 231
25 283 215 238
26 296 220 246
27 308 225 253
28 321 230 261
29 333 235 268
30 346 240 276

Hadi bu verileri kullanarak ADX'i hesaplayalım:

1- +DM ve -DM'i hesapla:

+DM = mevcut yüksek - önceki yüksek

-DM = mevcut düşük - önceki düşük

Örnek - DM

2- TR'ı hesapla:

Aşağıdakilerden en büyüğü TR olacaktır:

Aşağıdaki tablo her gün için hesaplanan TR'ı göstermektedir:

Örnek - TR

3- Hesaplanan ilk 14 periyodun değerlerinin (+DM, -DM ve TR) toplamını hesapla:

+DM14 = +DM’lerin toplamı (2. günden 15. güne kadar)

-DM14 = -DM’lerin toplamı (2. günden 15. güne kadar)

TR14 = TR’ların toplamı (2. günden 15. güne kadar)

Örnek - +DM14, -DM14, TR14

4- +DI ve -DI’ları hesapla (+DI ve -DI’ları hesaplayabilmek için +DM14, -DM14 ve TR14’ler gerektiğinden onları hesaplayabilmemiz adına tabloda 15. günden başlıyoruz):

+DI = 100*(+DM14/TR14)

-DI = 100*(-DM14/TR14)


5- +DI ve -DI’ların farklarını hesapla:

DI farkı = (+DI) - (-DI)

6- +DI ve -DI’ların toplamlarını hesapla:

DI toplamı = (+DI) + (-DI)

DI farkları ve toplamları

7- DX’leri hesapla:

DX = 100*((DI farkı)/(DI toplamı))


DX

8- ADX'i hesapla (ADX'i hesaplamak adına 14 DX’e ihtiyacımız olduğu için ADX’in ilk hesaplaması 28. gün olacaktır):

ADX = 14 DX’in ortalaması (15. günden 28. güne kadar)


ADX

ADX göstergesini manuel olarak hesapladık. Ancak, gösterge MetaTrader 5'te yerleşik olduğundan, bu hesaplamaları yapmamız gerekmez. Sadece ADX göstergesini ve nasıl çalıştığını daha iyi anlamak için tüm bu adımları inceledik. Gösterge değerlerini grafikte görmek için, tek yapmamız gereken işlem terminalindeki göstergeler listesinden ADX göstergesini seçmektir (Ekle sekmesi --> Göstergeler --> Trend --> Average Directional Movement Index). Bunu nasıl yapabileceğinizi göstermek adına:

ADX göstergesini ekleme

Average Directional Movement Index’i seçtikten sonra aşağıdaki pencere açılacaktır:

ADX göstergesi parametreleri

Bu pencere ADX göstergelerinin parametreleri içindir. Yukarıda İşaret edilenler şu anlamlara gelir:
  1. ADX’in periyodu
  2. ADX çizgisinin rengi
  3. ADX çizgisinin türü
  4. ADX çizgisinin kalınlığı
  5. +DI çizgisinin rengi
  6. +DI çizgisinin türü
  7. +DI çizgisinin kalınlığı
  8. -DI çizgisinin rengi
  9. -DI çizgisinin türü
  10. -DI çizgisinin kalınlığı

Gösterge parametrelerini belirleyin ve Tamama tıklayın. Gösterge grafikte şu şekilde görüntülenecektir:

Grafikte ADX göstergesi

ADX göstergesi stratejileri

Bu bölümde ADX göstergesiyle kullanılabilecek basit stratejileri ele alacağız. Şunu belirtmek isterim ki burada ADX göstergesi için sadece bazı basit stratejileri konu alıyoruz. Bu gösterge için çok basitten çok karmaşığa kadar birçok strateji mevcuttur. Ancak, bu makalede göstergenin ana fikrini anlamak ve ona dayalı bir ticaret sisteminin nasıl geliştirileceğini öğrenmek için bu basit stratejilerle çalışacağız.

ADX göstergesi, hesaplanma mantığına göre, trendin tipinden (yükseliş veya düşüş) bağımsız olarak bir trendin mevcut olup olmadığını gösterir. ADX eğrisi yukarı doğru hareket ediyorsa bir trend var demektir ve tersi şekilde ADX eğrisi aşağı doğru hareket ediyorsa bir trend yok demektir. Ama her şeyden önce, trendi tanımlamamız gerekiyor:

Trendin tanımı:

Piyasada fiyat hareketleri çok önemlidir, çünkü trendin tipini belirlemenize olanak sağlar. Önceki makalelerde de bahsettiğimiz üzere, üç tür piyasa yönü vardır (yükseliş trendi, düşüş trendi ve yatay hareket).

Yükseliş trendi: Yükseliş trendi, fiyatların daha yüksek pikler ve daha yüksek çukurlar oluşturduğu ve piyasanın alıcıların kontrolünde olduğu piyasa yönüdür.

Bu piyasa yönünün oluşumu aşağıdaki görüntüde gösterilmektedir:

Yükseliş trendi oluşumu

Aşağıdaki görüntü de yükseliş trendi için piyasadan bir örneği göstermektedir:

Yükseliş trendi örneği

Düşüş trendi: Düşüş trendi, fiyatların daha düşük dipler ve daha düşük çukurlar oluşturduğu ve piyasanın satıcıların kontrolünde olduğu piyasa yönüdür.

Bu piyasa yönünün oluşumu aşağıdaki görüntüde gösterilmektedir:

Düşüş trendi oluşumu

Aşağıdaki görüntü de düşüş trendi için piyasadan bir örneği göstermektedir:

Düşüş trendi örneği

Yatay hareket: Net bir yönün olmadığı, alıcılar ve satıcılar arasında dengenin olduğu yükseliş veya düşüş trendi dışındaki herhangi bir fiyat hareketidir.

Aşağıdakiler bu piyasa yönünün bazı oluşumlarıdır:

Yatay hareket oluşumu

Yatay hareket oluşumu

Yatay hareket oluşumu

Yatay hareket oluşumu

Aşağıdaki görüntü de yatay hareket için piyasadan bir örneği göstermektedir:

Yatay hareket örneği

Trendi tanımladık, şimdi ise ADX göstergesiyle kullanılabilecek basit stratejilere devam edelim.

Strateji, ADX eğrisinin hareketine dayanmaktadır,

Mevcut ADX değeri > Önceki ADX değeri = ADX yükseliyor.

Mevcut ADX değeri < Önceki ADX değeri = ADX düşüyor.

Bu stratejiye göre, yükseliş trendi sırasında,

(Mevcut ADX değeri > 25) ve (Mevcut ADX değeri > Önceki ADX değeri) ise (+DI değeri > -DI değeri) olduğunda = Alış.

Bu stratejiye göre, düşüş trendi sırasında,

(Mevcut ADX değeri > 25) ve (Mevcut ADX değeri > Önceki ADX değeri) ise (+DI değeri < -DI değeri) olduğunda = Satış.


ADX göstergesine dayalı ticaret sisteminin planı

Bu bölümde, ticaret sistemini oluşturmamıza yardımcı olacak bir plan tasarlayacağız. Bu plan, gelecekteki programdan ne istediğimizi, ne yapması gerektiğini adım adım net bir şekilde tanımlayacak ve böylece bize kolaylık sağlayacaktır.

Bu stratejiye göre, program her tikte mevcut ve önceki ADX değerini kontrol etmelidir. Mevcut ADX değerinin önceki ADX değerinden büyük olup olmadığını belirlemelidir. Eğer mevcut ADX değeri önceki ADX değerinden büyükse, program grafik üzerinde şu 3 satırı yorum olarak göstermelidir: en üst satırda "ADX is rising", bir alt satırda "ADX Value is (n)" ve en alt satırda da "ADX Value last is (n)". Eğer mevcut ADX değeri önceki ADX değerinden küçükse, program grafik üzerinde bu kez şu 3 satırı yorum olarak göstermelidir: en üst satırda "ADX is falling", bir alt satırda "ADX Value is (n)" ve en alt satırda da "ADX Value last is (n)". Eğer mevcut ADX değeri önceki ADX değerine eşitse, program hiçbir şey yapmamalıdır.

Aşağıdaki görüntü bu stratejinin planını göstermektedir:

ADX hareketi planı

Bu stratejiye göre, program her tikte mevcut ADX değerini, önceki ADX değerini, +DI değerini ve -DI değerini kontrol etmelidir. Ardından, mevcut ADX değerinin 25’ten ve önceki ADX değerinden büyük olup olmadığını belirlemelidir. Bu iki değerden de büyük değilse program hiçbir şey yapmamalıdır. Eğer mevcut ADX değeri her iki değerden de büyükse, program +DI ve -DI değerlerini kontrol etmelidir: +DI, -DI'dan büyük olduğunda, program grafikte alış sinyaline ek olarak toplam 5 satır halinde şu yorumları göstermelidir, "ADX Value is (n)", “ADX Value last is (n)”, “+DI Value is (n)” ve “-DI Value is (n)”; eğer +DI, -DI'dan büyük değilse, program hiçbir şey yapmamalıdır.

Aşağıdaki görüntü bu stratejinin planını göstermektedir:

ADX - Alış sinyali planı

Bu stratejiye göre, program her tikte mevcut ADX değerini, önceki ADX değerini, +DI değerini ve -DI değerini kontrol etmelidir. Ardından, mevcut ADX değerinin 25’ten ve bir önceki ADX değerinden büyük olup olmadığını belirlemelidir. Bu iki değerden de büyük değilse program hiçbir şey yapmamalıdır. Eğer mevcut ADX değeri her iki değerden de büyükse, program +DI ve -DI değerlerini kontrol etmelidir: -DI, +DI'dan büyük olduğunda, program grafikte satış sinyaline ek olarak toplam 5 satır halinde şu yorumları göstermelidir, "ADX Value is (n)", “ADX Value last is (n)”, “+DI Value is (n)” ve “-DI Value is (n)”; eğer -DI, +DI'dan büyük değilse, program hiçbir şey yapmamalıdır.

Aşağıdaki görüntü bu stratejinin planını göstermektedir:

ADX - Satış sinyali planı

ADX göstergesine dayalı ticaret sistemi

Bu bölümde, MetaTrader 5 ticaret terminalinde kullanmak adına ele aldığımız basit stratejilere dayalı bir ticaret sisteminin nasıl oluşturulacağını öğreneceğiz. Ticaret sisteminin kodunu yazmak için yerleşik MetaQuotes Language Düzenleyicisini (MQL5) kullanacağız. Düzenleyiciyi açmak için MetaTrader 5 ticaret terminali açıkken F4 tuşuna basabilir veya terminalin Araçlar sekmesinden MetaQuotes Language Düzenleyicisini seçebilirsiniz.

Bunu nasıl yapılabileceği aşağıda gösterilmektedir.

MetaEditor açılışı

Veya araç çubuğundaki IDE düğmesine de basabilirsiniz:

MetaEditor açılışı

Böylece MetaQuotes Language Düzenleyicisi penceresi açılacaktır:

MetaEditor penceresi

Ardından Yeniye tıklayarak ticaret sistemimizi oluşturmak için yeni bir dosya açacağız:

MetaEditor penceresi

Sonrasında şu pencere açılacaktır:

MetaEditor - Yeni dosya

Yeni dosyanın türü için seçenekler şunlardır:

  1. Uzman Danışman: Terminalde çalışan ve ticaret süreçlerini önceden belirlenmiş koşullara göre otomatikleştirmeye olanak sağlayan bir program türüdür.
  2. Özel gösterge: Ticaret kararlarını iyileştirmek için grafiği okumaya yardımcı olan bir program türüdür.
  3. Komut dosyası: Yürütüldükten sonra bir görevi bir kez gerçekleştirebilen bir program türüdür.

Biz ticaret sistemimizi oluşturmak adına Uzman Danışman dosyası oluşturmayı seçeceğiz.

Öncelikle mevcut ADX değerini grafik üzerinde yorum olarak gösterecek bir program oluşturalım. Adım adım nasıl yapılacağını görelim:

double PriceArray[];
Referansa göre array[] ve bayrak.

ArraySetAsSeries(PriceArray,true);

Dizge olarak sembol, zaman dilimi ve ADX periyodu:
int ADXDef = iADX(_Symbol,_Period,14);
Gösterge tanıtıcı değeri, buffer_num (gösterge arabelleği numarası), start_time (başlangıç tarihi ve saati), stop_time (bitiş tarihi ve saati) ve buffer[] (hedef dizi).
CopyBuffer(ADXDef,0,0,3,PriceArray);
double olarak değer (normalleştirilmiş sayı) ve int olarak rakam (ondalık basamak sayısı).
double ADXValue=NormalizeDouble(PriceArray[0],2);
Değerleri temsil eden değişkenleri virgülle ayırarak giriyoruz. Bilgileri yeni satırda görüntülemek için de \n satır sonu karakterini kullanacağız. 
Comment("ADX Value is ", ADXValue);

Bu programın tam kodu aşağıda gösterilmektedir:

//+------------------------------------------------------------------+
//|                                            Simple ADX 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()
  {
//creating an array for prices
   double PriceArray[];

//sort price array from current data
   ArraySetAsSeries(PriceArray,true);

//identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);

//Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,PriceArray);

//Getting value of current data
   double ADXValue=NormalizeDouble(PriceArray[0],2);

//Comment with ADX value
   Comment("ADX Value is ", ADXValue);
  }
//+------------------------------------------------------------------+

Programı editörde derledikten sonra program işlem terminalinin Kılavuz penceresinde görünecektir:

Kılavuz - Simple ADX System

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

Simple ADX System penceresi

"Algoritmik ticarete izin ver" seçeneğini etkinleştirip Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

Grafiğe eklenmiş Simple ADX System

Böylece, gösterge mevcut ADX değerini grafik üzerinde yorum olarak gösterecektir:

Grafikte ADX göstergesinin mevcut ADX değeri

Mevcut ADX değerini görüntüleyen bir program oluşturduk. Şimdi ise ADX göstergesinin diğer değerlerini (+DI ve -DI) gösterecek bir program oluşturalım. Böylece, ticaret sistemimizi oluşturma yolunda ilerlemiş olacağız. Nasıl yazılacağını görelim:

double ADXArray[];
double PDIArray[];
double NDIArray[];
ArraySetAsSeries(ADXArray,true);
ArraySetAsSeries(PDIArray,true);
ArraySetAsSeries(NDIArray,true);

int ADXDef = iADX(_Symbol,_Period,14);
CopyBuffer(ADXDef,0,0,3,ADXArray);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);
double ADXValue=NormalizeDouble(ADXArray[0],2);
double PDIValue=NormalizeDouble(PDIArray[0],2);
double NDIValue=NormalizeDouble(NDIArray[0],2);
Comment("ADX Value is ", ADXValue,"\n""+DI Value is ", 
PDIValue,"\n""-DI Value is ", NDIValue);

Bu Uzman Danışmanın tam kodu aşağıdadır:

//+------------------------------------------------------------------+
//|                                  Simple ADX System - 3 lines.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 an array for prices
   double ADXArray[];
   double PDIArray[];
   double NDIArray[];
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);

   //identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray[0],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with ADX value
   Comment("ADX Value is ", ADXValue,"\n""+DI Value is ", 
   PDIValue,"\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

Programı yazdıktan sonra dosyasını Kılavuz penceresinden bulabiliriz:

Kılavuz - Simple ADX System - 3 lines

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

Simple ADX System - 3 lines penceresi

"Algoritmik ticarete izin ver" seçeneğini etkinleştirip Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

Grafiğe eklenmiş Simple ADX System - 3 lines

Böylece, gösterge mevcut ADX, +DI ve -DI değerlerini grafik üzerinde yorum olarak gösterecektir:

Grafikte ADX göstergesinin mevcut değerleri

Şimdi ele aldığımız stratejiler (ADX hareketi, yükseliş ve düşüş trendi) için ticaret sistemimizi oluşturacağız.

Mevcut ADX değeri > Önceki ADX değeri = ADX yükseliyor.

Mevcut ADX değeri < Önceki ADX değeri = ADX düşüyor.

Bunu yapabilen programın kodunu aşağıdaki şekilde yazarız:

double ADXArray0[];
double ADXArray1[];

ArraySetAsSeries(ADXArray0,true);
ArraySetAsSeries(ADXArray1,true);

int ADXDef = iADX(_Symbol,_Period,14);
CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
double ADXValue=NormalizeDouble(ADXArray0[0],2);
double ADXValuelast=NormalizeDouble(ADXArray1[1],2);
if (ADXValue>ADXValuelast)
      {
       Comment("ADX is rising","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
   
if (ADXValue<ADXValuelast)
     {
      Comment("ADX is falling","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }

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

//+------------------------------------------------------------------+
//|                             Simple ADX System - ADX 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()
  {
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];

   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
      
   //identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValuelast=NormalizeDouble(ADXArray1[1],2);
   
   //ADX movement signal
   if (ADXValue>ADXValuelast)
      {
         Comment("ADX is rising","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
   
   if (ADXValue<ADXValuelast)
     {
         Comment("ADX is falling","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
  }
//+------------------------------------------------------------------+

Uzman Danışmanı oluşturduktan sonra onu Kılavuz penceresinden bulabiliriz:

Kılavuz - Simple ADX System - ADX 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 ADX System - ADX movement penceresi 

"Algoritmik ticarete izin ver" seçeneğini etkinleştirip Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

Grafiğe eklenmiş Simple ADX System - ADX movement

Devamında program onun için belirlediğimiz koşullara uygun olarak çalışacaktır:

Simple ADX System - ADX movement - ADX yükseliyor 


Simple ADX System - ADX movement - ADX düşüyor

(Mevcut ADX değeri > 25) ve (Mevcut ADX değeri > Önceki ADX değeri) ise (+DI değeri > -DI değeri) olduğunda = Alış.

Aşağıda, bu stratejiyi yürütmek için bir Uzman Danışmanın nasıl oluşturulacağı anlatılmaktadır:

string signal="";
double ADXArray0[];
double ADXArray1[];
double PDIArray[];
double NDIArray[];
ArraySetAsSeries(ADXArray0,true);
ArraySetAsSeries(ADXArray1,true);
ArraySetAsSeries(PDIArray,true);
ArraySetAsSeries(NDIArray,true);
int ADXDef = iADX(_Symbol,_Period,14);
CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);
double ADXValue=NormalizeDouble(ADXArray0[0],2);
double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
double PDIValue=NormalizeDouble(PDIArray[0],2);
double NDIValue=NormalizeDouble(NDIArray[0],2);
if (ADXValue>25&&ADXValue>ADXValueLast)
   if(PDIValue>NDIValue)
   {
    signal = "BUY";
   }
Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
"\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
"\n""-DI Value is ", NDIValue);

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

//+------------------------------------------------------------------+
//|                     Simple ADX System - Uptrend - Buy Signal.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 variable for signal
   string signal="";
   
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];
   double PDIArray[];
   double NDIArray[];
   
   //identify ADX, positive DI, negative DI
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with Buy signal according to Buy Strategy
    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue>NDIValue)
      {
         signal = "BUY";
      }
      
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

Uzman Danışmanı oluşturduktan sonra onu Kılavuz penceresinden bulabiliriz:

Kılavuz - Simple ADX System - Uptrend - Buy Signal

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

Simple ADX System - Uptrend - Buy Signal penceresi

"Algoritmik ticarete izin ver" seçeneğini etkinleştirip Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

Grafiğe eklenmiş Simple ADX System - Uptrend - Buy Signal

Sonrasında, stratejiye göre uygun olarak sinyali ve mevcut gösterge değerlerini grafik üzerinde görebiliriz:

Aşağıdaki görüntü, oluşturduğumuz Uzman Danışmandan bir sinyal örneğini göstermektedir:


Simple ADX System - Uptrend - Buy Signal - Alış sinyali ve mevcut gösterge değerleri

(Mevcut ADX değeri > 25) ve (Mevcut ADX değeri > Önceki ADX değeri) ise (+DI değeri < -DI değeri) olduğunda = Satış.

Bu strateji için ticaret sistemi kodu aşağıdaki gibi olacaktır:

//+------------------------------------------------------------------+
//|                Simple ADX System - Downtrend - Sell Strategy.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 variable for signal
   string signal="";
   
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];
   double PDIArray[];
   double NDIArray[];
   
   //identify ADX, positive DI, negative DI
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with Buy signal according to Buy Strategy
    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue<NDIValue)
      {
         signal = "SELL";
      }
      
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

Aşağıdaki farklılıklarla birlikte yükseliş stratejisinin aynı adımlarıdır:

    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue<NDIValue)
      {
         signal = "SELL";
      }
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);

Uzman Danışmanı oluşturduktan sonra onu Kılavuz penceresinden bulabiliriz:

Kılavuz - Simple ADX System - Downtrend - Sell Strategy

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

Simple ADX System - Downtrend - Sell Strategy penceresi 

"Algoritmik ticarete izin ver" seçeneğini etkinleştirip Tamama tıkladıktan sonra, program aşağıdaki gibi grafiğe eklenecektir:

Grafiğe eklenmiş Simple ADX System - Downtrend - Sell Strategy

Sonrasında, stratejiye göre uygun olarak sinyali ve mevcut gösterge değerlerini grafik üzerinde görebiliriz:

Aşağıdaki görüntü, oluşturduğumuz Uzman Danışmandan bir sinyal örneğini göstermektedir:

Simple ADX System - Downtrend - Sell Strategy - Satış sinyali ve mevcut gösterge değerleri

Sonuç

Umarım bu makale sizin için birçok yararlı bilgi sağlamıştır. Bugün en popüler ve kullanışlı göstergelerden biri olan Average Directional Index (ADX) göstergesini inceledik ve onu kullanarak bir ticaret sisteminin nasıl geliştirileceği hakkında ayrıntılı olarak konuştuk. Makalemizde ilk olarak ADX göstergesinin ne olduğundan, neyi ölçtüğünden ve nasıl hesaplandığından bahsettik. Devamında, yükseliş ve düşüş trendi sırasında ADX göstergesine dayalı kullanılabilecek bazı basit stratejileri ele aldık. Ardından, bu stratejiler için bir ticaret sistemi geliştirirken bize yardımcı olması adına, ticaret sisteminin neler yapması gerektiğine dair adım adım ifadeler sunan bir plan hazırladık. Ve son olarak da, bu ADX stratejilerinin kodlarını MQL5 (MetaQuotes Language) ile yazarak onlara dayalı olarak otomatik şekilde çalışacak bir ticaret sisteminin nasıl oluşturulacağını gördük.

ADX göstergesi, ticarette kullanılabilecek basitten karmaşığa birçok farklı stratejiye sahiptir. Ancak biz burada göstergenin temel kavramını anlamak adına sadece bazı basit stratejilerden bahsettik. Buradaki ana amacımız, teknik göstergelere dayalı ticaret stratejilerini incelemek ve MetaTrader 5 işlem platformunda kullanılmak üzere MQL5'te onlara dayalı bir ticaret sistemi geliştirmektir.

Ayrıca şunu belirtmek istiyorum ki, ticarette kullanabilecek birçok farklı faydalı araç ve onların stratejileri vardır. Bu araçlar tek tek kullanılabilir veya daha iyi sonuçları elde etmek amacıyla farklı kombinasyonlar şeklinde birleştirilebilir. Ve işte bu da, teknik analizin en kullanışlı özelliklerinden biridir. Çünkü ticaret kararları verme sürecimizi geliştirebilecek ve daha iyi ticaret sonuçları elde etmemize yardımcı olabilecek farklı konseptlere dayalı birçok araç bulunmaktadır. Bu konuda daha fazla bilgi edinmek için, diğer popüler göstergeleri ve onlarla kullanılabilecek bazı basit stratejileri ele aldığımız ve MetaTrader 5'te kullanılmak üzere bu stratejilere dayalı basit bir ticaret sisteminin nasıl oluşturulacağını incelediğimiz önceki makalelerimi okumanızı tavsiye ederim. Dolayısıyla görevimiz, bu araçları ve konseptleri keşfetmek ve ticaret tarzımız ve planımız için hangilerinin uygun olduğunu bulmaktır. Bir kişi için faydalı olabilen ticaret stratejileri bir başkası için faydalı olmayabilir, çünkü her kişinin ticaretle ilişkili olarak kendi görüşlerine dayanan kendi ticaret planı vardır. Bu nedenle, size kişisel olarak fayda sağlayacaklarından emin olmak adına tüm yeni araçları veya stratejileri gerçek hesaplarda kullanmadan önce test etmelisiniz.

Programlama ise bize bu aşamada birçok açıdan çok faydalı olabilir - ticareti daha kolay, daha sorunsuz ve daha verimli hale getirmeye yardımcı olur. Karlı bir strateji bulduğumuzda, ilgili stratejiye dayalı şartlara göre bilgisayarın bizim için otomatik olarak çalışmasına olanak sağlayan bir ticaret sistemi geliştirebiliriz. Bu, ticaret sürecimizde mevcut olabilecek zararlı duygulardan kaçınmamızı mümkün kılacaktır. Ve nihayetinde programlama, başarılı ticaretin en önemli anahtarlarından biri olan disiplinle ticaret yapmamıza yardımcı olacaktır. Dolayısıyla, programlama ve MQL5 hakkında eğitim almanın çok faydalı olduğunu düşünüyorum çünkü bu hedeflere bu şekilde ulaşabiliriz.

Bu makale umarım gözlerinizi yeni fikirlere açar ve size makalenin konusu veya ticaret sonuçlarınızı iyileştirmenize yardımcı olacak ilgili herhangi bir konu hakkında yeni içgörüler sağlar. Çünkü ticaretimizin ana amacı iyi sonuçlar ve istikrarlı kârlar elde etmektir. Bu makalenin bu değerli hedefe ulaşmada size yardımcı olacağına inanıyorum. Bir sonraki makalede görüşmek üzere.