Alım-satım robotlarını ücretsiz olarak nasıl indirebileceğinizi izleyin
Bizi Facebook üzerinde bulun!
Fan sayfamıza katılın
Komut dosyasını ilginç mi buldunuz?
Öyleyse bir link gönderin -
başkalarının da faydalanmasını sağlayın
Komut dosyasını beğendiniz mi? MetaTrader 5 terminalinde deneyin
Uzman Danışmanlar

MQL5 Sihirbazı - Zaman Filtresiyle İki EMA Göstergesinin Çaprazlamasına Dayalı Ticaret Sinyalleri - MetaTrader 5 için Uzman Danışman

Görüntülemeler:
299
Derecelendirme:
(40)
Yayınlandı:
2022.03.09 15:26
MQL5 Freelance Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git

MQL5 Sihirbazı, Uzman Danışmanların kodunun otomatik olarak oluşturulmasına olanak sağlar. Ayrıntılar için MQL5 Sihirbazında Hazır Uzman Danışmanlar Oluşturma makalesine bakın.

İki hareketli ortalamaya dayalı stratejinin ticaret sinyalleri MQL5 Sihirbazı - İki EMA Göstergesinin Çaprazlamasına Dayalı Ticaret Sinyalleri bölümünde anlatılmıştır. Hareketli ortalamalara dayalı stratejiler, trend varlığında etkilidir, aksi takdirde birçok yanlış sinyal verirler. Ticaret performansını artırmanın yollarından biri, ticaret işlemlerini zamana göre filtrelemek, piyasaya girişi belirli bir zaman aralığıyla sınırlamaktır (örneğin, yalnızca Avrupa seansı sırasında pozisyon açma gibi).

Bu bölümde zaman filtresiyle iki EMA göstergesinin (FastEMA ve SlowEMA) çaprazlamasını temel alan strateji ele alınacak. Strateji "Signals based on crossover of two EMA with intraday time filter" olarak adlandırılır (MQL5 Sihirbazında bu stratejiye dayalı olan Uzman Danışman otomatik olarak oluşturulurken).

Ticaret sinyalleri:

  • Alış: FastEMA, SlowEMA'yı yukarı doğru çaprazladığında ve zaman filtresi koşulları karşılanmadığında.
  • Satış: FastEMA, SlowEMA'yı aşağı doğru çaprazladığında ve zaman filtresi koşulları karşılanmadığında.

Bu strateji CSignal2EMA_ITF sınıfında yer alır.

Sinyallerin belirli zaman aralıklarına göre filtrelenmesi CsignalITF sınıfında yer alır. Aşağıda kullanım örneği olarak, Csignal2EMA_ITF sınıfı (CsignalITF sınıf nesnesini içerir) ele alınacak.

Csignal2EMA_ITF sınıfının bir diğer ayırt edici özelliği, fiyat seviyeleri hareketli ortalamanın mevcut değerine göre hesaplanan ve ATR (Average True Range) birimlerinde belirlenen bekleyen emirlerle çalışmasıdır.

Şekil 1. Zamana filtresiyle iki EMA göstergesinin çaprazlamasına dayalı ticaret sinyalleri

Şekil 1. Zamana filtresiyle iki EMA göstergesinin çaprazlamasına dayalı ticaret sinyalleri

Ticaret Sinyalleri

Ticaret stratejisi CSignal2EMA_ITF sınıfında yer alır; fiyat ve gösterge değerlerine erişimi basitleştirmek için birkaç korumalı metoda sahiptir:

 double  FastEMA(int ind)      // çubuğun FastEMA değerini geri döndürür
 double  SlowEMA(int ind)      // çubuğun SlowEMA değerini geri döndürür
 double  StateFastEMA(int ind) // FastEMA artıyorsa/azalıyorsa pozitif/negatif değer geri döndürür
 double  StateSlowEMA(int ind) // SlowEMA artıyorsa/azalıyorsa pozitif/negatif değer geri döndürür
 double  StateEMA(int ind)     // FastEMA ve SlowEMA arasındaki farkı geri döndürür
 double  ATR(int ind)          // çubuğun ATR değerini geri döndürür


