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

 
Wir sind bereit, allen unseren Fuchshändlern die aktuellen Werte zur Anzeige zu bringen
 
Wir sind bereit, den tatsächlichen Wert für alle unsere Füchse Handel einzuführen, um anzuzeigen
 

Hallo,

So wie ich den Artikel verstehe, sollte die Funktion "setBokerOffset ()" auch im Strategietester funktionieren, tut sie aber nicht.

void OnTick()
  {
//---
   bool isTimeSet = setBokerOffset();
   if(!isTimeSet)
     {
      Alert("setBokerOffset failed");
      return;
     }
  }
array out of range in 'DealingWithTime.mqh' (201,21)


Ist die "Die Alternative über Input-Variablen" der einzige Weg, um korrekte Zeiten im Strategietester zu erhalten?

 
Nauris Zukas Strategietester funktionieren, aber das tut sie nicht.


Ist die "Alternative über Input-Variablen" der einzige Weg, um korrekte Zeiten im Strategietester zu erhalten?

Ich vermute, dass der Strategietester die Anführungszeichen nicht bekommen hat und dann prev. CopyTime() fehlgeschlagen ist. Prüfen Sie, ob die angeforderten und benötigten Daten bereits lokal verfügbar sind.
 
Carl Schreiber #:
Ich vermute, dass der Strategietester die Anführungszeichen nicht erhalten hat und dann prev. CopyTime() fehlgeschlagen ist. Prüfen Sie, ob die angeforderten und benötigten Daten bereits lokal verfügbar sind.

Ok, ich werde CopyTime() genauer beobachten und versuchen, das Problem zu lösen.

Und danke, sehr nützlicher Artikel!

 
Guter Artikel. Es stellt sich jedoch ein Problem: Wie kann man feststellen, dass ein Broker/Händler von Winter auf Sommer umstellt, ohne den technischen Support zu kontaktieren?
 
Nikita Chernyshov # :
Guter Artikel. Es stellt sich jedoch ein Problem: Wie kann man feststellen, dass ein Makler/Händler von Winter auf Sommer umstellt, ohne den technischen Support zu kontaktieren?
  1. Warum nicht fragen?
  2. Die Software weiß, wann in den USA und der EU Sommer-/Winterzeit ist, und berechnet daraus den Offset des Brokers.
 
Nikita Chernyshov #:
Guter Artikel. Es stellt sich jedoch ein Problem: Wie kann man feststellen, dass ein Broker/Händler von Winter auf Sommer umstellt, ohne den technischen Support zu kontaktieren?


.
Документация по MQL5: Дата и время / TimeDaylightSavings
Документация по MQL5: Дата и время / TimeDaylightSavings
  • www.mql5.com
TimeDaylightSavings - Дата и время - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Alexey Viktorov #:


.

ja, aber es hängt von den Zeiteinstellungen des Benutzers ab, was nicht sehr gut funktioniert. Außerdem muss es in einem Testgerät modelliert werden.

 
Carl Schreiber #:
  1. Warum nicht fragen?
  2. Die Software weiß, wann in den USA und in der EU Sommer-/Winterzeit ist, und berechnet daraus den Broker-Offset.

1. Weil der Support nicht immer korrekte Informationen gibt. Sie haben selbst darauf hingewiesen, dass es sich um einen Alpari-Händler handelt. + Es ist ein großer Aufwand, von jedem Händler die Umstellung zu erfahren. Denn dann kann man keine gute Lösung erstellen, da ich nicht weiß, mit wem der Endverbraucher diskutiert.

2. Naja, irgendwie schon, aber wenn der Händler nicht von Winter auf Sommer und zurück umschaltet, dann kommt es zu seltsamen Berechnungen.

Ich habe versucht, Ihre Bibliothek ein wenig zu modifizieren, aber offenbar ist etwas schief gegangen. Ich dachte, dass der Code dazu führen sollte, dass der Expert Advisor automatisch die GMT-Zeit erkennt und entsprechend der GMT handelt, nicht entsprechend dem Server des Brokers. Ich bin mir nicht sicher, ob der Code optimal ist, aber die Lösung scheint zu funktionieren. Allerdings gibt es bei den Händlern, die die Zeit nicht ändern, einige falsche Berechnungen.