SORUN
Çoğu haber filtresi, MQL5 ekonomik takvimini (CalendarValueHistory) okur. Bu takvim Strateji Testçisi'nde bulunmadığından, söz konusu filtreler geriye dönük testlerde hiçbir işlem yapmaz: EA, NFP, CPI veya faiz kararları sırasında doğrudan işlem yapar ve geriye dönük test, canlı piyasadaki davranışla artık uyuşmaz. Yaptığım testlerden birinde, XAUUSD üzerindeki bir bekleyen emir, ABD CPI verisinin açıklanmasından 5 dakika önce gerçekleştirildi ve stop loss, 45 USD'lik kayma ile uygulandı; tek bir işlemde planlanan riskin 6,5 katı kayıp yaşandı.
İkinci ve daha az bilinen bir sorun: terminal, geçmiş takvim saatlerini MEVCUT sunucu zaman farkına göre dönüştürür. Yaz aylarında GMT+2 / GMT+3 brokerında veri dışa aktarıldığında, her kış etkinliği bir saat gecikmeli olarak görünür (NFP, sunucu saatine göre 15:30 yerine 16:30'da). Bu saatlere dayalı bir filtre, yılın yarısı boyunca yanlış saati engelliyor.
ÇÖZÜM - ÜÇ DOSYA
NewsCalendarExport.mq5 (komut dosyası) - olayları Terminal\Common\Files\NewsCalendar.csv dosyasına aktarır ve her olayı kendi tarihine ait sunucu zaman farkı ile yeniden hesaplar. Sonunda bir öz denetim çıktısı verir: USD olaylarının en sık görüldüğü saat, kışın ve yazın aynı olmalıdır.
NewsFilter.mqh (CNewsFilter sınıfı) - hem canlı işlemler hem de geriye dönük testler için tek bir filtre. Canlı işlemde ekonomik takvimi okur (dakikada en fazla bir kez sorgulanır); Strateji Testçisi'nde ise CSV dosyasını okur. Yalnızca sembolün para birimleri kullanılır (EURUSD: EUR + USD, XAUUSD: USD, USD cinsinden fiyatlandırılan endeks CFD'leri: USD).
NewsFilter_Example.mq5 - bir haber penceresinin ne zaman başladığını ve bittiğini gösteren ve engellenen pencereleri grafikte işaretleyen basit bir EA'dır; böylece test cihazının görsel modunda filtrenin nasıl çalıştığını görebilirsiniz.
KULLANIM
NewsFilter.mqh dosyasını MQL5\Include klasörüne, NewsCalendarExport.mq5 dosyasını MQL5\Scripts klasörüne ve NewsFilter_Example.mq5 dosyasını MQL5\Experts klasörüne kopyalayın. Komut dosyasını ve örneği derleyin (.mqh dosyası da bunlarla birlikte derlenir).
Bağlı bir terminalin herhangi bir grafiğinde NewsCalendarExport'u bir kez çalıştırın. Experts sekmesinde şunu görmelisiniz: "OK: kış ve yaz aylarında aynı saat".
EA'nıza aşağıdaki kodu ekleyin:
C++
#include <NewsFilter.mqh>
CNewsFilter news;
int OnInit()
{
news.Init(_Symbol, 30, 30); // her olaydan önce ve sonra 30 dakikalık aralığı engeller
return(INIT_SUCCEEDED);
}
void OnTick()
{
if(news.IsBlocked())
return; // haber sırasında yeni giriş yok
// ... giriş mantığınız ...
}
Her zamanki gibi geriye dönük test yapın. Günlük, sembol için kaç olayın yüklendiğini gösterir.
SCRIPT GİRİŞLERİ
Olayları şuradan dışa aktar: dışa aktarımın başlangıç tarihi.
Ayrıca N gün sonrasına kadar planlanmış olayları da dışa aktarın: yaklaşan olayları içerir.
Para birimleri: virgülle ayrılmış liste (varsayılan USD, EUR, GBP, JPY, CAD, AUD, NZD, CHF).
Önem: sadece yüksek etki veya orta + yüksek etki.
Broker sunucusu DST kuralı: ABD kuralı (varsayılan, sunucu = New York + 7 saat, çoğu GMT+2/+3 broker), AB kuralı veya DST yok.
Dosya adı: Terminal\Common\Files klasöründe saklanır.
CNewsFilter::Init(symbol, minutesBefore, minutesAfter, mediumToo = false, csvFile = "NewsCalendar.csv")
NOTLAR VE SINIRLAMALAR
FTMO (GMT+2 / GMT+3, ABD DST kuralı) ve IC Markets AB'de test edilmiştir. Örnek çıktı: 5645 olay dışa aktarıldı, bunların 1897'si bir saat kaydırıldı; düzeltme öncesinde en sık görülen USD saati kışın 16:30, yazın 15:30 iken, düzeltme sonrasında her iki mevsimde de 15:30 oldu.
Kendi kendine kontrol hala farklı kış ve yaz saatleri gösteriyorsa, başka bir "Broker sunucusu DST kuralı" deneyin.
MQL5 takvim geçmişi sınırlıdır ve terminale bağlıdır; benim terminalimde 2020'den itibaren başlar, bu nedenle daha eski geriye dönük testlerde herhangi bir olay bulunmayacaktır.
Yalnızca sembolün para birimleri kullanılır; bu nedenle endeksler ve emtialar için hangi olayların geçerli olacağına kotasyon para birimi karar verir.
Uzak ve bulut ajanları Common\Files klasörünü okuyamaz; yerel ajanlarla optimize edin.
Bazı para birimlerinin MQL5 takviminde çok az sayıda yüksek etkili olayı vardır (örneğin AUD). Bunlar için "Orta + yüksek etki" seçeneğini kullanın.
Filtre, EA'nıza yalnızca NE ZAMAN yeni işlemler açmamasını gerektiğini bildirir. Halihazırda açık olan pozisyonların yönetimi EA'nıza bağlıdır.
Yeni olayları dahil etmek için komut dosyasını zaman zaman yeniden çalıştırın.
BUNU ENTEGRE ETMEK İÇİN YARDIMA MI İHTİYACINIZ VAR?
Eğer bir yazılımcı değilseniz ve bu haber filtresini mevcut EA'nıza entegre etmek istiyorsanız veya prop firm değerlendirmelerinize özel olarak uyarlanmış risk yönetimi kurallarına ihtiyacınız varsa, MQL5 Freelance profilim üzerinden doğrudan benimle iletişime geçin. Sizin için bunu kodlamaktan memnuniyet duyarım!