Alım-satım robotlarını ücretsiz olarak nasıl indirebileceğinizi izleyin
Bizi Twitter ü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
Komut dosyaları

TimeServerDaylightSavings - MetaTrader 5 için komut dosyası

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

Bu kod, yerel bilgisayar için yalnızca TimeDaylightSavings ( ) sağlayan yerleşik olanlar arasında eksik olan TimeServerDaylightSavings () işlevini tanıtır. Ek olarak, ekli başlık mqh dosyası, özellikle aracınızın genel olarak DST anahtarlarını kullanıp kullanmadığını bilmenizi sağlayan, sunucuya bağlı zamanla ilgili diğer bazı yararlı işlevleri içerir.

Tüm bunlar, brokerinizden gelen fiyat tekliflerinin geçmişinin ampirik analizine dayanmaktadır. Tüm fikir algotrading kitabında Yaz saati uygulaması (DST) ile ilgili bölümde açıklanmıştır. Kısaca, yöntem hafta açılış saatlerinin istatistiklerini analiz eder ve brokerinizin GMT ofsetlerini çıkarır. Ofset istatistiklerindeki iki farklı maksimum değer, bitişik saatlerle eşleşiyorsa, büyük olasılıkla standart ("kış") ve gün ışığından yararlanma ("yaz") zamanına karşılık gelir.

Aslında bu senaryo, kitapta sunulan senaryonun geliştirilmiş ve genişletilmiş bir versiyonudur. Özellikle, Ekim 2024'ten sonraki sürümler önemli bir hata düzeltmesi içermektedir: haftalık ticaretin açılış saatleri, ABD saat dilimine göre DST geçişlerinden etkilenen ABD pazarı tarafından tespit edilir (EST, UTC-5, standart kış saati <--> EDT, UTC-4, yaz saati uygulaması), bu nedenle tüm yıl boyunca sürekli bir doğal zaman akışı elde etmek için ABD DST'nin etkisini ortadan kaldırmak önemlidir - düzeltmede yapılan budur. Tüm övgüler amrali'ye aittir.

DST geçişi nedeniyle tırnak içinde hafta açılış saati değişikliklerine örnek


Lütfen Kuzey ve Güney Yarımkürelerde zaman dilimlerinin ters yönde ayarlandığını unutmayın: Kuzey Yarımkürede "ilkbaharda" (Mart veya Nisan) 1 saat eklenir ve "sonbaharda" (Ekim veya Kasım) çıkarılır, Güney Yarımkürede ise tam tersi olur (çünkü tüm mevsimler değiştirilmiştir).

Analizin spesifikliği nedeniyle, genellikle EURUSD olan en likit Forex ticker'ı için kodun çalıştırılması önerilir.

İşte API:

// Sunucu saat dilimi ve DST geçerli bilgileri
struct ServerTimeZone  // tarih analizine göre haftalık çalışma saatleri
{
   int offsetGMT;      // geçerli hafta için UTC/GMT'ye göre saniye cinsinden zaman dilimi ofseti
   int offsetDST;      // Saniye cinsinden DST düzeltmesi (MQL5 uyarınca offsetGMT'ye dahil edilmiştir)
   bool supportDST;    // DST değişiklikleri tırnak içinde algılanır
};

// H1 teklif geçmişinden sunucu saat dilimini ve DST modunu tahmin edin
ServerTimeZone TimeServerZone(
  const datetime srvtime = 0,     // varsayılan olarak geçerli zaman, ancak geçmişte bir an belirtilebilir
  const int threshold = THRESHOLD,
  const double lookupYears = 0.0, // varsayılan olarak, mevcut tüm çubuklar, aksi takdirde 3 yıl yeterli görünüyor
  const string symbol = NULL)     // varsayılan olarak, geçerli grafiğin sembolü

// Tahmini sunucu zamanı DST modu düzeltmesi (saniye cinsinden)
int TimeServerDaylightSavings(const datetime srvtime = 0,
  const int threshold = THRESHOLD, const double lookupYears = 0.0, const string symbol = NULL);

// Tahmini sunucu saat dilimi ofseti (saniye cinsinden)
int TimeServerGMTOffsetHistory(const datetime srvtime = 0,
  const int threshold = THRESHOLD, const double lookupYears = 0.0, const string symbol = NULL);

