Diskussion zum Artikel "Umgang mit Zeit (Teil 2): Die Funktionen" - Seite 3

 

Hallo @Carl Schreiber,

Toller Artikel, der sehr hilfreich ist. Ich möchte Ihnen nur sagen, was ich nach der Verwendung Ihres Codes gefunden habe.

Ich benutze den Broker eightcap und habe versucht, ein einfaches Skript zu verwenden, um die tatsächliche Zeit im jeweiligen Land anzuzeigen, und habe festgestellt, dass die Zeit in Tokio um 1 Stunde von der tatsächlichen Zeit abweicht. Hier ist das Skript, das ich verwende,

void OnStart()
  {
   bool isTimeSet = setBokerOffset();
   if(!isTimeSet)
     {
      Alert("setBokerOffset failed");
      return;
     }

   Alert("+++++++++++++++");
   checkTimeOffset(TimeCurrent());
   datetime tGMT  = TimeCurrent() + OffsetBroker.actOffset;    // GMT
   datetime tNY   = tGMT - (NYShift+DST_USD);                  // Zeit in New York
   datetime tLon  = tGMT - (LondonShift+DST_EUR);              // Zeit in London
   datetime tSyd  = tGMT - (SidneyShift+DST_AUD);              // Zeit in Sidney
   datetime tMosc = tGMT - (MoskwaShift+DST_RUS);              // Zeit in Moskau
   datetime tTok  = tGMT - (TokyoShift);                       // Zeit in Tokio - keine Sommerzeit

   Alert("time NY: ", tNY);
   Alert("time Lon: ", tLon);
   Alert("time Syd: ", tSyd);
   Alert("time Tok: ", tTok);
  }

den Code habe ich aus dem Artikel kopiert und eingefügt, und ich gebe einfach den Wert zurück. Ich glaube nicht, dass das Problem aus, wie ich den Code verwendet, weil die andere Sitzung korrekt ist.

Carl Schreiber
Carl Schreiber
  • 2023.03.22
  • www.mql5.com
Trader's profile
 
Luandre Ezra #:

Hallo @Carl Schreiber,

Toller Artikel, der sehr hilfreich ist. Ich möchte Ihnen nur sagen, was ich nach der Verwendung Ihres Codes gefunden habe.

Ich benutze den Broker eightcap und habe versucht, ein einfaches Skript zu verwenden, um die tatsächliche Zeit im jeweiligen Land anzuzeigen, und habe festgestellt, dass die Zeit in Tokio um 1 Stunde von der tatsächlichen Zeit abweicht. Hier ist das Skript, das ich verwende,

den Code habe ich aus dem Artikel kopiert und eingefügt, und ich gebe einfach den Wert zurück. Ich glaube nicht, dass das Problem aus, wie ich den Code verwendet, weil die andere Sitzung korrekt ist.