Bu sistemin bir özelliği de, ticaretin Limit girdi parametresine bağlı olmasıdır. Bu parametrenin işaretine bağlı olarak piyasaya giriş için üç farklı seçenek bulunur:

  1. Limit>0. Hareketli ortalamanın yanlış kırılması durumunda düzeltme ile piyasaya giriş yapılır (Buy Limit veya Sell Limit emirleri ticaret sinyaline bağlı olarak verilir).
  2. Limit<0. Fiyat hareketinin devam etmesi ile piyasaya giriş yapılır (Buy Stop veya Sell Stop emirleri ticaret sinyaline bağlı olarak verilir).
  3. Limit=0. Bu durumda piyasa fiyatları kullanılarak piyasaya giriş yapılır.


1. Alış pozisyonu açma

İlk olarak, alış pozisyonu açma koşulları kontrol edilir: son tamamlanmış çubukta FastEMA ve SlowEMA arasındaki fark işareti "-"den "+"ya (StateEMA(1)>0 && StateEMA(2)<0) değişmiş mi?

Ardından, CsignalITF sınıfının CheckOpenLong() metodu çağrılarak zaman filtresi kontrol edilir. Girdi parametrelerinde belirtilen zaman aralığına göre ticarete izin verilirse, son tamamlanmış çubuğun baz fiyat seviyesi (hareketli ortalamanın değeri) ve ATR aralığı hesaplanır.

Limit girdi parametresinin işaretine bağlı olarak bekleyen alış emri verilir. Emir fiyatı, Kârı Al ve Zararı Durdur seviyeleri, baz fiyat seviyesine (ATR birimlerinde) göre belirlenir. Verilen emrin ömrü, Expiration girdi parametresiyle belirlenir ve mevcut zaman diliminde çubuk sayısı şeklinde ayarlanır.

//+------------------------------------------------------------------+
//| Alış pozisyonu açma koşullarını kontrol et                       |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(!(StateEMA(1)>0 && StateEMA(2)<0))                    return(false);
   if(!m_time_filter.CheckOpenLong(price,sl,tp,expiration)) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
   double spread=m_symbol.Ask()-m_symbol.Bid();
//---
   price=m_symbol.NormalizePrice(ema-m_limit*atr+spread);
   sl   =m_symbol.NormalizePrice(price+m_stop_loss*atr);
   tp   =m_symbol.NormalizePrice(price-m_take_profit*atr);
   expiration+=m_expiration*PeriodSeconds(m_period);
//---
   return(true);
  }

2. Alış pozisyonunu kapatma

Bu örnekte, alış pozisyonunu kapatmak için koşulları kontrol eden fonksiyon her zaman false geri döndürür, yani alış pozisyonunun Kârı Al veya Zarar Durdur ile kapatılacağı varsayılır. Gerekirse, pozisyonu kapatmakta kullanılacak başka kurallar ekleyebilirsiniz.

//+------------------------------------------------------------------+
//| Alış pozisyonunu kapatma koşullarını kontrol et                  |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckCloseLong(double& price)
  {
   return(false);
  }


3. Satış pozisyonu açma

İlk olarak, satış pozisyonu açma koşulları kontrol edilir: son tamamlanmış çubukta FastEMA ve SlowEMA arasındaki fark işareti "+"dan "-"ye (StateEMA(1)<0 && StateEMA(2)>0) değişmiş mi?

Ardından, CsignalITF sınıfının CheckOpenLong() metodu çağrılarak zaman filtresi kontrol edilir. Girdi parametrelerinde belirtilen zaman aralığına göre ticarete izin verilirse, son tamamlanmış çubuğun baz fiyat seviyesi (hareketli ortalamanın değeri) ve ATR aralığı hesaplanır.

Limit girdi parametresinin işaretine bağlı olarak bekleyen satış emri verilir. Emir fiyatı, Kârı Al ve Zararı Durdur seviyeleri, baz fiyat seviyesine (ATR birimlerinde) göre belirlenir. Verilen emrin ömrü, Expiration girdi parametresiyle belirlenir ve mevcut zaman diliminde çubuk sayısı şeklinde ayarlanır.

//+------------------------------------------------------------------+
//| Satış pozisyonu açma koşullarını kontrol et                      |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   if(!(StateEMA(1)<0 && StateEMA(2)>0))                     return(false);
   if(!m_time_filter.CheckOpenShort(price,sl,tp,expiration)) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
//---
   price      =m_symbol.NormalizePrice(ema+m_limit*atr);
   sl         =m_symbol.NormalizePrice(price+m_stop_loss*atr);
   tp         =m_symbol.NormalizePrice(price-m_take_profit*atr);
   expiration+=m_expiration*PeriodSeconds(m_period);
//---
   return(true);
  }

4. Satış pozisyonunu kapatma

