Hareketli ortalamalara dayalı sistemler nasıl geliştirilir?
Giriş
Ticaret alanındaki deneyim sürenizden bağımsız olarak, birçoğunuz muhtemelen “trend arkadaşınızdır” ifadesini duymuşsunuzdur. Henüz duymamışsanız, şu şekilde açıklamaya başlayayım. Bildiğiniz gibi, piyasa farklı yönlerde fiyat hareketleri veya trendler oluşturabilir.
- Yükseliş trendi: bu hareket sırasında fiyatlar daha yüksek pikler ve daha yüksek çukurlar yapar.
- Düşüş trendi: yükseliş trendinin tersidir, bu hareket sırasında fiyatlar daha düşük dipler ve daha düşük çukurlar yapar.
- Yatay hareket: yükseliş trendi veya düşüş trendi ile ilişkilendirilemeyen her harekettir.
Aşağıdaki görüntüler çizgi grafik şeklinde yükseliş trendi ve düşüş trendi grafiklerini göstermektedir:
Şimdi trendi tanımladık ancak trend neden arkadaşımız?
Burada, yukarı veya aşağı net bir harekete sahip oldukları için trendler, yani yükseliş ve düşüş trendi hakkında konuşacağız. Trendler sırasında piyasaya kimin hakim olduğunu ve fiyatları hareket ettirdiğini anlayabiliriz. Yükseliş trendi sırasında, piyasaya arzdan bağımsız olarak fiyatları yükselten alıcılar hakimdir, bu piyasaya boğa piyasası diyoruz. Ve tam tersi şekilde, düşüş trendi sırasında da, piyasaya arzdan bağımsız olarak fiyatları düşüren satıcılar hakimdir. Bu piyasaya da ayı piyasası diyoruz.
Ancak bazı durumlarda, piyasada yanlış kırılmalarla birlikte testere dişi hareketi görebiliriz. Bu yanlış kırılmalar ticaretimizde zararlar oluşturabilir, ama peki nasıl? Nasıl zarar verebileceklerini biraz sonra anlatacağım, ancak önce yanlış kırılmaların ne olduğunu tanımlayalım.
Yanlış kırılmalar, belirli bir yöndeki fiyat hareketi sonucunda belirli bir eylem için olan sinyalin tetiklendiği, dolayısıyla ilgili eylemin gerçekleştiği, ancak sonrasında fiyatın tersi yönde hareket ettiği durumdur. Ve elbette bu şekilde gerçekleşen eylemler ticaret sonuçlarımız için olumsuz olacaktır, dolayısıyla trend arkadaşımızdır. Bu yanlış kırılmalar, birçok stratejiyle filtrelenerek azaltılabilir. Bunu yapabilecek en iyi stratejilerden biri hareketli ortalama kullanmaktır. Bu makalede de, hareketli ortalamalara dayalı bazı stratejilerin nasıl kullanılacağını ve onlar için bir algoritmik ticaret sistemini nasıl tasarlayacağımızı öğreneceğiz.
Bu makalede şu konuları ele alacağız:
- Hareketli ortalama tanımı
- Hareketli ortalama türleri
- Strateji 1: Tek hareketli ortalamanın çaprazlaması
- Strateji 2: İki hareketli ortalamanın çaprazlaması
- Strateji 3: Üç hareketli ortalamanın çaprazlaması
Sorumluluk reddi: Bu makalenin tüm içeriği yalnızca eğitim amaçlıdır, başka herhangi bir amaca yönelik değildir. Dolayısıyla, bu makalenin içeriğine dayalı olarak gerçekleştireceğiniz her şey, yalnızca kendi sorumluluğunuzda ve riskinizde olacaktır, bu makalenin içeriği herhangi bir sonucu garanti etmemektedir. Bu makaledeki tüm stratejilerin dikkatlice test edilmeye ve optimize edilmeye ihtiyacı olabilir, çünkü tekrarlıyorum ki, bu makalenin tüm içeriği yalnızca eğitim amaçlıdır.
Tüm kodlar MQL5'te yazılacak ve MT5 üzerinde test edilecektir.
Herhangi bir ticaret sistemi tarafından üretilen sinyalleri filtrelemenin birçok farklı stratejisi vardır. Muhtemelen bunların en basiti hareketli ortalama kullanmaktır. Bu makalede, bazı hareketli ortalama stratejilerin nasıl kullanılacağını ve onlar için algoritmik ticaret sistemlerini nasıl tasarlayacağımızı öğreneceğiz. Makalenin amacı, okuyuculara kendi algoritmik ticaret sistemlerini nasıl oluşturacaklarına dair bilgiler paylaşmaktır. Şimdi “Hareketli ortalamalara dayalı sistemler nasıl geliştirilir?” başlıklı ana konumuza geçelim. Bu bilgileri sizlerle paylaşmaktan büyük heyecan duyuyorum…
Hareketli ortalama tanımı
Hareketli ortalama göstergeleri teknik analizde çok yaygındır. Belirli bir periyot boyuncaki fiyatların ortalaması olarak hesaplanır. Başka bir deyişle, gösterge, fiyat verilerini yumuşatır ve rastgele kısa vadeli hareketlerin ve dalgalanmaların grafik üzerindeki etkisini azaltır.
Birçok hareketli ortalama türü vardır. Aralarındaki fark, bir sonraki bölümde ayrıntılı olarak bahsedeceğim gibi, her biri için farklı hesaplamalar olmasıdır. Şimdilik, birçok farklı türün olduğunu ve belirli durumlarda en iyi sonuçları elde etmek için farklı hesaplama seçeneklerini kullanabileceğimizi bilmeniz yeterlidir.
Hareketli ortalama, fiyat analizine dayanan bir trend göstergesidir. Yani, fiyat belirli bir yönde hareket ederse, hareketli ortalama da fiyatı aynı yönde takip edecektir.
Hareketli ortalama, mevcut fiyatı takip ederek periyodun ortalamasını hesapladığı için gecikmeli bir göstergedir. Bu, hesaplama mantığından doğan normal bir durumdur.
Hareketli ortalamanın doğası gereği, hareketli ortalama:
- Ortalamayı gösterir.
- Trende sahip piyasalarda daha iyi çalışır.
- Trend olduğunu teyit eder veya trendin tanımlanmasına yardımcı olur.
- Fiyatlardan gürültü veya rastgele hareketi temizler.
- Ortadan kaldırılacağı için rastgele hareketler nedeniyle yanlış kırılmalardan kaçınılmasına yardımcı olur.
- Ve daha fazlası...
Hareketli ortalama türleri
Birçok farklı hareketli ortalama türü vardır. En yaygın olanları:
- Simple Moving Average.
- Weighted Moving Average.
- Exponential Moving Average.
Aralarındaki temel fark, hesaplama yöntemlerinde yatar.
Şimdi her birine bakalım ve aralarındaki farkları görelim. Ayrıca bu hareketli ortalamaların MQL5'te nasıl kullanılacağını veya belirli bir türü kullanmak istiyorsak nasıl çağıracağımızı da inceleyeceğiz.
Simple Moving Average
Bu, en basit hareketli ortalama türüdür ve yaygın olarak kullanılan kısayolu SMA'dır.
Belirli bir periyottaki fiyat kümesinin aritmetik ortalaması şeklinde hesaplanır. Yani belirli sayıdaki fiyatlar toplanır ve ardından sonuç bu sayıya bölünür.
Örnek: 5 işlem günümüz var ve bu 5 gündeki kapanış fiyatları şu şekilde:
- 1. gün = 10
- 2. gün = 15
- 3. gün = 20
- 4. gün = 30
- 5. gün = 35
Bu 5 gün için SMA değeri şu şekilde hesaplanır:
Weighted Moving Average
Weighted Moving Average (WMA) da periyodun ortalama fiyatını gösterir, ancak burada son verilere daha fazla ağırlık verilir. Yani örneğin 10 gün için WMA'yı hesaplayacaksak, tüm 10 günün ortalama fiyattaki ağırlıkları aynı olmayacaktır, son günlerin ağırlığı ortalama fiyat üzerinde daha fazla olacaktır.
WMA, şu formül kullanılarak hesaplanır:
Örnek:
Aynı kapanış fiyatlarına sahip 5 işlem gününü WMA için ele alalım:
- 1. gün = 10
- 2. gün = 15
- 3. gün = 20
- 4. gün = 30
- 5. gün = 35
Bu 5 gün için WMA değeri şu şekilde hesaplanır:
Exponential Moving Average
Bu MA türünün özelliği, hesaplamanın, hesaplama periyodundan bir önceki periyodu da dikkate almasıdır.
EMA, şu formül kullanılarak hesaplanır:
İlk olarak, periyodun ağırlığını hesaplamak için “K” olarak ifade edilen üssü hesaplayacağız (burada “n”, periyodu ifade edecek):
Sonrasında,
Örnek:
Aynı kapanış fiyatlarına sahip 5 işlem gününü WMA için ele alalım:
- 1. gün = 10
- 2. gün = 15
- 3. gün = 20
- 4. gün = 30
- 5. gün = 35
- 6. gün = 40
Bu 5 gün için EMA değeri şu şekilde hesaplanır:
Lütfen EMA hesaplamasının ilk gününün 6. gün olduğunu ve önceki beş günün SMA'sının (22) hesaplandığını unutmayın.
Hareketli ortalamanın tanımı ve türleri hakkında bilgi sahibi olduk. Şimdi bu makalenin en ilginç kısmına geçelim. Bazı hareketli ortalamaya stratejilerinden ve onlar için algoritmik ticaret sistemlerini nasıl tasarlayabileceğimizden bahsedeceğiz.
Strateji 1: Tek hareketli ortalamanın çaprazlaması
Bu makalede örneklerde Simple Moving Average (SMA) ile çalışacağız. Ancak, kodunuzda istediğiniz herhangi bir hareketli ortalama türünü kullanabilirsiniz.
Bu stratejide, fiyat ve SMA her tikte kontrol edilecek:
- Fiyat > SMA: alış sinyali, bu sinyali grafikte yorum olarak göstereceğiz.
- Fiyat < SMA: satış sinyali, bu sinyali grafikte yorum olarak göstereceğiz.
- Diğer tüm durumlarda, hiçbir şey yapmıyoruz.
Aşağıdaki görüntü, tek SMA'nın çaprazlamasına dayalı stratejinin planını göstermektedir:
Strateji kodu şu şekilde olacak:
//+------------------------------------------------------------------+ //| One SMA 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" //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //create an array for price double myMovingAverageArray1[]; //define Ask, Bid double Ask = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_ASK),_Digits); double Bid = NormalizeDouble(SymbolInfoDouble(_Symbol,SYMBOL_BID),_Digits); //define the properties of MAs - simple MA 24 int movingAverage1 = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE); //sort the price arrays current candle ArraySetAsSeries(myMovingAverageArray1,true); //Defined MA - one line - currentcandle, 3 candles - store result CopyBuffer(movingAverage1,0,0,3,myMovingAverageArray1); //Check if we have a buy entry signal if ( (Ask>myMovingAverageArray1[0]) ) { Comment("BUY"); } //check if we have a sell entry signal if ( (Bid<myMovingAverageArray1[0]) ) { Comment("SELL"); } } //+------------------------------------------------------------------+
Aşağıdaki görüntüler, kodu yürüttükten sonra oluşan ve grafikte yorum olarak gösterilen sinyalleri göstermektedir:
Strateji 2: İki hareketli ortalamanın çaprazlaması
Bu stratejide iki SMA kullanacağız. Kısa SMA'nın periyodu 24, uzun SMA'nın periyodu 50 olacak.
Bu stratejide, her tikte iki SMA'nın konumu kontrol edilecek:
- 24 SMA > 50 SMA: alış sinyali, bu sinyali grafikte yorum olarak göstereceğiz.
- 24 SMA < 50 SMA: satış sinyali, bu sinyali grafikte yorum olarak göstereceğiz.
- Diğer tüm durumlarda, hiçbir şey yapmıyoruz.
Aşağıdaki görüntü, iki SMA'nın çaprazlamasına dayalı stratejinin planını göstermektedir:
Strateji kodu şu şekilde olacak:
//+------------------------------------------------------------------+ //| Two SMA 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" //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //create an array for several prices double myMovingAverageArray1[], myMovingAverageArray2[]; //define the properties of MAs - simple MA, 1st 24 / 2nd 50 int movingAverage1 = iMA(_Symbol, _Period, 24, 0, MODE_SMA, PRICE_CLOSE); int movingAverage2 = iMA(_Symbol,_Period,50,0,MODE_SMA,PRICE_CLOSE); //sort the price arrays 1, 2 from current candle ArraySetAsSeries(myMovingAverageArray1,true); ArraySetAsSeries(myMovingAverageArray2,true); //Defined MA1, MA2 - one line - currentcandle, 3 candles - store result CopyBuffer(movingAverage1,0,0,3,myMovingAverageArray1); CopyBuffer(movingAverage2,0,0,3,myMovingAverageArray2); //Check if we have a buy entry signal if ( (myMovingAverageArray1[0]>myMovingAverageArray2[0]) && (myMovingAverageArray1[1]<myMovingAverageArray2[1]) ) { Comment("BUY"); } //check if we have a sell entry signal if ( (myMovingAverageArray1[0]<myMovingAverageArray2[0]) && (myMovingAverageArray1[1]>myMovingAverageArray2[1]) ) { Comment("SELL"); } } //+------------------------------------------------------------------+
Aşağıdaki görüntüler, kodu yürüttükten sonra oluşan ve grafikte yorum olarak gösterilen sinyalleri göstermektedir:
Strateji 3: Üç hareketli ortalamanın çaprazlaması
Bu stratejide, üç SMA kullanacağız: 10 periyotlu kısa, 24 periyotlu orta ve 48 periyotlu uzun.
Bu stratejide, her tikte üç SMA'nın konumu kontrol edilecek:
- 10 SMA > 24 SMA, 10 SMA > 48 SMA ve 24 SMA > 48 SMA: alış sinyali, bu sinyali grafikte yorum olarak göstereceğiz.
- 10 SMA < 24 SMA, 10 SMA < 48 SMA ve 24 SMA < 48 SMA: satış sinyali, bu sinyali grafikte yorum olarak göstereceğiz.
- Diğer tüm durumlarda, hiçbir şey yapmıyoruz.
Aşağıdaki görüntü, üç SMA'nın çaprazlamasına dayalı stratejinin planını göstermektedir:
Strateji kodu şu şekilde olacak:
//+------------------------------------------------------------------+ //| Three SMA 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" //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //create an array for several prices double myMovingAverageArray1[], myMovingAverageArray2[],myMovingAverageArray3[]; //define the properties of MAs - simple MA, 1st 10 / 2nd 24, 3rd 48 int movingAverage1 = iMA(_Symbol, _Period, 10, 0, MODE_SMA, PRICE_CLOSE); int movingAverage2 = iMA(_Symbol,_Period,24,0,MODE_SMA,PRICE_CLOSE); int movingAverage3 = iMA(_Symbol,_Period,48,0,MODE_SMA,PRICE_CLOSE); //sort the price arrays 1, 2, 3 from current candle ArraySetAsSeries(myMovingAverageArray1,true); ArraySetAsSeries(myMovingAverageArray2,true); ArraySetAsSeries(myMovingAverageArray3,true); //Defined MA1, MA2, MA3 - one line - currentcandle, 3 candles - store result CopyBuffer(movingAverage1,0,0,3,myMovingAverageArray1); CopyBuffer(movingAverage2,0,0,3,myMovingAverageArray2); CopyBuffer(movingAverage3,0,0,3,myMovingAverageArray3); //Check if we have a buy entry signal if ( (myMovingAverageArray1[0]>myMovingAverageArray2[0]) && (myMovingAverageArray1[1]<myMovingAverageArray2[1]) && (myMovingAverageArray1[0]>myMovingAverageArray3[0]) && (myMovingAverageArray1[1]<myMovingAverageArray3[1]) && (myMovingAverageArray2[0]>myMovingAverageArray3[0]) && (myMovingAverageArray2[1]<myMovingAverageArray3[1]) ) { Comment("BUY"); } //check if we have a sell entry signal if ( (myMovingAverageArray1[0]<myMovingAverageArray2[0]) && (myMovingAverageArray1[1]>myMovingAverageArray2[1]) && (myMovingAverageArray1[0]<myMovingAverageArray3[0]) && (myMovingAverageArray1[1]>myMovingAverageArray3[1]) && (myMovingAverageArray2[0]<myMovingAverageArray3[0]) && (myMovingAverageArray2[1]>myMovingAverageArray3[1]) ) { Comment("SELL"); } } //+------------------------------------------------------------------+
Sonuç
Bu makalede, en popüler ve en kullanışlı göstergelerden biri olan hareketli ortalamayı inceledik ve türleri hakkında bilgi sahibi olduk. Ayrıca hareketli ortalamanın bir türü olan Simple Moving Average'a ilişkin üç farklı stratejiyi paylaşarak hareketli ortalamaları nasıl kullanabileceğimize ve onlar için algoritmik ticaret sistemlerini nasıl tasarlayabileceğimize baktık. Bu stratejileri kullanmak istiyorsanız, kullanmadan önce kapsamlı test ve optimizasyon yaptığınızdan emin olun.
MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal makale: https://www.mql5.com/en/articles/3040
- Ücretsiz ticaret 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