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

 

Neuer Artikel Umgang mit Zeit (Teil 2): Die Funktionen :

Automatische Ermittlung des Broker-Offsets und GMT. Anstatt den Support Ihres Brokers zu fragen, von dem Sie wahrscheinlich eine unzureichende Antwort erhalten werden (wer würde schon bereit sein, eine fehlende Stunde zu erklären), schauen wir einfach selbst, welchen Zeitstempel Ihr Broker den Kursen in den Wochen der Zeitumstellung geben — aber nicht umständlich von Hand, das lassen wir ein Programm machen, wozu haben wir ja schließlich einen PC.

Vor den Funktionen werden die benötigten Variablen als globale Variablen in der Include-Datei DealingWithTime.mqh und nach der Makro-Substitution) deklariert:

//--- global variables for time switches
int      DST_USD=0,                             // act time shift USD
         DST_EUR=0,                             // act time shift EU
         DST_AUD=0,                             // act time shift Australia
         DST_RUS=0;                             // D'2014.10.26 02:00', -10800,

Diesen Variablen DST_USD, DST_EUR,.. werden die aktuelle Zeitverschiebung in den USA, der EU,... zugewiesen. Sie werden von unseren Funktionen aktualisiert und gesetzt. In der Winterzeit, die ja die Normalzeit ist, sind sie Null: die Zeit wird in diesem Zeitraum nicht verschoben.

Danach folgen die Variablen mit dem nächsten Zeitpunkt der Zeitumstellung. Sie werden hauptsächlich benötigt, um zu wissen, wann eine neue Berechnung erforderlich ist, um die CPU-Ressourcen zu schonen:

datetime nxtSwitch_USD,                         // date of next switch
         nxtSwitch_EUR,                         // date of next switch
         nxtSwitch_AUD,                         // date of next switch
         nxtSwitch_RUB = D'2014.10.26 02:00';   // Russia s different :(

Auf die russische Situation werden wir später in diesem Artikel eingehen.

Diese Struktur und ihre globale Variable sind das Herzstück von allem. :)

struct _OffsetBroker
  {
   int   USwinEUwin,                            // US=Winter & EU=Winter
         USsumEUsum,                            // US=Summer & EU=Summer
         USsumEUwin,                            // US=Summer & EU=Winter
         actOffset,                             // actual time offset of the broker
         secFxWiWi,                             // duration of FX in sec
         secFxSuSu,                             // duration of FX in sec
         secFxSuWi,                             // duration of FX in sec
         actSecFX;                              // actual duration of FX in sec
   bool  set;                                   // are all set?
  };
_OffsetBroker OffsetBroker;

Wir werden die Broker-Offsets für die drei relevanten Zeiträume und die Dauer des Devisenmarktes in diesen Zeiträumen zuweisen, sowohl für den tatsächlichen Wert als auch für eine einfache Kontrolle, ob die Werte zugewiesen wurden. Die globale Variable heißt OffsetBroker, wir werden ihr mehrmals begegnen.

Autor: Carl Schreiber

 

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.