Bu örnekte, satış pozisyonunu kapatmak için koşulları kontrol eden fonksiyon her zaman false geri döndürür, yani satış pozisyonunun Kârı Al veya Zarar Durdur ile kapatılacağı varsayılır. Gerekirse, pozisyonu kapatmakta kullanılacak başka kurallar ekleyebilirsiniz.

//+------------------------------------------------------------------+
//| Satış pozisyonunu kapatma koşullarını kontrol et                 |
//+------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckCloseShort(double& price)
  {
   return(false);
  }


5. Bekleyen Alış Emrinin Takip Hareketi

Hareketli ortalamanın ve ATR'ın mevcut değerlerine bağlı olarak emir fiyatı ayarlanır.

Önemli bir nokta: Bu ticaret sistemi, ticaret sinyallerine bağlı olarak bekleyen emirler verir. Emir başarılı bir şekilde yerleştikten sonra, yukarıda 5 nolu alanda anlatıldığı gibi hareketli ortalamayı takip eder. Bekleyen emir ancak piyasa fiyatının emir fiyatına ulaşması durumunda gerçekleşir.
//+--------------------------------------------------------------------+
//| Bekleyen alış emrini değiştirme koşullarını kontrol et             |
//+--------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckTrailingOrderLong(COrderInfo* order,double& price)
  {
//--- check
   if(order==NULL) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
   double spread=m_symbol.Ask()-m_symbol.Bid();
//---
   price=m_symbol.NormalizePrice(ema-m_limit*atr+spread);
//---
   return(true);
  }


6. Bekleyen Satış Emrinin Takip Hareketi

Hareketli ortalamanın ve ATR'ın mevcut değerlerine bağlı olarak emir fiyatı ayarlanır.

Bekleyen emir ancak piyasa fiyatının emir fiyatına ulaşması durumunda gerçekleşir.

//+--------------------------------------------------------------------+
//| Bekleyen satış emrini değiştirme koşullarını kontrol et            |
//+--------------------------------------------------------------------+
bool CSignal2EMA_ITF::CheckTrailingOrderShort(COrderInfo* order,double& price)
  {
//--- check
   if(order==NULL) return(false);
//---
   double ema=SlowEMA(1);
   double atr=ATR(1);
//---
   price=m_symbol.NormalizePrice(ema+m_limit*atr);
//---
   return(true);
  }

MQL5 Sihirbazını kullanarak Uzman Danışman oluşturma

MQL5 Sihirbazını kullanarak bu stratejiye dayalı bir ticaret robotu oluşturmak için ikinci adımda "Signals based on crossover of two EMA with intraday time filter" sinyal türünü seçin:

Şekil 2. MQL5 Sihirbazından "Signals based on crossover of two EMA with intraday time filter" sinyal türünü seçin

Şekil 2. MQL5 Sihirbazından "Signals based on crossover of two EMA with intraday time filter" sinyal türünü seçin

Ardından, gerekli takip eden durdurucu algoritmasını ve para ve risk yönetimi sistemini belirlemelisiniz. Uzman Danışman kodu otomatik olarak oluşturulacaktır, oluşturulan kodu derleyebilir ve MetaTrader 5 müşteri terminalinin Strateji Sınayıcısında test edebilirsiniz.


Test Sonuçları

Uzman Danışmanın geçmiş verileri üzerinde geriye dönük testini ele alalım (EURUSD H1, test aralığı: 1.1.2010-05.01.2011, PeriodFastEMA=5, PeriodSlowEMA=30, PeriodATR=7, Limit=1.2, StopLoss=5, TakeProfit=8, Expiration=4, GoodMinuteOfHour=-1, BadMinutesOfHour=0, GoodHourOfDay=-1, BadHoursOfDay=0, GoodDayOfWeek=-1, BadDaysOfWeek=0).

Uzman Danışman oluşturulurken 0.1 lotluk sabit işlem hacmi kullanıldı (Trading Fixed Lot), Takip Eden Durdurucu algoritması kullanılmadı (Trailing not used).

Şekil 3. ITF filtresi kullanılmadan iki EMA göstergesinin çaprazlamasına dayalı Uzman Danışmanın geçmişe dönük test sonuçları

Şekil 3. ITF filtresi kullanılmadan iki EMA göstergesinin çaprazlamasına dayalı Uzman Danışmanın geçmişe dönük test sonuçları

Yukarıdaki örnekte zaman filtresi kullanılmamıştır, bu nedenle birçok yanlış sinyal oluşmuştur. İşlem saatlerine bağlı olarak işlem sonuçlarının analizi yapılırsa ticaret sinyalleri iyileştirilebilir.

