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

 
Nikita Chernyshov # :

1. Weil der Support nicht immer korrekte Informationen gibt. Sie haben selbst auf den Alpari-Händler hingewiesen. + es ist teuer: von jedem Händler die Umstellung zu erfahren. Weil man dann keine gute Lösung schaffen kann, weil ich nicht weiß, mit wem der Endverbraucher diskutiert.

2. Naja, irgendwie schon, aber wenn ein Händler nicht von Winter auf Sommer und zurück umschaltet, dann wird die Rechnung ein bisschen komisch.

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.

  1. Was haben Sie geändert?
  2. Können Sie mir einen Broker (Link) nennen, bei dem es nicht funktioniert?
  3. Ich habe es gerade wieder benutzt:
     for (i=start; i<rates_total && ! IsStopped (); i++) {
          checkTimeOffset( time[i]);
          tGMT           = time[i] + OffsetBroker.actOffset; // GMT 
    
    }


     
    Carl Schreiber #:
    1. Was haben Sie geändert?
    2. Können Sie mir einen Broker (Link) nennen, bei dem es nicht funktioniert?
    3. Ich habe es gerade wieder benutzt:


      1.

      - Ich habe nicht auf EURUSD fixiert, wir nehmen das Paar, wo immer der EA platziert ist.

      - Ich habe die Zeit auch nicht festgelegt, ich ziehe einfach 1 Jahr vom aktuellen Jahr ab.

         datetime setDate = StringToTime(IntegerToString(NowYear()-1)+".06.21 14:00");
      
         nextDST("EUR", setDate);                        // EUR: Sommerzeit ermitteln und nächste Änderung einstellen

      Und ich übergebe die Parameter an bool setBokerOffset(string symbol, int &USwinEUwin1, int &USsumEUsum1, int &USsumEUwin1) um diesen Block dynamisch zu erhalten.

      input int   USwinEUwin=  -7200;    // US=Winter & EU=Winter
      input int   USsumEUsum= -10800;    // US=Sommer & EU=Sommer
      input int   USsumEUwin=  -7200;    // US=Sommer & EU=Winter

      2. alpha forex. Ich kann in lis geben Daten von Demo-Konto, so dass Sie überprüfen können, ohne etwas zu öffnen. Die Sache ist, dass der Händler nicht von Winter zu Sommer wechseln, und der Unterschied mit GMT noch auftritt.

      3. ein wenig unklar, wie und wo das Design verwendet wird.

       

      3. Немного не понял, как и где использована конструкция.

      In einem Indikator ist das der obere Teil der Schleife durch alle Balken.

       
      Im Allgemeinen habe ich auf Greenwich-Zeit umgestellt. Den Zeitpunkt der Umstellung auf die Winterzeit definiere ich als die Differenz zwischen der Serverzeit und der Greenwich Mean Time. Nur muss diese Differenz für jeden Broker von mir selbst berechnet und in die Konstanten des Expert Advisors eingetragen werden. Gerade wenn die Nutzer unterschiedliche Schichten, Broker, Börsen haben und die Zeit des Übergangs zur Winterzeit nicht gleich ist, ist die Greenwich-Zeit für alle gleich.
       
      Valeriy Yastremskiy #:
      Im Allgemeinen habe ich auf Greenwich-Zeit umgestellt. Den Zeitpunkt der Umstellung auf die Winterzeit definiere ich als die Differenz zwischen der Serverzeit und der Greenwich Mean Time. Nur muss diese Differenz für jeden Broker von mir selbst berechnet und in die Konstanten des Expert Advisors eingetragen werden. Gerade wenn die Nutzer unterschiedliche Schichten, Broker und Börsen haben und der Zeitpunkt der Umstellung auf die Winterzeit nicht derselbe ist, ist die Greenwich-Zeit für alle gleich.

      Wie genau haben Sie das gemacht? Wie werden die Konstanten berechnet?

       
      Nikita Chernyshov #:

      Wie genau haben Sie das gemacht? Wie werden die Konstanten berechnet?

      Greenwich-Zeit minus timecarrent, mit der Umstellung auf Winterzeit wird es um eine Stunde ändern. Ich habe einmal die Zeit des Arbeitsbeginns und -endes geschrieben, mit dem Kunden die Differenz in Stunde +3 und +2, Broker +3, +2, -6 Greenwich-Zeit))))). Und es war notwendig, die Arbeit zu einer bestimmten Zeit zu beginnen, die gleiche für alle. Greenwich Mean Time ist die gleiche, aber Server und lokale Zeit sind unterschiedlich. Ich habe den Code aus dem Lehrbuch von Fedoseyev neu geschrieben).

      Im Allgemeinen besteht das Problem darin, dass es keine Standardfunktion für die Differenz zwischen Serverzeit und Greenwich-Zeit gibt. Aber sie wird gezählt. Ein weiteres Problem besteht darin, dass die Ortszeit auch einen Übergang zur Winterzeit haben kann, und zwar zu einem anderen Zeitpunkt als der Übergang des Brokers.

      // TimeGMT()-TimeCurrent(); ein Wert im Sommer, ein anderer im Winter.
      // TimeGMTOffset() =  TimeGMT() - TimeLocal(); серверным временем нет штатной функции
      
      
      
      
      #property strict
      //+------------------------------------------------------------------+ class CTradeTimeGMT{ protected: int StartTime; int EndTime; int GMTShiftTest; int GMTShiftCur; public: void Init(int StartHour, int StartMinute, int EndHour, int EndMinute, int GMTshift){ StartTime=3600*StartHour+60*StartMinute; EndTime=3600*EndHour+60*EndMinute; GMTShiftCur=GMTshift; GMTShiftTest=GMTshift+int((TimeGMTOffset())/3600); //Alert(TimeGMTOffset()); if(MQLInfoInteger( MQL_TESTER))GMTShiftCur=GMTShiftTest; } bool Check(int GMTshift){ int CurTime=(int)((TimeGMT()+(GMTShiftCur*3600))%86400); if(StartTime<EndTime){ return(CurTime>=StartTime && CurTime<EndTime); } else{ return(CurTime>=StartTime || CurTime<EndTime); } } };
       
      Valeriy Yastremskiy #:

      Greenwich-Zeit minus timecarrent, mit dem Übergang zur Winterzeit wird es um eine Stunde ändern. Ich schrieb einmal die Zeit des Beginns und des Endes der Arbeit, mit dem Client die Differenz in der Stunde +3 und +2, Makler +3, +2, -6 Greenwich-Zeit)))). Und es war notwendig, die Arbeit zu einer bestimmten Zeit zu beginnen, die für alle gleich ist. Greenwich Mean Time ist die gleiche, aber Server und lokale Zeit sind unterschiedlich. Der Code aus dem Lehrbuch von Fedoseyev wurde geändert).

      Im Allgemeinen besteht das Problem darin, dass es keine Standardfunktion für die Differenz zwischen Serverzeit und Greenwich-Zeit gibt. Sie wird aber gezählt. Ein weiteres Problem besteht darin, dass die Ortszeit auch einen Übergang zur Winterzeit haben kann, und zwar zu einem anderen Zeitpunkt als der Übergang des Brokers.

      Danke, ja, diese Lösung ist in meinem Kopf, es ist +- so implementiert. Aber Sie wies auf den Schmerz im letzten Absatz)

       

      Hallo @Carl Schreiber Frohes neues Jahr.

      Ich weiß, dass dieser Artikel schon eine Weile auf dem Markt ist, aber ich habe ihn gerade erst gefunden. Vielen Dank, dass Sie diese Arbeit geteilt haben. Ich muss noch einige Tests damit machen, um sie wirklich zu verstehen. Aber ich habe erst einmal eine einfache Frage:

      Ich kann sehen, dass Sie eine andere Wochentagsberechnung haben, anstatt sich auf die MqlDateTime struct .day_of_week zu verlassen. Warum verwenden Sie diese andere Berechnungsmethode, gibt es einen Genauigkeitsvorteil? Oder ist es nur, um die Konvertierung in die struct zu vermeiden?

       
      Ich habe angefangen, einige Zeit-Basics wie HoD() zu programmieren, und dann habe ich mich selbst herausgefordert, auch andere Dinge zu programmieren, da es einfacher aussieht, DoW(..) zu schreiben, anstatt die Zeit einer Struktur zuzuweisen und auch andere Werte abzufragen - fühlen Sie sich frei, zu verwenden, was Sie mögen.
       

      Dieser Code berechnet automatisch die Sommerzeit für europäische und US-Broker:

      https://www.mql5.com/de/code/27860

      //+------------------------------------------------------------------+
      //| Berechnung der Sommerzeitumstellung in London, UK |
      //| Validated to https://www.timeanddate.com/time/change/uk/london   |
      //+------------------------------------------------------------------+
      void DST_Europe(int iYear, datetime &dst_start, datetime &dst_end)
        {
         datetime dt1,dt2;
         MqlDateTime st1,st2;
         /* Die britische Sommerzeit beginnt um 01:00 Uhr Ortszeit am letzten Sonntag im März
       und endet um 02:00 Uhr Ortszeit am letzten Sonntag im Oktober */
         dt1=StringToTime((string)iYear+".03.31 01:00");
         dt2=StringToTime((string)iYear+".10.31 02:00");
         TimeToStruct(dt1,st1);
         TimeToStruct(dt2,st2);
         dst_start=dt1-(st1.day_of_week*86400);
         dst_end  =dt2-(st2.day_of_week*86400);
        }
      //+------------------------------------------------------------------+
      //| Berechnung der Sommerzeitumstellung in New York, USA |
      //| Validiert nach https://www.timeanddate.com/time/change/usa/new-york
      //+------------------------------------------------------------------+
      void DST_USA(int iYear, datetime &dst_start, datetime &dst_end)
        {
         datetime dt1,dt2;
         MqlDateTime st1,st2;
         /* Die US-Sommerzeit beginnt um 02:00 Uhr Ortszeit am zweiten Sonntag im März
       und endet um 02:00 Uhr Ortszeit am ersten Sonntag im November */
         dt1=StringToTime((string)iYear+".03.14 02:00");
         dt2=StringToTime((string)iYear+".11.07 02:00");
         TimeToStruct(dt1,st1);
         TimeToStruct(dt2,st2);
         dst_start=dt1-(st1.day_of_week*86400);
         dst_end  =dt2-(st2.day_of_week*86400);
        }
      //+------------------------------------------------------------------+
      //||
      //+------------------------------------------------------------------+
      void OnStart()
        {
         datetime dst_start,dst_end;
         dst_start=dst_end=0;
      
      //--- In der Europäischen Union beginnt die Sommerzeit am letzten Sonntag im
      //--- März und endet am letzten Sonntag im Oktober. |
      
         Print("========= European Summer Time (DST) =========");
         for(int year=2010; year<=2029; year++)
           {
            DST_Europe(year,dst_start,dst_end);
            Print("DST starts on ",dst_start," and ends on ",dst_end);
           }
      
      //--- In den Vereinigten Staaten beginnt die Sommerzeit am zweiten Sonntag im Monat.
      //--- März und endet am ersten Sonntag im November. |
      
         Print("========= American Summer Time (DST) =========");
         for(int year=2010; year<=2029; year++)
           {
            DST_USA(year,dst_start,dst_end);
            Print("DST starts on ",dst_start," and ends on ",dst_end);
           }
        }
      //+------------------------------------------------------------------+
      
      /*
      output:
      ========= Europäische Sommerzeit (DST) =========
      DST beginnt am 28.03.2010 01:00:00 und endet am 31.10.2010 02:00:00
      DST beginnt am 27.03.2011 01:00:00 und endet am 30.10.2011 02:00:00 DST beginnt am 25.03.2012 01:00:00 und endet am 28.10.2012 02:00:00 ========= DST beginnt am 31.03.2013 01:00:00 und endet am 31.10.2012 02:00:00.10.30 02:00:00
      Die Sommerzeit beginnt am 2012.03.25 01:00:00 und endet am 2012.10.28 02:00:00
      Die Sommerzeit beginnt am 2013.03.31 01:00:00 und endet am 2013.10.27 02:00:00
      Die Sommerzeit beginnt am 2014.03.30 01:00:00 und endet am 2014.10.26 02:00:00
      Die Sommerzeit beginnt am 2015.03.29 01:00:00 und endet am 2015.10.25 02:00:00
      Die Sommerzeit beginnt am 2016.03.27 01:00:00 und endet am 2016.10.30 02:00:00
      Sommerzeit beginnt am 2017.03.26 01:00:00 und endet am 2017.10.29 02:00:00
      Sommerzeit beginnt am 2018.03.25 01:00:00 und endet am 2018.10.28 02:00:00
      Sommerzeit beginnt am 2019.03.31 01:00:00 und endet am 2019.10.27 02:00:00
      Sommerzeit beginnt am 2020.03.29 01:00:00 und endet am 2020.10.25 02:00:00
      Sommerzeit beginnt am 2021.03.28 01:00:00 und endet am 2021.10.31 02:00:00
      Die Sommerzeit beginnt am 2022.03.27 01:00:00 und endet am 2022.10.30 02:00:00
      Die Sommerzeit beginnt am 2023.03.26 01:00:00 und endet am 2023.10.29 02:00:00
      Die Sommerzeit beginnt am 2024.03.31 01:00:00 und endet am 2024.10.27 02:00:00
      Die Sommerzeit beginnt am 2025.03.30 01:00:00 und endet am 2025.10.26 02:00:00
      Die Sommerzeit beginnt am 2026.03.29 01:00:00 und endet am 2026.10.25 02:00:00
      Die Sommerzeit beginnt am 2027.03.28 01:00:00 und endet am 2027.10.31 02:00:00
      Die Sommerzeit beginnt am 2028.03.26 01:00:00 und endet am 2028.10.29 02:00:00
      Die Sommerzeit beginnt am 2029.03.25 01:00:00 und endet am 2029.10.28 02:00:00
      ========= Amerikanische Sommerzeit (DST) =========
      Die Sommerzeit beginnt am 14.03.2010 02:00:00 und endet am 07.11.2010 02:00:00
      Die Sommerzeit beginnt am 13.03.2011 02:00:00 und endet am 06.11.2011 02:00:00.11.06 02:00:00
      Die Sommerzeit beginnt am 2012.03.11 02:00:00 und endet am 2012.11.04 02:00:00
      Die Sommerzeit beginnt am 2013.03.10 02:00:00 und endet am 2013.11.03 02:00:00
      Die Sommerzeit beginnt am 2014.03.09 02:00:00 und endet am 2014.11.02 02:00:00
      Die Sommerzeit beginnt am 2015.03.08 02:00:00 und endet am 2015.11.01 02:00:00
      Die Sommerzeit beginnt am 2016.03.13 02:00:00 und endet am 2016.11.06 02:00:00
      Die Sommerzeit beginnt am 2017.03.12 02:00:00 und endet am 2017.11.05 02:00:00
      Die Sommerzeit beginnt am 2018.03.11 02:00:00 und endet am 2018.11.04 02:00:00
      Die Sommerzeit beginnt am 2019.03.10 02:00:00 und endet am 2019.11.03 02:00:00
      Die Sommerzeit beginnt am 2020.03.08 02:00:00 und endet am 2020.11.01 02:00:00
      Die Sommerzeit beginnt am 2021.03.14 02:00:00 und endet am 2021.11.07 02:00:00
      Die Sommerzeit beginnt am 2022.03.13 02:00:00 und endet am 2022.11.06 02:00:00
      Sommerzeit beginnt am 2023.03.12 02:00:00 und endet am 2023.11.05 02:00:00
      Sommerzeit beginnt am 2024.03.10 02:00:00 und endet am 2024.11.03 02:00:00
      Die Sommerzeit beginnt am 2025.03.09 02:00:00 und endet am 2025.11.02 02:00:00
      Die Sommerzeit beginnt am 2026.03.08 02:00:00 und endet am 2026.11.01 02:00:00
      Die Sommerzeit beginnt am 2027.03.14 02:00:00 und endet am 2027.11.07 02:00:00
      Sommerzeit beginnt am 2028.03.12 02:00:00 und endet am 2028.11.05 02:00:00
      Sommerzeit beginnt am 2029.03.11 02:00:00 und endet am 2029.11.04 02:00:00
      */
      

      Der obige Code wurde in Forex Market Hours https://www.mql5.com/de/code/27771 verwendet , um die Umstellung auf die Sommerzeit zu berechnen.

      Ähnliche Funktionen können für andere Regionen der Welt erstellt werden.

      Daylight changes (summer time)
      Daylight changes (summer time)
      • www.mql5.com
      Compute the daylight saving time changes (start/end of the summer time).