// Sunucunun DST etkin olup olmadığını tahmin et (true/false)
bool TimeServerDaylightSavingsSupported(const datetime srvtime = 0,
  const int threshold = THRESHOLD, const double lookupYears = 0.0, const string symbol = NULL);

// Ticaret sunucusu için TimeGMTOffset() fonksiyonunun benzeri, saniye cinsinden fark
int TimeServerGMTOffset(); // TimeGMT() - TimeTradeServer()

TimeServerDaylightSavings(), TimeServerGMTOffsetHistory ( ), TimeServerDaylightSavingsSupported () işlevleri sadece TimeServerZone() için sarmalayıcılardır, bu nedenle birden fazla özelliğe ihtiyacınız varsa, daha sonra olanı kullanmak ve struct ServerTimeZone'dan değerleri okumak tercih edilir.

Tüm bu fonksiyonlar, karşılık gelen özelliği almak istediğiniz sunucu zamanını 1. argüman olarak alır (şu anda veya geçmişte). Sunucu zamanı 0 olarak bırakılırsa (varsayılan olarak), sonuç mevcut an için döndürülür.

2. argüman eşiği, algoritmaların hassasiyetini ayarlamanıza olanak tanır. Varsayılan olarak, karar vermek için gerekli istatistiklerin yılın dörtte biri olan 52/4'tür (tatillerden önceki / sonraki kısa haftaların olası bir müdahalesi olmadan zaman dilimini tespit etmek). Öte yandan, bu ayarlar geçici saat dilimi değişikliklerinin anında tespit edilmesini önler (brokeriniz bir noktada bunu yapmaya karar verirse). Algoritmaların herhangi bir değişikliği mümkün olan en kısa sürede algılamasını sağlamak için eşiği 0 olarak ayarlamak isteyebilirsiniz.

TimeServerGMTOffset() işlevi geçmiş analizini kullanmaz, bunun yerine ofseti doğrudan MQL5 işlevleri aracılığıyla hesaplar ( TimeGMT() - TimeTradeServer() gibi).

Lütfen bu işlevin MQL5'in yerleşik TimeGMTOffset() işleviyle aynı ofset gösterimini kullandığını, yani GMT+3 gibi pozitif zaman dilimlerinin -10800 gibi negatif ofsetlerle gösterildiğini ve bunun tersinin de geçerli olduğunu unutmayın. Bu gösterim JaveScript gibi diğer bazı programlama dilleri tarafından kullanılır, ancak pozitif zaman dilimlerini pozitif ofsetlerle ve negatif zaman dilimlerini negatif ofsetlerle gösteren başka diller de vardır. Algoritmalarınızı dikkatlice kontrol edin.

Örneğin, test komut dosyası elde edilen tüm verileri günlüğe aktarır:

1 ~ Built-in functions ~
TimeLocal()=2024.10.05 00:39:01 / ok
TimeCurrent()=2024.10.05 00:38:59 / ok
TimeTradeServer()=2024.10.05 00:39:01 / ok
TimeGMT()=2024.10.04 21:39:01 / ok
TimeGMTOffset()=-10800 / ok
TimeDaylightSavings()=0 / ok
2 ~ Add-on over built-in functions ~
TimeServerGMTOffset()=-10800 / ok
3 ~ Estimation of server TZ with DST based on week opening hours in history ~
TimeServerDaylightSavings()=-3600 / ok
    [offsetGMT] [offsetDST] [supportDST]
[0]      -10800       -3600         true

Bu durumda, sunucunun şu anda DST modunda olduğu, ancak yerel bilgisayarın olmadığı tespit edildi.

Lütfen yerel bilgisayarın ve sunucunun sistem saatlerinin aynı saat diliminde olsalar bile normalde biraz farklı zamanlar (saniyeler ve hatta dakikalar) gösterebileceğini unutmayın. Ayrıca, yerleşik TimeTradeServer() işlevinin yapay bir tarih zamanı döndürdüğünü unutmayın: bu, sunucunun saat hassasiyetine sahip saatidir, ancak yerel saatten saat içi kesirleri miras alır. Bu, MQL5'te saat dilimleri arasındaki dönüşümleri basitleştirmek için yapılır - TimeLocal(), TimeGMT() de "yerel formatta" ve ticaret sunucusu saatinde döndürülür.

Analiz edilen verilerin ayrıntılı çıktısını önişlemci yönergesi ile etkinleştirebilirsiniz:

#define  PRINT_DST_DETAILS

kodunuza include etmeden önce yerleştirilmelidir:

