
Awesome Oscillator 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 makalesindeyiz. Bu makalede yeni bir teknik aracı öğreneceğiz: Awesome Oscillator göstergesi. Makaleye AO göstergesinin ne olduğunu, neyi ölçtüğünü, manuel olarak nasıl hesaplandığını görerek başlayacağız. Böylece, göstergenin arkasındaki ana fikri keşfetmiş olacağız. Sonrasında, bu fikre uygun olarak bazı basit stratejiler üzerinden onu ticaretimizde nasıl kullanabileceğimizden bahsedeceğiz. Ardından, bu stratejileri bir ticaret sistemine dönüştürürken bize yardımcı olması adına adım adım ifadeler içeren bir plan hazırlayacağız. Makalenin son bölümünde de bu stratejilere dayalı olarak hazırladığımız plan çerçevesinde otomatik sinyaller üretecek bir ticaret sistemi oluşturacağız.
Bu göstergeyi aşağıdaki konu başlıklarında ayrıntılı olarak inceleyeceğiz:
- Awesome Oscillator göstergesinin tanımı
- Awesome Oscillator göstergesi stratejileri
- Awesome Oscillator göstergesine dayalı ticaret sisteminin planı
- Awesome Oscillator göstergesine dayalı ticaret sistemi
- Sonuç
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. Kodlama becerilerinizi geliştirmek için makalede okuyacaklarınızı kendi başınıza tekrarlı bir şekilde pratik yapmanızı tavsiye ederim.
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.
Awesome Oscillator göstergesinin tanımı
Bu bölümde, Awesome Oscillator (AO) göstergesi hakkında detaylıca konuşacağız. AO, Bill Williams tarafından momentumu ölçmek için geliştirilmiştir. Piyasaya hangi tarafın - alıcılar veya satıcılar- hakim olduğunu netleştirmek için kullanılabilir. Gösterge, momentumu, son 5 çubuğun momentumunu son 34 çubuğun momentumuyla karşılaştırarak ölçer, diğer bir deyişle, yakın zamandaki momentumu daha büyük bir periyottaki momentumla karşılaştırır. Teknik analiz açısından bakıldığında, AO’nun üreteceği sinyalin başka bir gösterge tarafından teyit edilmesi daha yararlı olacaktır. Dolayısıyla AO göstergesinin başka bir teknik araçla birlikte kullanılması daha doğrudur. Bu göstergenin neyi ölçtüğünü daha iyi anlamak için, hesaplamanın hangi bileşenlerden oluştuğunu görelim. Bunu yapmak adına, göstergeyi manuel olarak hesaplayalım.
AO, 5 periyotluk Simple Moving Average ile 34 periyotluk Simple Moving Average arasındaki farktır. AO’nun hesaplanmasında medyan fiyatı kullanacağız.
MEDIAN PRICE = (HIGH + LOW) / 2
AO = SMA (MEDIAN PRICE, 5) - SMA (MEDIAN PRICE, 34)
Tanımlamalar:
MEDIAN PRICE = enstrümanın medyan fiyatı
HIGH = yüksek fiyatı
LOW = düşük fiyatı
AO = Awesome Oscillator değeri
SMA = Simple Moving Average
Günümüzde, MetaTrader 5 platformuyla standart olarak gelen hazır bir gösterge bulunduğundan, Awesome Oscillator’ı 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 --> Bill Williams --> Awesome Oscillator
Gösterge seçildiğinde, aşağıdaki gösterge parametreleri penceresi açılacaktır:
Tanımlamalar:
1 - yükselen değerlerin rengi
2 - histogramın kalınlığı
3 - düşen değerlerin rengi
Gösterge için uygun parametreleri ayarladıktan sonra gösterge aşağıdaki gibi grafiğe eklenecektir:
Yukarıdaki görüntüde, Awesome Oscillator göstergesinin grafiğe eklendiğini ve 0 etrafında salınan bir histogram olarak alt pencerede görüntülendiğini görüyoruz.
Awesome Oscillator göstergesi stratejileri
Bu bölümde, Awesome Oscillator göstergesini ana konseptine uygun olarak bazı basit stratejilerle nasıl kullanabileceğimizi göreceğiz. Kullanışlı, kârlı ve ticaretinize uygun olduğundan emin olmak için gerçek hesabınızda kullanmadan önce herhangi bir stratejiyi ayrıntılı bir şekilde test ettiğinizden emin olmalısınız. Buna bağlı olarak, aşağıda bahsedeceğimiz stratejilerin optimizasyona ihtiyaç duyduğunu fark edebilirsiniz çünkü bu stratejiler yalnızca eğitim amaçlıdır ve optimizasyona ihtiyaç duymaları normaldir. Bu göstergeyi, daha etkili bilgiler sağlayacağı için başka bir göstergeyle kombine etmek akıllıca olacaktır. Birden çok göstergenin bir arada kullanılması teknik analizin önemli özelliklerindendir. Finansal enstrümana birçok perspektiften bakmaya olanak sağlayarak, hakkında daha fazla bilgi edinmeyi ve büyük resmi daha net görmeyi mümkün kılar. Bu makalede de Awesome Oscillator göstergesini hareketli ortalamayla birlikte kullanacağız - bu kombinasyon daha güvenilir alış ve satış sinyalleri üretilmesini sağlayacaktır.
Bu stratejiye göre, mevcut AO değerinin sıfır seviyesinin üzerinde veya altında olmasına dayalı olarak yükseliş hareketi veya düşüş hareketi şeklinde sinyaller alacağız. Mevcut AO değeri sıfır seviyesinin üzerindeyse, bu, yükseliş hareketi sinyali olacaktır. Eğer mevcut AO değeri sıfır seviyesini altındaysa, bu da düşüş hareketi sinyali olacaktır.
Daha basit ifadeyle,
Mevcut AO > 0 --> Yükseliş hareketi
Mevcut AO < 0 --> Düşüş hareketi
Bu stratejiye göre, mevcut AO değeriyle göstergenin son 5 periyotluk ortalamasını karşılaştırarak AO güçlü veya AO zayıf şeklinde sinyaller alacağız. Mevcut AO değeri göstergenin son 5 periyotluk ortalamasından daha yüksekse, bu, AO güçlü sinyali olacaktır. Eğer mevcut AO değeri göstergenin son 5 periyotluk ortalamasından daha düşükse, bu da AO zayıf sinyali olacaktır.
Daha basit ifadeyle,
Mevcut AO > AO'nun 5 periyotluk ortalaması --> AO güçlü
Mevcut AO < AO'nun 5 periyotluk ortalaması --> AO zayıf
Bu stratejiye göre, belirli koşullara bağlı olarak alış veya satış sinyalleri alacağız. Mevcut AO değeri sıfır seviyesinin üzerindeyse ve bununla birlikte mevcut kapanış fiyatı 50 periyotluk EMA değerinden daha yüksekse, bu, alış sinyali olacaktır. Eğer mevcut AO değeri sıfır seviyesinin altındaysa ve bununla birlikte mevcut kapanış fiyatı 50 periyotluk EMA değerinden daha düşükse, bu da satış sinyali olacaktır.
Daha basit ifadeyle,
Mevcut AO > Sıfır seviyesi ve Mevcut kapanış > 50 periyotluk EMA --> Alış sinyali
Mevcut AO < Sıfır seviyesi ve Mevcut kapanış < 50 periyotluk EMA --> Satış sinyali
Awesome Oscillator 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 AO değerini kontrol etmeli ve bu değeri sıfır seviyesiyle karşılaştırmalıdır. Daha sonra bu karşılaştırmanın sonucuna göre ilgili sinyali grafik üzerinde yorum olarak görüntülemelidir. Mevcut AO değeri sıfır seviyesinin üzerindeyse, şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:
- Yükseliş hareketi
- Mevcut AO değeri
Diğer senaryoda, mevcut AO değeri sıfır seviyesinin altındaysa, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:
- Düşüş hareketi
- Mevcut AO değeri
Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:
Bu stratejiye göre, ticaret sistemi her tikte mevcut AO değerini ve göstergenin son 5 periyotluk ortalamasını kontrol etmeli ve bu iki değeri birbiriyle karşılaştırmalıdır. Daha sonra bu karşılaştırmanın sonucuna göre ilgili sinyali grafik üzerinde yorum olarak görüntülemelidir. Mevcut AO 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:
- AO güçlü
- Mevcut AO değeri
- Birinci AO değeri
- İkinci AO değeri
- Üçüncü AO değeri
- Dördüncü AO değeri
- Beşinci AO değeri
- Ortalama AO değeri
Diğer senaryoda, mevcut AO 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:
- AO zayıf
- Mevcut AO değeri
- Birinci AO değeri
- İkinci AO değeri
- Üçüncü AO değeri
- Dördüncü AO değeri
- Beşinci AO değeri
- Ortalama AO değeri
Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:
Bu stratejiye göre, ticaret sistemi her tikte aşağıdaki değerleri 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 AO değeri
- AO göstergesinin sıfır seviyesi
- Mevcut kapanış fiyatı
- 50 periyotluk EMA değeri
Mevcut AO değeri sıfır seviyesinin üzerindeyse ve bununla birlikte mevcut kapanış fiyatı 50 periyotluk EMA değerinden daha yüksekse, ticaret sistemi şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:
- Alış sinyali
- Mevcut kapanış fiyatı
- Mevcut AO değeri
- Mevcut MA değeri
Diğer senaryoda, mevcut AO değeri sıfır seviyesinin altındaysa ve bununla birlikte mevcut kapanış fiyatı 50 periyotluk EMA değerinden daha düşükse, bu kez de şu ifadeleri ayrı satırlar halinde grafik üzerinde yorum olarak görüntülemelidir:
- Satış sinyali
- Mevcut kapanış fiyatı
- Mevcut AO değeri
- Mevcut MA değeri
Aşağıda, bu strateji için bir program geliştirmemize yardımcı olacak adım adım plan yer almaktadır:
Awesome Oscillator 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. Öncelikle, stratejilerimizin programlarına temel olması adına mevcut AO 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:
double fonksiyonunu kullanarak AO için bir dizi oluşturalım:
double aoArray[];
ArraySetAsSeries fonksiyonunu kullanarak AO dizisini mevcut veriden başlayarak sıralayalım - başarılı olması durumunda true, aksi takdirde false geri döner (bool türü). Parametreleri şunlardır:
- Hedef dizi - aoArray ayarlayacağız.
- Bayrak - Dizi indeksleme yönü olarak true değerini kullanacağız.
ArraySetAsSeries(aoArray,true);
aoDef için int türü değişken oluşturduktan sonra iAO fonksiyonunu kullanarak AO’yu tanımlayalım. iAO fonksiyonu AO 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.
int aoDef = iAO(_Symbol,_Period);
CopyBuffer fonksiyonunu kullanarak aoArray dizisini aoDef değerleriyle dolduralım. Parametreleri şunlardır:
- Gösterge tanıtıcısı - aoDef 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 - aoArray ayarlayacağız.
CopyBuffer(aoDef,0,0,3,aoArray);
aoVal 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 AO değerini hesaplayalım. Parametreleri şunlardır:
- Normalleştirilmiş sayı - aoArray[0] kullanacağız.
- Ondalık basamak sayısı - 7 ayarlayacağız.
double aoVal = NormalizeDouble(aoArray[0],7);
Comment fonksiyonunu kullanarak mevcut AO değerini grafikte yorum olarak görüntüleyelim:
Comment("AO Value is ",aoVal);
Bu stratejiye dayalı Uzman Danışmanın tam kodu aşağıda gösterilmektedir:
//+------------------------------------------------------------------+ //| Simple AO.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" //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ void OnTick() { double aoArray[]; ArraySetAsSeries(aoArray,true); int aoDef = iAO(_Symbol,_Period); CopyBuffer(aoDef,0,0,3,aoArray); double aoVal = NormalizeDouble(aoArray[0],7); Comment("AO Value is ",aoVal); } //+------------------------------------------------------------------+
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:
"Algoritmik ticarete izin ver" seçeneğini etkinleştirip 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 AO değerini grafik üzerinde yorum olarak gösterecektir:
Yukarıdaki görüntüden görebileceğimiz gibi, Uzman Danışman mevcut AO 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:
//+------------------------------------------------------------------+ //| AO Zero Crossover.mq5 | //| Copyright 2022, MetaQuotes Ltd. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2022, MetaQuotes Ltd." #property link "https://www.mql5.com" #property version "1.00" //+------------------------------------------------------------------+ void OnTick() { double aoArray[]; ArraySetAsSeries(aoArray,true); int aoDef = iAO(_Symbol,_Period); CopyBuffer(aoDef,0,0,3,aoArray); double aoVal = NormalizeDouble(aoArray[0],7); if(aoVal > 0) { Comment("Bullish","\n" "AO Value is ",aoVal); } if(aoVal < 0) { Comment("Bearish","\n" "AO Value is ",aoVal); } } //+------------------------------------------------------------------+
Bu koddaki farklılıklar şunlardır:
Stratejinin koşulları:
Yükseliş hareketi:
if(aoVal > 0) { Comment("Bullish","\n" "AO Value is ",aoVal); }
Düşüş hareketi:
if(aoVal < 0) { Comment("Bearish","\n" "AO Value is ",aoVal); }
Bu kodu derledikten ve hata olmadığından emin olduktan sonra, Uzman Danışmanı yukarıda belirttiğimiz gibi Kılavuz üzerinden 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:
Yükseliş hareketi:
Yukarıdaki görüntüden görebileceğimiz gibi, program yükseliş hareketi koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:
- Yükseliş hareketi
- Mevcut AO değeri
Düşüş hareketi:
Yukarıdaki görüntüden görebileceğimiz gibi, program düşüş hareketi koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:
- Düşüş hareketi
- Mevcut AO değeri
Bu stratejiye dayalı Uzman Danışmanın tam kodu aşağıda gösterilmektedir:
//+------------------------------------------------------------------+ //| AO 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 aoArray[]; ArraySetAsSeries(aoArray,true); int aoDef = iAO(_Symbol,_Period); CopyBuffer(aoDef,0,0,6,aoArray); double aoCurrVal = NormalizeDouble(aoArray[0],6); double aoFifthVal = NormalizeDouble(aoArray[1],6); double aoFourthVal = NormalizeDouble(aoArray[2],6); double aoThirdVal = NormalizeDouble(aoArray[3],6); double aoSecondVal = NormalizeDouble(aoArray[4],6); double aoFirstVal = NormalizeDouble(aoArray[5],6); double aoAvgVal = NormalizeDouble((aoFifthVal+aoFourthVal+aoThirdVal+aoSecondVal+aoFirstVal)/5,6); if(aoCurrVal > aoAvgVal) { Comment("AO Movement is strong","\n", "AO CurrVal : ",aoCurrVal,"\n", "AO FirstVal : ",aoFifthVal,"\n", "AO SecondVal : ",aoFourthVal,"\n", "AO ThirdVal : ",aoThirdVal,"\n", "AO FourthVal : ",aoSecondVal,"\n", "AO FifthVal : ",aoFirstVal,"\n", "AO AvgVal : ",aoAvgVal ); } if(aoCurrVal < aoAvgVal) { Comment("AO Movement is Weak","\n", "AO CurrVal : ",aoCurrVal,"\n", "AO FirstVal : ",aoFifthVal,"\n", "AO SecondVal : ",aoFourthVal,"\n", "AO ThirdVal : ",aoThirdVal,"\n", "AO FourthVal : ",aoSecondVal,"\n", "AO FifthVal : ",aoFirstVal,"\n", "AO AvgVal : ",aoAvgVal ); } } //+------------------------------------------------------------------+
Bu koddaki farklılıklar şunlardır:
Burada yalnızca mevcut AO değerini değil, aynı zamanda önceki beş AO değerini de tanımlıyoruz:
double aoCurrVal = NormalizeDouble(aoArray[0],6); double aoFifthVal = NormalizeDouble(aoArray[1],6); double aoFourthVal = NormalizeDouble(aoArray[2],6); double aoThirdVal = NormalizeDouble(aoArray[3],6); double aoSecondVal = NormalizeDouble(aoArray[4],6); double aoFirstVal = NormalizeDouble(aoArray[5],6);
Önceki beş AO değerinin ortalamasını (aoAvgVal) hesaplıyoruz:
double aoAvgVal = NormalizeDouble((aoFifthVal+aoFourthVal+aoThirdVal+aoSecondVal+aoFirstVal)/5,6);
Stratejinin koşulları:
AO güçlü:
if(aoCurrVal > aoAvgVal) { Comment("AO Movement is strong","\n", "AO CurrVal : ",aoCurrVal,"\n", "AO FirstVal : ",aoFifthVal,"\n", "AO SecondVal : ",aoFourthVal,"\n", "AO ThirdVal : ",aoThirdVal,"\n", "AO FourthVal : ",aoSecondVal,"\n", "AO FifthVal : ",aoFirstVal,"\n", "AO AvgVal : ",aoAvgVal ); }
AO zayıf:
if(aoCurrVal < aoAvgVal) { Comment("AO Movement is Weak","\n", "AO CurrVal : ",aoCurrVal,"\n", "AO FirstVal : ",aoFifthVal,"\n", "AO SecondVal : ",aoFourthVal,"\n", "AO ThirdVal : ",aoThirdVal,"\n", "AO FourthVal : ",aoSecondVal,"\n", "AO FifthVal : ",aoFirstVal,"\n", "AO AvgVal : ",aoAvgVal ); }
Derledikten sonra hata olmadığından emin olup Uzman Danışmanı 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:
AO güçlü:
Yukarıdaki görüntüden görebileceğimiz gibi, program AO güçlü sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:
- AO güçlü
- Mevcut AO değeri
- Birinci AO değeri
- İkinci AO değeri
- Üçüncü AO değeri
- Dördüncü AO değeri
- Beşinci AO değeri
- Ortalama AO değeri
AO zayıf:
Yukarıdaki görüntüden görebileceğimiz gibi, program AO zayıf sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:
- AO zayıf
- Mevcut AO değeri
- Birinci AO değeri
- İkinci AO değeri
- Üçüncü AO değeri
- Dördüncü AO değeri
- Beşinci AO değeri
- Ortalama AO değeri
Bu stratejiye dayalı Uzman Danışmanın tam kodu aşağıda gösterilmektedir:
//+------------------------------------------------------------------+ //| AO & MA 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() { MqlRates pArray[]; double aoArray[]; double maArray[]; int Data=CopyRates(_Symbol,_Period,0,1,pArray); ArraySetAsSeries(aoArray,true); ArraySetAsSeries(maArray,true); int aoDef = iAO(_Symbol,_Period); int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE); CopyBuffer(aoDef,0,0,3,aoArray); CopyBuffer(maDef,0,0,3,maArray); double closingPrice = pArray[0].close; double aoVal = NormalizeDouble(aoArray[0],7); double maVal = NormalizeDouble(maArray[0],7); if(aoVal > 0 && closingPrice > maVal) { Comment("Buy","\n" "Closing Price is ",closingPrice,"\n", "AO Value is ",aoVal,"\n", "MA Value is ",maVal); } if(aoVal < 0 && closingPrice < maVal) { Comment("Sell","\n" "Closing Price is ",closingPrice,"\n", "AO Value is ",aoVal,"\n", "MA Value is ",maVal); } } //+------------------------------------------------------------------+
Bu koddaki farklılıklar şunlardır:
Üç dizi oluşturuyoruz (pArray, aoArray ve maArray). pArray dışındaki diziler için double fonksiyonunu kullanacağız, pArray için ise fiyat, hacim ve makas bilgilerini depolayan MqlRates fonksiyonunu kullanacağız:
MqlRates pArray[]; double aoArray[]; double maArray[];
ArraySetAsSeries fonksiyonunu kullanarak aoArray ve maArray dizilerini mevcut veriden başlayarak sıralıyoruz - başarılı olması durumunda true, aksi takdirde false geri döner (bool türü). pArray için MqlRates geçmiş verilerini almak adına CopyRates fonksiyonunu kullanacağız. CopyRates fonksiyonunun parametreleri şunlardır:
- Sembol adı - Mevcut sembole uygulanmak üzere _Symbol kullanacağız.
- Zaman dilimi - Mevcut zaman dilimine uygulanmak üzere _Period kullanacağız.
- Başlangıç konumu - 0 ayarlayacağız.
- Kopyalanacak veri miktarı - 1 ayarlayacağız.
- Hedef dizi - pArray ayarlayacağız.
int Data=CopyRates(_Symbol,_Period,0,1,pArray); ArraySetAsSeries(aoArray,true); ArraySetAsSeries(maArray,true);
Öncesinde yaptığımız gibi iAO fonksiyonunu kullanarak AO’yu tanımlıyoruz ve ayrıca şimdi iMA fonksiyonunu kullanarak da MA’yı tanımlıyoruz. iMA fonksiyonunun 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 - 50 ayarlayacağız.
- Moving Average kayma miktarı - 0 ayarlayacağız.
- Moving Average yöntemi - Exponential Moving Average (MODE_EMA) kullanacağız.
- Uygulanacak fiyat - Kapanış fiyatını (PRICE_CLOSE) kullanacağız.
int aoDef = iAO(_Symbol,_Period); int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
CopyBuffer fonksiyonunu kullanarak oluşturduğumuz dizileri aoDef ve maDef değerleriyle dolduruyoruz:
CopyBuffer(aoDef,0,0,3,aoArray); CopyBuffer(maDef,0,0,3,maArray);
Kapanış fiyatını, AO ve MA değerlerini tanımlıyoruz:
double closingPrice = pArray[0].close; double aoVal = NormalizeDouble(aoArray[0],7); double maVal = NormalizeDouble(maArray[0],7);
Stratejinin koşulları:
Alış sinyali:
if(aoVal > 0 && closingPrice > maVal) { Comment("Buy","\n" "Closing Price is ",closingPrice,"\n", "AO Value is ",aoVal,"\n", "MA Value is ",maVal); }
Satış sinyali:
if(aoVal < 0 && closingPrice < maVal) { Comment("Sell","\n" "Closing Price is ",closingPrice,"\n", "AO Value is ",aoVal,"\n", "MA Value is ",maVal); }
Uzman Danışmanın kodunu derliyoruz ve grafiğe ekliyoruz:
Gördüğümüz üzere, grafiğin sağ üst köşesinde Uzman Danışmanın grafik üzerinde çalıştığına dair bir ifade ortaya çıktı. Devamında program onun için belirlediğimiz koşullara uygun olarak yorumları gösterecektir:
Alış sinyali:
Yukarıdaki görüntüden görebileceğimiz gibi, program alış sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:
- Alış sinyali
- Mevcut kapanış fiyatı
- Mevcut AO değeri
- Mevcut MA değeri
Satış sinyali:
Yukarıdaki görüntüden görebileceğimiz gibi, program satış sinyali koşulunda aşağıdaki değerleri grafikte yorum olarak görüntülemektedir:
- Satış sinyali
- Mevcut kapanış fiyatı
- Mevcut AO değeri
- Mevcut MA değeri
Sonuç
Serimizin bu makalesinde Awesome Oscillator göstergesini inceledik. Makalemizin ilk bölümünde, Awesome Oscillator göstergesinin ne olduğu, neyi ölçtüğü ve manuel olarak nasıl hesaplandığı hakkında konuştuk. Devamında, bazı basit stratejileri ele alarak onu ticaretimizde nasıl kullanabileceğimizi değerlendirdik. Bu basit stratejiler şunlardı:
- Birinci strateji: AO - Sıfırı çaprazlama - gösterge değerinin sıfır seviyesinin üzerinde veya altında olmasına dayalı olarak yükseliş hareketi veya düşüş hareketi şeklinde sinyaller almak için.
- İkinci strateji: AO gücü - mevcut AO değerine ve son beş AO değerinin ortalamasına dayalı olarak AO güçlü veya AO zayıf şeklinde sinyaller almak için.
- Üçüncü strateji: AO ve MA - mevcut AO, göstergenin sıfır seviyesi, mevcut kapanış ve 50 periyotluk EMA değerlerine dayalı olarak alış veya satış sinyalleri almak için.
Sonrasında, 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. Makalenin son bölümünde de hazırladığımız plan çerçevesinde, MetaTrader 5 işlem platformunda kullanılmak üzere, ele aldığımız stratejilere dayalı olarak otomatik sinyaller üretecek bir ticaret sistemi oluşturduk.
Programlama becerilerinizi geliştirmek istiyorsanız, okuduklarınızı kendi başınıza tekrarlı bir şekilde pratik yapmanız gerekir, çünkü pratik yapmak her türlü öğrenme sürecindeki en önemli faktörlerden biridir. Şunu da her zaman olduğu gibi bir kez daha 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.
Bu makaleyi beğendiyseniz, yararlı bulduysanız ve buna benzer daha fazla makale 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. Bir sonraki makalede görüşmek dileğiyle.
MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal makale: https://www.mql5.com/en/articles/11468





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