Fan sayfamıza katılın
Öyleyse bir link gönderin -
başkalarının da faydalanmasını sağlayın
- Görüntülemeler:
- 35
- Derecelendirme:
- Yayınlandı:
-
Bu koda dayalı bir robota veya göstergeye mi ihtiyacınız var? Freelance üzerinden sipariş edin Freelance'e git
TimeGMT() Fonksiyonu
İstemci terminalin çalıştığı bilgisayardaki yerel saate göre DST anahtarını dikkate alarak hesaplanan GMT'yi döndürür. Fonksiyonun 2 çeşidi vardır.
Parametreler olmadan çağrı
datetime TimeGMT();
MqlDateTime türü parametre ile çağrı
datetime TimeGMT( MqlDateTime& dt_struct // Yapı türünde değişken );
Bununla birlikte, strateji test cihazında test sırasında ,TimeGMT() her zaman TimeTradeServer() simüle edilmiş sunucu saatine eşittir.
TimeGMT Kütüphanesi
Bu kütüphane, strateji test cihazında test sırasında gerçek GMT'yi sağlamak için TimeGMT() işlevini düzeltir. Kütüphane, TimeGMT'nin iki sürümü için global API kancalarını (makro ikamesi yoluyla) yükleyecektir.
class CTimeGMT { public: static datetime TimeGMT(void); static datetime TimeGMT(MqlDateTime &dt_struct); }
Kullanım:
Strateji test cihazında Haber filtresi veya herhangi bir zaman kısıtlaması kullanan bir uzman danışmanı test etmeden önce, bu satırı kodun başına ekleyin, ardından kaynağı MetaEditor'da yeniden derleyin.
#include "TimeGMT.mqh"
- İsteğe bağlı olarak, hata ayıklama mesajlarını görmek için bu satırı #include yönergesinden önce ekleyin:
#define PRINT_GMT_DETAILS Uzman danışman veya gösterge için başka hiçbir değişiklik veya herhangi bir işlev çağrısı gerekmez.
- TimeGMT yalnızca strateji test cihazı algılanırsa düzeltilir.
- Düzeltme, strateji test cihazında seçilen sembol üzerinde çalışır.
- Hafta sonları veya Noel tatillerinde hesaplama hatası yok.
- Strateji test cihazında düşük ek yük ve hızlı hesaplama süresi
Aracı ofsetinin yeniden hesaplanması yalnızca uzman danışmanın başlangıcında ve her Pazar ve Pazartesi gece yarısı gerçekleşir. Hesaplanan broker ofseti bellekte önbelleğe alınacak ve TimeGMT'ye yapılacak sonraki çağrılarda kullanılacaktır.
Sunucu TZ/DST Tahmini İçin Sembol Seçme
Varsayılan olarak, kütüphane sunucunun zaman dilimi ofsetini tahmin etmek için XAUUSD sembolünü arayacak ve yükleyecektir. XAUUSD, ABD DST ve AB DST programlarının senkronize olmadığı haftalarda (Mart ve Ekim sonu) daha güvenilir sonuçlar sağlayabilir (özellikle AB DST programını takip eden brokerlar için). İsteğe bağlı olarak, aracınız ABD DST programını takip ediyorsa veya hiç program yoksa, grafik sembolünü kullanmak da iyidir. XAUUSD yerine mevcut grafiğin sembolünü kullanmak için CTimeGMT::SetUsingGoldSymbol() işlevini 'false' ile çağırın.
Brokerinizin gün ışığı (DST) programını belirlemek için bu komut dosyasını kullanabilirsiniz https://www.mql5.com/tr/code/48650
//+------------------------------------------------------------------+ //| Tahmin etmek için XAUUSD (Altın) sembolünü kullanma seçeneğini ayarlar | //| sunucunun TZ/DST'si H1 teklif geçmişinin analiziyle belirlenir. | //| TRUE : Gold sembolünü ara ve yükle (varsayılan davranış). | //| FALSE : geçerli grafiğin sembolünü kullanın. | //+------------------------------------------------------------------+ void CTimeGMT::SetUsingGoldSymbol(const bool enabled = true);
Not:
XAUUSD'nin Forex'ten bir saat sonra başlamasının bir yan etkisi olarak, bu nedenle dst anahtarları strateji test cihazında bir saat sonra gerçekleşecektir.
TimeGMT_TestEA
Strateji test cihazındaki kütüphaneyi keşfetmek için, strateji test cihazında bir demo uzman danışman test edilir
bunlar, strateji test cihazında uzman danışmanı çalıştırmanın sonuçlarıdır:
AUDUSD,M1 (ICMarketsSC-Demo): 1 minutes OHLC ticks generating AUDUSD,M1: testing of Experts\TimeGMT_TestEA.ex5 from 2023.03.05 00:00 to 2023.05.01 00:00 started with inputs: timer_hours=24 2023.03.05 00:00:00 TimeCurrent() = Sun, 2023.03.05 00:00:00 | TimeTradeServer() = Sun, 2023.03.05 00:00:00 | TimeGMT() = Sat, 2023.03.04 22:00:00 | BrokerOffset = 7200 (GMT+2) 2023.03.06 00:00:00 TimeCurrent() = Mon, 2023.03.06 00:00:00 | TimeTradeServer() = Mon, 2023.03.06 00:00:00 | TimeGMT() = Sun, 2023.03.05 22:00:00 | BrokerOffset = 7200 (GMT+2) 2023.03.07 00:00:00 TimeCurrent() = Tue, 2023.03.07 00:00:00 | TimeTradeServer() = Tue, 2023.03.07 00:00:00 | TimeGMT() = Mon, 2023.03.06 22:00:00 | BrokerOffset = 7200 (GMT+2) 2023.03.08 00:00:00 TimeCurrent() = Wed, 2023.03.08 00:00:00 | TimeTradeServer() = Wed, 2023.03.08 00:00:00 | TimeGMT() = Tue, 2023.03.07 22:00:00 | BrokerOffset = 7200 (GMT+2) 2023.03.09 00:00:00 TimeCurrent() = Thu, 2023.03.09 00:00:00 | TimeTradeServer() = Thu, 2023.03.09 00:00:00 | TimeGMT() = Wed, 2023.03.08 22:00:00 | BrokerOffset = 7200 (GMT+2) 2023.03.10 00:00:00 TimeCurrent() = Fri, 2023.03.10 00:00:00 | TimeTradeServer() = Fri, 2023.03.10 00:00:00 | TimeGMT() = Thu, 2023.03.09 22:00:00 | BrokerOffset = 7200 (GMT+2) 2023.03.11 00:00:00 TimeCurrent() = Fri, 2023.03.10 23:56:59 | TimeTradeServer() = Sat, 2023.03.11 00:00:00 | TimeGMT() = Fri, 2023.03.10 22:00:00 | BrokerOffset = 7200 (GMT+2) 2023.03.12 00:00:00 TimeCurrent() = Fri, 2023.03.10 23:56:59 | TimeTradeServer() = Sun, 2023.03.12 00:00:00 | TimeGMT() = Sat, 2023.03.11 22:00:00 | BrokerOffset = 7200 (GMT+2) 2023.03.13 00:00:00 TimeCurrent() = Mon, 2023.03.13 00:00:00 | TimeTradeServer() = Mon, 2023.03.13 00:00:00 | TimeGMT() = Sun, 2023.03.12 21:00:00 | BrokerOffset = 10800 (GMT+3) 2023.03.14 00:00:00 TimeCurrent() = Tue, 2023.03.14 00:00:00 | TimeTradeServer() = Tue, 2023.03.14 00:00:00 | TimeGMT() = Mon, 2023.03.13 21:00:00 | BrokerOffset = 10800 (GMT+3) 2023.03.15 00:00:00 TimeCurrent() = Wed, 2023.03.15 00:00:00 | TimeTradeServer() = Wed, 2023.03.15 00:00:00 | TimeGMT() = Tue, 2023.03.14 21:00:00 | BrokerOffset = 10800 (GMT+3) 2023.03.16 00:00:00 TimeCurrent() = Thu, 2023.03.16 00:00:00 | TimeTradeServer() = Thu, 2023.03.16 00:00:00 | TimeGMT() = Wed, 2023.03.15 21:00:00 | BrokerOffset = 10800 (GMT+3) 2023.03.17 00:00:00 TimeCurrent() = Fri, 2023.03.17 00:00:00 | TimeTradeServer() = Fri, 2023.03.17 00:00:00 | TimeGMT() = Thu, 2023.03.16 21:00:00 | BrokerOffset = 10800 (GMT+3) 2023.03.18 00:00:00 TimeCurrent() = Fri, 2023.03.17 23:56:59 | TimeTradeServer() = Sat, 2023.03.18 00:00:00 | TimeGMT() = Fri, 2023.03.17 21:00:00 | BrokerOffset = 10800 (GMT+3) 2023.03.19 00:00:00 TimeCurrent() = Fri, 2023.03.17 23:56:59 | TimeTradeServer() = Sun, 2023.03.19 00:00:00 | TimeGMT() = Sat, 2023.03.18 21:00:00 | BrokerOffset = 10800 (GMT+3)
Güncellemeler:
2024.03.30 - v.1.25: Sabit komisyoncu GMT ofseti. Şu anda kütüphane, en doğru başlangıç zamanlarına sahip olduğu için H1 çubuklarını yalnızca GOLD grafiğinde taramaktadır.
2024.04.09 - v.1.33 : GMT+0 brokerlerinde Noel tatili sırasında broker GMT ofsetinin hesaplanmasındaki olası sorun düzeltildi.
2024.04.12 - v.1.35 : Altın ticareti sağlamayan birkaç brokerde broker GMT ofsetinin hesaplanmasındaki sorun düzeltildi.
2024.07.07 - v.1.36 : Bazı brokerlerde ALTIN sembolünün doğru algılanmasındaki sorun düzeltildi.
2024.10.21 - v.1.40 : EURUSD sembolüne geri dönüş ile ALTIN sembolünün algılanması iyileştirildi.
2024.10.26 - v.1.47 : Daha iyi hata işleme ve hata ayıklama kodu eklendi. HistoryBrokerOffset() yöntemi TimeServerGMTOffset() olarak yeniden adlandırıldı.
2024.10.28 - v.1.49 : Makro gövdesi içindeki parametrelerin çift değerlendirilmesini önlemek için zamanla ilgili tüm makrolar fonksiyonlara dönüştürüldü. Diğer satırlarda daha fazla kod temizliği.
2024.10.30 - v.1.50 : Bazı brokerlarda XAUEUR tekliflerinden GMT ofsetinin yanlış tahmin edilmesi sorunu düzeltildi.
2024.11.23 - v.1.55 : Sunucunun TZ/DST tahmini için Altın sembolünün varsayılan yüklemesini kapatma seçeneği eklendi. Bunun yerine mevcut grafiğin sembolünü kullanmak için CTimeGMT::SetUsingGoldSymbol() işlevini 'false' ile çağırın.
2024.12.12 - v.1.60 : HistoryServerGMTOffset() fonksiyonunun performansı iyileştirildi ve diğer küçük kod değişiklikleri yapıldı.
2024.12.14 - v.1.61 : FindSymbol() fonksiyonunun performansı iyileştirildi.
2024.12.17 - v.1.62 : HistoryServerGMTOffset() fonksiyonunda daha fazla optimizasyon.
2024.12.24 - v.1.63 : HistoryServerGMTOffset() işlevindeki olası sorun düzeltildi.
Broker'ın Zaman Dilimi ve DST Takvimi
Eşgüdümlü Evrensel Zaman (UTC) olarak da adlandırılan Greenwich Ortalama Zamanı (GMT), zaman için resmi dünya referansı olarak kullanılır. Zaman dilimlerinin genellikle UTC - 3h veya GMT - 3h şeklinde gösterildiğini görürsünüz. Bu örnekte (-3h), o zaman diliminin UTC veya GMT'den üç saat geride olduğunu ifade eder. UTC+3h veya GMT +3h ise o zaman diliminin UTC veya GMT'den üç saat ileride olduğunu ifade eder. Yerel saatimiz ile GMT (UTC) arasındaki zaman farkına GMT ofseti denir.
Forex piyasası Pazar günü New York saatiyle 17:00'de açılır (kışın GMT-5:00, yazın GMT-4:00) ve Cuma günü aynı saatte kapanır. NY Sun, 17:00'deki Forex piyasası başlangıç saati, kışın Sun , 10:00 PM UTC 'ye (ve yaz aylarında Sun, 09:00 PM UTC'ye) karşılık gelir. Forex Cuma günü, kışın 10:00 UTC' de (ve yazın 09:00 UTC'de) kapanır. Altın ve gümüş spot piyasası genellikle bir saat sonra başlar. link
Her forex brokerinin kendi saat dilimi ve sunucu saati vardır. Bu nedenle, işlem haftasının başlangıcı (H1 mumları) brokerler arasında değişkendir veSan Francisco'daki (GMT-8)brokerleriçinSun, 02:00 PM sunucu saatindenSidney'deki (GMT + 11) brokerler içinPzt, 09:00 AM sunucu saatinekadardeğişebilir.İşlem haftasının sonu daCuma, 02:00 PM sunucu saatinden, Cumartesi, 09:00 AM sunucu saatine kadardeğişir.
Her broker kendi Yaz saati uygulamasını (DST) seçmekte özgürdür. Ve DST'nin o saat dilimi için aynı olması gerekmez. Bazen AB saat dilimi ve AB DST yerine ABD DST kullanarak karıştırırlar. ABD programını takip etmeyen brokerlar için, haftanın başlangıcı (ve sonu) için sunucu saati yıl boyunca aynı broker için +/- bir saat değişir. Bu değişikliklerin üstesinden gelmekiçin , broker ofsetinin yeniden hesaplanması haftalık olarak yapılmalıdır, böylece broker üzerindeki DST değişiklikleri zamanında tespit edilebilir.
Bu nedenle +2 (ve ABD programında yazın +3) saat dilimi kullanmak, her hafta mumların Pazartesi gece yarısı başladığı ve haftada beş D1 mum olduğu ve günlük bir mumun (ve H4) başlangıcının yeni bir FX gününün başlangıcı olduğu anlamına gelir. Her hafta Cumartesi gece yarısından hemen önce sona erer. Cumartesi ve Pazar günleri mum yoktur.Basitçe, bu sunucularda zaman her zaman New York'tan 7 saat ileridedir ve NY+7 olarak gösterilir. Açık ara en yaygın ayar budur, ancak daha az yaygın olan birçok varyasyon vardır.
Gerçek GMT HesaplamaDetayları
TimeGMT() çağrısı kütüphane tarafından yakalandığında, önce strateji test cihazında çalışıp çalışmadığını kontrol eder, ardından orijinal işlevi döndürür. Strateji test cihazı tespit edilirse, kod broker ofsetini hesaplamaya başlar (daha sonra bakınız), daha sonra dönüş değeri basitçe bu ofsetin istemci terminalindeki ticaret sunucusunun geçerli saatinden çıkarılmasının sonucudur.
true GMT = TimeTradeServer() - ServerGMTOffset (of the current trading week)
'ServerGMTOffset'in kendisi, H1 kotasyon geçmişinin analizi ile bilinen iki zaman arasındaki fark olarak tahmin edilebilir:
1) İşlem haftasının ilk çubuğunun GOLD grafiğinde göründüğü zaman (FstBarWk),
2) New York'ta Güneş 18:00'de GOLD işlemlerinin başlama saati için karşılık gelen UTC zamanı .
ServerGMTOffset = FstBarWk - UTC (NY Sun, 18:00)
BrokerOffset'in hesaplanmasında Carl Schreiber tarafından Zamanla Başa Çıkma (2) fonksiyonlarında yayınlanan algoritmanın optimize edilmiş bir modifikasyonu kullanılır
https://www.timeanddate.com/time/change/usa/new-york adresine göre
- New York'ta DST (yaz saati) Mart ayının ikinci Pazar günü yerel saatle 02:00'de başlar. Saat GMT-4'e göre bir saat ileri alınacaktır, dolayısıyla NY Sun, 18:00 için karşılık gelen UTC saati (Sun, 22:00 UTC) olacaktır.
- Kasım ayının ilk Pazar günü yerel saatle 02:00'de New York'ta DST sona erdiğinden (kış saati), saat GMT-5'e göre bir saat geri alınacaktır, dolayısıyla NY Sun, 18:00 için karşılık gelen UTC saati (Sun, 23:00 UTC) olacaktır.
Örneğin, GOLD grafiğindeki FstBarWk Pzt, 01:00'de başlıyorsa ve bu çubukta New York'ta kış mevsimiyse , BrokerOffset şu şekilde hesaplanabilir:
ServerGMTOffset = (FstBarWK, Mon, 01:00) – (Sun, 23:00 UTC) = 2 hours (GMT+2)
ve eğer New York'ta yaz mevsimiyse BrokerOffset:
ServerGMTOffset = (FstBarWK, Mon, 01:00) – (Sun, 22:00 UTC) = 3 hours (GMT+3)
Seans Saatlerinin Broker'ın Sunucu Saatine Dönüştürülmesi
Yatırımcılar, belirli piyasaların ne zaman açılacağını veya kapanacağını belirlemek amacıyla oturum saatlerini ilgili sunucu saatine dönüştürmek için TimeGMT() işlevini kullanabilir. Örneğin, bir tüccar Asya (Tokyo) seansında işlem yapmak istiyorsa, işlem zamanlarını buna göre ayarlamalıdır
1] Brokerin ticaret sunucusunun ofsetini belirleyin
int ServerGMTOffset = TimeTradeServer() - TimeGMT();
2] Belirli piyasaların yerel saatlerini ilgili brokerin sunucu saatine dönüştürün
datetime Server_time = Tokyo_time – Tokyo_GMTOffset + ServerGMTOffset Denklemdeki ikinci terim (xxx_GMTOffset), hedef saat dilimi şu anda yaz saati uygulamasındaysa +1 saat artırılmalıdır.
Strateji test cihazında test sırasında, TimeGMT () her zaman TimeTradeServer () simüle edilmiş sunucu saatine eşittir, bu nedenle oturum sürelerinin dönüştürülmesiyanlış olur. Bu kütüphane, gerçek GMT'yi sağlamak için TimeGMT () işlevini düzeltir, böylece dönüştürülen oturum süreleri strateji test cihazında test sırasında doğru hale gelir.
MetaQuotes Ltd tarafından İngilizceden çevrilmiştir.
Orijinal kod: https://www.mql5.com/en/code/48291
Simple Bar Timer
Bir sonraki çubuk gelene kadar kalan süreyi görüntülemek için bir komut dosyasıdır.
Haberler VLine
Kod, haber bülteni noktalarında grafik üzerinde dikey çizgiler görüntüler.
MA mass cloud
Farklı periyotlardaki hareketli ortalamaların kütlelerinin oluşturduğu bulutlar.
Multi-Williams Yüzde Aralığı Yön Göstergesi
Multi-Williams Yüzde Aralığı trend yönü göstergesi.