Yukarıdaki örnekte, iki EMA'nın çaprazlaması 6:00'dan 23:59'a kadar birçok yanlış sinyal sağladığı görülmektedir. Bu bilgiyle filtre parametrelerini ayarlayarak zaman filtresi belirlenebilir.

Bu örnek için, sadece 0:00 ile 5:59 arasında pozisyon açmaya izin veren bir zaman filtresi ayarlanabilir, bu, BadHoursOfDay=16777152=11111111111111111000000b değeri ayarlanarak yapılır. Böylece, ilk 6 saatten sonraki tüm saatler, piyasaya giriş için istenmeyen zaman aralıkları olarak kabul edilir.

Örnek için zaman filtresi ayarlandıktan sonra birçok yanlış ticaret sinyali filtrelenmiş oldu:

Şekil 4. Zaman Filtresiyle iki EMA göstergesinin çaprazlamasına dayalı Uzman Danışmanın geçmişe dönük test sonuçları

Şekil 4. Zaman Filtresiyle iki EMA göstergesinin çaprazlamasına dayalı Uzman Danışmanın geçmişe dönük test sonuçları


CsignalITF sınıfı ayrıca daha karmaşık zaman filtrelerinin (dakikalar, saatler veya haftanın belirli günleri için) ayarlanmasına da olanak tanır.

Zaman filtrelerinin kullanılması, ticaret sinyallerini iyileştirmeye ve belirli zaman aralıklarındaki piyasa hareketlerini (örneğin, işlem seanslarının özellikleri) dikkate almaya olanak sağlar.

Ekler: CSignal2EMA_ITF sınıfına sahip Signal2EMA-ITF.mqh dosyası, terminal_veri_klasörü\MQL5\Include\Expert\Signal klasörüne yerleştirilmelidir.

expert_2ema_itf.mq5 dosyası, MQL5 Sihirbazı kullanılarak oluşturulan Uzman Danışman kodunu içerir.


MetaQuotes Ltd tarafından Rusçadan çevrilmiştir.
Orijinal kod: https://www.mql5.com/ru/code/264

MQL5 Sihirbazı - MACD Göstergesinin Ana ve Sinyal Çizgilerinin Çaprazlamasına Dayalı Ticaret Sinyalleri MQL5 Sihirbazı - MACD Göstergesinin Ana ve Sinyal Çizgilerinin Çaprazlamasına Dayalı Ticaret Sinyalleri

Bu bölümde MACD göstergesinin ana ve sinyal çizgilerinin çaprazlamasına dayalı ticaret sinyalleri (MQL5 Standart Kütüphanesinden CSignalMACD) açıklanmaktadır. Bu stratejiye dayalı olan Uzman Danışman kodu, MQL5 Sihirbazı kullanılarak otomatik olarak oluşturulabilir.

MQL5 Sihirbazı - İki EMA Göstergesinin Çaprazlamasına Dayalı Ticaret Sinyalleri MQL5 Sihirbazı - İki EMA Göstergesinin Çaprazlamasına Dayalı Ticaret Sinyalleri

Bu bölümde iki EMA göstergesinin çaprazlamasına dayalı ticaret sinyalleri açıklanmaktadır. Bu stratejiye dayalı olan Uzman Danışman kodu, MQL5 Sihirbazı kullanılarak otomatik olarak oluşturulabilir.

MQL5 Sihirbazı - Alligator Göstergesinin Çizgilerinin Çaprazlamasına Dayalı Ticaret Sinyalleri MQL5 Sihirbazı - Alligator Göstergesinin Çizgilerinin Çaprazlamasına Dayalı Ticaret Sinyalleri

Bu bölümde Alligator teknik göstergesinin çizgilerinin çaprazlamasına dayalı ticaret sinyalleri açıklanmaktadır. Bu stratejiye dayalı olan Uzman Danışman kodu, MQL5 Sihirbazı kullanılarak otomatik olarak oluşturulabilir.

MQL5 Sihirbazı - Terse Dönüş Mum Modellerine Dayalı Ticaret Sinyalleri MQL5 Sihirbazı - Terse Dönüş Mum Modellerine Dayalı Ticaret Sinyalleri

Bu bölümde terse dönüş mum modellerine dayalı ticaret sinyalleri açıklanmaktadır. Bu stratejiye dayalı olan Uzman Danışman kodu, MQL5 Sihirbazı kullanılarak otomatik olarak oluşturulabilir.