Von GMT (=UTC) ist der Zeitunterschied 0900 Stunden (von https://www.worldtimeserver.com/curren t_time_in_JP.aspx?city=Tokyo)

= 9*-3600=32400 Sekunden:

Und das ist eingestellt:

#define  TokyoShift   -32400                           // immer 9h
Current local time in Tokyo, Japan
  • www.worldtimeserver.com
Current local time and date in Tokyo, Japan from a trusted independent resource
 
Carl Schreiber #:

Von GMT (=UTC) aus beträgt der Zeitunterschied 0900 Stunden (von https://www.worldtimeserver.com/curren t_time_in_JP.aspx?city=Tokyo)

= 9*-3600=32400 Sekunden:

Und das ist eingestellt:

Fehler, den ich gemacht habe. Es ist nicht Tokio, sondern Sydney.


 
Es könnte sein, dass die Berechnung der australischen Sommerzeitumstellung fehlerhaft ist - ich werde das überprüfen, danke.
Time Zones - WorldTimeServer.com
  • www.worldtimeserver.com
A list of all worldwide time zones with abbreviation and name. Click on a time zone to see more details.
 

Australian First Sunday of October at 02:00 to First Sunday of April at 02:00

Australian DST 2010 start 2010.10.03 - end 2010.04.04
Australian DST 2011 start 2011.10.02 - end 2011.04.03
Australian DST 2012 start 2012.10.07 - end 2012.04.01
Australian DST 2013 start 2013.10.06 - end 2013.04.07
Australian DST 2014 start 2014.10.05 - end 2014.04.06
Australian DST 2015 start 2015.10.04 - end 2015.04.05
Australian DST 2016 start 2016.10.02 - end 2016.04.03
Australian DST 2017 start 2017.10.01 - end 2017.04.02
Australian DST 2018 start 2018.10.07 - end 2018.04.01
Australian DST 2019 start 2019.10.06 - end 2019.04.07
Australian DST 2020 start 2020.10.04 - end 2020.04.05
Australian DST 2021 start 2021.10.03 - end 2021.04.04
Australian DST 2022 start 2022.10.02 - end 2022.04.03
Australian DST 2023 start 2023.10.01 - end 2023.04.02
Australian DST 2024 start 2024.10.06 - end 2024.04.07
Australian DST 2025 start 2025.10.05 - end 2025.04.06
Australian DST 2026 start 2026.10.04 - end 2026.04.05
Australian DST 2027 start 2027.10.03 - Ende 2027.04.04
Australische Sommerzeit 2028 Beginn 2028.10.01 - Ende 2028.04.02
Australische Sommerzeit 2029 Beginn 2029.10.07 - Ende 2029.04.01

Australia & New Zealand End DST
Australia & New Zealand End DST
  • www.timeanddate.com
People in New Zealand and parts of Australia will get an additional hour to enjoy when Daylight Saving Time (DST) ends on Sunday, April 2, 2023.
 

Ich habe das Problem gefunden: Ich habe eine Prüfung übersehen:

Am Anfang der Funktion void checkTimeOffset(datetime tB) habe ich einen Haken gesetzt:

if(tB < nxtSwitch_USD && tB < nxtSwitch_EUR)
      return;  

Und diese musste ich ändern in:

if(tB < nxtSwitch_USD && tB < nxtSwitch_EUR && tB < nxtSwitch_AUD)
      return;  

Ich werde es aktualisieren ...

 
Carl Schreiber Scheck übersehen:

Am Anfang der Funktion void checkTimeOffset(datetime tB) habe ich einen Haken gesetzt:

Und das musste ich ändern in:

Ich werde es aktualisieren ...

Hallo Carl, leider hat die Änderung des entsprechenden Codes das Problem nicht behoben. Ich habe auch festgestellt, dass sich die Moskauer Zeit von der Weltzeit unterscheidet.


 

Die Version von DealingWithTime.mqh v. 1.01 des Artikels „Umgang mit der Zeit (Teil 2): Die Funktionen“ ( https://www.mql5.com/en/articles/9929 ) funktionierte nicht mehr, da MQ die geändert hat Verhalten der CopyTime() -Funktion einige Zeit nach Veröffentlichung dieses Artikels. Jetzt gibt diese Funktion keine zukünftigen Zeitwerte mehr zurück, wenn diese größer sind als TimeCurrent(), das für die Parameter start_time und/oder stop_time angegeben wurde. Stattdessen wird die Öffnungszeit des letzten, aktuellen Balkens als größtmöglicher Wert zurückgegeben.

Da auf diese Weise unter anderem das Ende der FX-Session ermittelt wurde, um den Offset der Broker-Zeit zu ermitteln, führt dies nun zu falschen Werten!

Diese Berechnung wurde in Version 2.03 geändert. Diese neue Version ist jetzt in der CodeBase hier erhältlich: https://www.mql5.com/en/code/45287.

Aber auch die Berechnung der Zeitumstellung wurde komplett geändert, sodass nun auch die komplizierten Zeiten der Zeitumstellung von Sydney (Australien) zurück in die 70er Jahre abgedeckt sind.

Anbei ist auch die Tabelle DST 1975 - 2030.xlsx als Zip-Datei mit allen Zeitänderungen seit den 70er Jahren, damit jeder die korrekte Funktionsweise der Formeln überprüfen kann, hier eine Beispielserie der Tabelle:

Am 01.01.1982 ist in den USA Winterzeit (DST==0) und die nächste Umstellung erfolgt am 25.04.1982, dem letzten (25. des Monats) Sonntag im April (4). Die Tabelle ist bereits nach der geografischen Zeitzone (Spalte A), dann nach der Zeitzone des Jahres (Spalte L, spr=spring, aut=autumn,) und schließlich nach dem Abfragedatum (Spalte C) sortiert. Die Tabelle kann automatisch durch den enthaltenen EA erstellt werden (ein Skript kann nicht im Debug-Modus ausgeführt werden). Test_DST 2.mq5, wenn Sie es im Debug-Modus ausführen und die Zeilen des Journalprotokolls im Debugger kopieren und in ein Tabellenprogramm einfügen; Das Zelltrennzeichen wäre das Leerzeichen.

Außerdem gibt es jetzt eine neue, einfache Funktion SecTillClose() , die Ihnen die verbleibende Zeit in Sekunden (die Zeitwährung von MQ) bis zur Schließung des Forex-Marktes angibt – ohne CopyTime() . Dies ist für diejenigen interessant, die ihre Positionen vor dem Wochenende schließen oder nicht in einem definierten Zeitraum vor dem Wochenende eine neue Position eröffnen möchten.

Der enthaltene Indikator DealingWithTime_TestIndi.mq5 zeigt als Kommentar auf dem Chart nicht nur die Sommer-/Winterzeit von Europa, den USA und Australien (Sydney), sondern auch die aktuelle Zeit und die Zeitverschiebung verschiedener Städte. Hier finden Sie weiters eine Tabelle mit verschiedenen Ortszeiten von Großstädten zum Beispiel für einen Vergleich mit: https://www.timeanddate.com/worldclock/. Sie können die Werte somit jederzeit überprüfen. Dieser Indikator zeigt auch, wie diese Werte ermittelt und verwendet werden (was wird von was subtrahiert oder addiert), so dass es einfacher ist, ihn selbst zu verwenden – Kopieren und Einfügen, die schnellste Form der Programmierung.

Die letzten beiden Zeilen zeigen außerdem die letzte Sekunde der aktuellen FX-Sitzung und die verbleibende Zeit in Stunden (ist einfacher zu beurteilen) und in Sekunden. Wenn in New York freitags um 17:00 Uhr Ortszeit die FX-Sitzung geschlossen ist, gibt es keine gültige Bar mit einer Öffnungszeit um 17:00 Uhr New Yorker Zeit. Daher wird in dieser Funktion 1 Sekunde abgezogen, um die letzte gültige Öffnungszeit des letzten Balkens in der Maklerzeit zu erhalten. Einige Broker beenden ihre FX-Sitzung jedoch einige Minuten früher, indem sie keine Preise mehr bereitstellen und keine Handelsaufträge mehr annehmen.


Dealing with Time (Part 2): The Functions
Dealing with Time (Part 2): The Functions
  • www.mql5.com
Determing the broker offset and GMT automatically. Instead of asking the support of your broker, from whom you will probably receive an insufficient answer (who would be willing to explain a missing hour), we simply look ourselves how they time their prices in the weeks of the time changes — but not cumbersome by hand, we let a program do it — why do we have a PC after all.
 

Die Version von DealingWithTime.mqh v. 1.01 aus dem Artikel Dealing with Time (Part 2): Die Funktionen ( https://www.mql5.com/de/articles/9929 ) funktioniert nicht mehr, weil MQ das Verhalten der Funktion CopyTime() einige Zeit nach Veröffentlichung dieses Artikels geändert hat. Jetzt gibt diese Funktion keine zukünftigen Zeitwerte mehr zurück, wenn sie größer sind als TimeCurrent(), das für die Parameter start_time und/oder stop_time angegeben wurde. Stattdessen wird die Eröffnungszeit des letzten, aktuellen Balkens als größtmöglicher Wert zurückgegeben.

Da auf diese Weise das Ende der FX-Session ermittelt wurde, um den Broker-Zeitversatz zu bestimmen, führt dies nun zu falschen Werten!

Diese Berechnung wurde in der Version 2.03 geändert. Diese Version ist nun in der CodeBase hier verfügbar: https://www.mql5.com/de/code/45287.

Aber auch die Berechnung der Zeitumstellung wurde komplett geändert, so dass nun auch die komplizierten Zeiten der Zeitumstellung von Sydney (Australien) zurück in die 70er Jahre abgedeckt sind.

Ebenfalls angehängt ist die Tabelle DST 1975 - 2030.xlsx als zip-Datei mit allen Zeitumstellungen seit den 70er Jahren, damit jeder die korrekte Funktionsweise der Formeln überprüfen kann, hier eine Beispielreihe der Tabelle:

Der 1. Januar 1982 ist Standardzeit in den USA (Sommerzeit==0) und die nächste Umstellung ist am 25. April 1982, dem letzten (25. des Monats) Sonntag im April (4). Die Tabelle ist bereits nach der geografischen Zeitzone (Spalte A), dann nach der Zeitzone des Jahres (Spalte L, spr=Frühling, aut=Herbst,) und schließlich nach dem Abfragedatum (Spalte C) sortiert. Die Tabelle kann automatisch von dem mitgelieferten EA erstellt werden (ein Skript kann nicht im Debug-Modus ausgeführt werden). Test_DST 2.mq5 wenn Sie es im Debug-Modus ausführen und die Zeilen des Journalprotokolls im Debugger kopieren und in eine Tabellenkalkulation einfügen; Das Zelltrennzeichen wäre das Leerzeichen.

Außerdem gibt es jetzt eine neue, einfache Funktion SecTillClose(), die Ihnen die verbleibende Zeit in Sekunden (die Zeitwährung von MQ) angibt, bis der Forex-Markt geschlossen wird - ohne CopyTime(). Dies ist für diejenigen interessant, die ihre Positionen vor dem Wochenende schließen wollen oder in einem bestimmten Zeitraum vor dem Wochenende keine neue Position eröffnen wollen.

Der mitgelieferte Indikator DealingWithTime_TestIndi.mq5 zeigt als Kommentar zum Chart nicht nur die Sommerzeit in Europa, den USA und Australien (Sydney) an, sondern auch die aktuelle Zeit und den Zeitunterschied verschiedener Städte. Hier finden Sie eine Tabelle mit verschiedenen Ortszeiten von Großstädten zum Vergleich: https://www.timeanddate.com/worldclock/. Sie können also jederzeit die Werte überprüfen. Dieser Indikator zeigt auch an, wie diese Werte ermittelt und verwendet werden (was wird wovon subtrahiert oder addiert), was die eigene Anwendung erleichtert - copy and paste, die schnellste Form der Programmierung.

Die letzten beiden Zeilen zeigen auch die letzte Sekunde der aktuellen Devisensitzung und die verbleibende Zeit in Stunden (was leichter zu beurteilen ist) und in Sekunden. Wenn in New York die Devisensitzung an einem Freitag um 17.00 Uhr Ortszeit schließt, ist um 17.00 Uhr New Yorker Zeit kein gültiger Barren geöffnet. Daher wird in dieser Funktion 1 Sekunde abgezogen, um die letzte gültige Öffnungszeit des letzten Balkens in der Brokerzeit zu erhalten. Einige Broker beenden ihre Devisensitzung jedoch ein paar Minuten früher, indem sie keine Kurse mehr stellen und keine Handelsaufträge mehr annehmen.


Dealing with Time (Part 2): The Functions
Dealing with Time (Part 2): The Functions
  • www.mql5.com
Determing the broker offset and GMT automatically. Instead of asking the support of your broker, from whom you will probably receive an insufficient answer (who would be willing to explain a missing hour), we simply look ourselves how they time their prices in the weeks of the time changes — but not cumbersome by hand, we let a program do it — why do we have a PC after all.
 

Die Version von DealingWithTime.mqh v. 1.01 aus dem Artikel "Managing the Timetable (Part 2): Funktionen" ( https://www.mql5.com/de/articles/9929 ) funktioniert nicht mehr, weil MetaQuotes das Verhalten von CopyTime() geändert hat und nun einige Zeit nach der Veröffentlichung dieses Artikels nicht mehr funktioniert. Jetzt gibt diese Funktion keine zukünftigen Zeitwerte mehr zurück, wenn sie größer sind als die TimeCurrent(), die für die Parameter start_time und/oder stop_time angegeben wurde. Stattdessen wird die Eröffnungszeit des letzten aktuellen Balkens als größtmöglicher Wert zurückgegeben.

Da das Ende der FX-Session auf diese Weise ermittelt wurde, um den Zeitversatz des Brokers zu bestimmen, führt dies nun zu falschen Werten!

Diese Berechnung wurde in der Version 2.03 geändert. Diese Version ist nun auf CodeBase hier verfügbar: https://www.mql5.com/en/code/45287.

Aber auch die Zeitumstellungsberechnung wurde komplett geändert, so dass die komplizierten Zeitumstellungszeiten von Sydney (Australien) bis in die 1970er Jahre nun abgedeckt sind.

Ebenfalls angehängt ist die Tabelle DST 1975 - 2030.xlsx als zip-Datei mit allen Zeitumstellungen seit den 1970er Jahren, damit jeder die korrekte Funktionsweise der Formeln überprüfen kann, hier einige Beispiele der Tabelle:

Der 1. Januar 1982 ist Standardzeit in den USA (DST==0) und die nächste Umstellung ist der 25. April 1982, der letzte (25. des Monats) Sonntag im April (4). Die Tabelle ist bereits nach der geografischen Zeitzone (Spalte A), dann nach der Zeitzone des Jahres (Spalte L, spr=Frühling, aut=Herbst) und schließlich nach dem Datum der Abfrage (Spalte C) sortiert. Die Tabelle kann automatisch von dem mitgelieferten EA erstellt werden (ein Skript kann nicht im Debug-Modus ausgeführt werden). Test_DST 2.mq5 wenn Sie es im Debug-Modus ausführen und die Journalzeilen in den Debugger kopieren und in eine Tabellenkalkulation einfügen; Das Zelltrennzeichen wäre das Leerzeichen.

Außerdem gibt es jetzt eine einfache neue Funktion, SecTillClose(), die Ihnen die verbleibende Zeit in Sekunden (die MetaQuotes-Zeitwährung) bis zum Schließen des Devisenmarktes angibt, ohne CopyTime(). Dies ist für diejenigen interessant, die ihre Positionen vor dem Wochenende schließen oder keine neue Position in einem bestimmten Zeitraum vor dem Wochenende eröffnen wollen.

Der mitgelieferte Indikator DealingWithTime_TestIndi.mq5 zeigt als Kommentar zum Chart nicht nur die Sommerzeit in Europa, USA und Australien (Sydney) an, sondern auch die aktuelle Zeit und den Zeitunterschied verschiedener Städte. Hier finden Sie eine Tabelle mit den verschiedenen Ortszeiten der wichtigsten Städte zum Vergleich: https://www.timeanddate.com/worldclock/. Sie können also jederzeit die Werte überprüfen. Dieser Indikator zeigt auch an, wie diese Werte ermittelt und verwendet werden (was Sie subtrahieren oder addieren), was die Verwendung einfach macht: Kopieren und Einfügen, die schnellste Art der Programmierung.

Die letzten beiden Zeilen zeigen auch die letzte Sekunde der aktuellen Devisensitzung und die verbleibende Zeit in Stunden (was leichter zu beurteilen ist) und Sekunden. Wenn die Devisensitzung in New York an einem Freitag um 17.00 Uhr Ortszeit schließt, ist um 17.00 Uhr New Yorker Zeit kein gültiger Barren geöffnet. Daher wird in dieser Funktion 1 Sekunde abgezogen, um die letzte gültige Öffnungszeit des letzten Balkens in der Zeit des Brokers zu erhalten. Einige Broker beenden ihre Devisensitzung jedoch einige Minuten früher und stellen keine Kurse mehr zur Verfügung oder nehmen keine Handelsaufträge mehr an.