#include "TimeServerDST.mqh"

İşte günlükteki ayrıntılara bir örnek:

Got 20023 H1 bars, ~834 days
Week opening hours stats:
30  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0 83 54  0
Time Zone changes (UTC±X before/after weekstart):
            [weekstart]    [before] [DSTb] [after] [DSTa]
[0] 2021.07.25 00:00:00 -2147483648  false      -1  false
[1] 2021.11.08 00:00:00           0   true       0  false
[2] 2022.03.14 00:00:00           0  false       0   true
[3] 2022.11.07 00:00:00           0   true       0  false
[4] 2023.03.13 00:00:00           0  false       0   true
[5] 2023.11.06 00:00:00           0   true       0  false
[6] 2024.03.11 00:00:00           0  false       2  false
3 different timezones detected in quotes, 1 DST candidates
Server time offset: UTC+2 STD
TimeServerDaylightSavings()=-3600 / ok

Lütfen betiği kendi ortamlarınızda çalıştırmaktan ve ortaya çıkan günlükleri tartışmaya göndermekten çekinmeyin.


Güncellemeler

2024.10.10 - hata düzeltmesi: ABD DST anahtarları (çalışma saatleri istatistiklerine müdahale eden) ana analizden önce zaman çizelgesinden çıkarıldı.

2024.10.27 - ilgilenilen sunucu zamanı ve minimum haftalık istatistik eşiği tüm fonksiyonlar için argüman olarak eklendi; TimeServerGMTOffsetEmpiric(), TimeServerGMTOffsetHistory() olarak yeniden adlandırıldı.

2024.10.29 - istenen zamanı arama süresine dahil etmek için küçük hata düzeltmesi.

2024.10.30 - TimeZoneChange dizisindeki DST düzeltildi; arama artık belirtilmişse srvtime parametresinden gerçekleştiriliyor.

2024.11.01 - ABD DST ve AB DST programlarının senkronize olmadığı haftalarda daha güvenilir sonuçlar sağlayabilen, değerli metallere uygulandığında hesaplamaların otomatik olarak ayarlanması eklendi.

2024.11.04 - DST anahtarının açık/kapalı olduğunun çevrimiçi tespiti iyileştirildi.

2024.11.07 - göstergeler veya ekonomik olaylar için geçmişe yönelik toplu talepler için zaman dilimi/DST değişikliklerinin önbelleğe alınması eklendi.

2024.11.08 - küçük kod yeniden düzenlemesi ile önbellekleme performansı optimize edildi.

2024.11.16 - amrali tarafından metallerden çıkarılan zaman damgaları için 1 saatlik ayarlama.

2024.11.17 - amrali tarafından yeniden düzenleme ve düzeltmeler: hafta sonları çevrimiçi istekler için önbelleğin yeniden oluşturulması ortadan kaldırıldı, hafta sonları (olası DST geçişi ile) TZ değişikliklerinin tespiti için 48 saat bekleme süresi eklendi, Pazar 00:00 saat dilimleri için bir sınır olarak kullanıldı (haftanın 1. çubuğu yerine).

2024.11.20 - varsayılan eşik 1 olarak değiştirildi (saat dilimi değişikliklerinin hızlı tespiti ile tatil sonrası gibi standart olmayan haftalarda yanlış pozitiflerin ortadan kaldırılması arasında bir denge); saat dilimi ofsetleri ve DST dahil olmak üzere saat biçimlendirmesi için yeni işlevler eklendi (TimeZoneFmt.mqh dosyasına bakın); diğer küçük iyileştirmeler.




MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal kod: https://www.mql5.com/en/code/52557

Simplest Logger class for MetaTrader 5 Simplest Logger class for MetaTrader 5

MetaTrader 5'te seviyeler, mesaj formatı, alt dizelerdeki filtreleri dahil etme ve hariç tutma desteği ile günlük kaydı için en basit sınıf.

Waddah Attar Patlaması Waddah Attar Patlaması

Gösterge, piyasanın ne zaman daha hızlı hareket etmeye başladığını gösterir. Ek olarak, tüccara bir ticareti ne zaman alacağını, satacağını ve çıkacağını söyler.

StepMA_Line StepMA_Line

StepMA göstergesi, hareketli ortalama olarak tasarlanmıştır.

VininI WPR FO VininI WPR FO

Ters Fisher Dönüşümü kullanılarak Larry Williams'ın Yüzde Aralığı düzeltilmiştir.