Expert Advisors • Indicators • Scripts • Libraries

MQL.RobotFX.org is the biggest collection of MetaTrader expert advisors (MT5 & MT4), indicators, scripts and libraries that can be used to improve trading results, minimize risks or simply automate trading tasks

MetaTrader 5 Libraries | YZ Summer Time

MetaTrader Experts, Indicators, Scripts and Libraries

Checking a date for belonging to winter or summer time. The function determines time (summer or winter).

Shift to winter time is made at night of the last October Sunday, and shift to summer time is made at night of the last Sunday of March.

There is not more reliable way of figuring summer and winter time.

The code was developed for news debugging.

//
// The algorithm was improved on 2014.10.09
//
// YURAZ yzh@mail.ru
// function determines summer or winter time
// shift to winter time is made at night of the last October Sunday
// and shift to summer time is made at night of the last Sunday of March
// there is not more reliable way of figuring summer and winter time
// return 0 - summer time
// return 1 - winter time
//
int YZ_summer_time(datetime pdt)
  {
   MqlDateTime dt;
   TimeToStruct(pdt,dt);
   int code=1;
   if(dt.mon>=11 || dt.mon<=2) // WINTER
     {
      code=1;
     }
   if(dt.mon>=4 && dt.mon<=9) // SUMMER
     {
      code=0;
     }
   datetime tSeek;
   MqlDateTime dtf;
   if(dt.mon==10) // October
     {
      if(dt.day<25) // night of the last October Sunday - shift to winter time
         code=0; // still summer
      else
        {
         TimeToStruct(pdt,dtf);
         tSeek=StringToTime(IntegerToString(dtf.year)+".10.31 02:00");  // set the last October day
         TimeToStruct(tSeek,dtf);
         for(int i=31; i>=25;  i--)
           {
            if(dtf.day_of_week==0 ) // Necessary  to find the night  from Saturday to Sunday
               break;  
            tSeek=tSeek-86400; // ( FIND  exactly 2 o'clock in the morning  i.e. the shift itself has no sense as Forex is closed from Saturday to Sunday  )
            TimeToStruct(tSeek,dtf);
           }
         if(pdt<tSeek)
           {
            code=0; // summer
           }
         else
            code=1; // winter
        }
     }
   if(dt.mon==3) // March
     {
      if(dt.day<25) // night of the last Sunday of March  - shift to summer time
         code=1; // still winter
      else
        {
         TimeToStruct(pdt,dtf);
         tSeek=StringToTime(IntegerToString(dtf.day_of_year)+".03.31 03:00");  // set the last day of March
         for(int i=31; i>=25;  i--)
           {
            if(dtf.day_of_week==0 ) // Necessary  to find the night  from Saturday to Sunday
               break;  
            tSeek=tSeek-86400; // ( FIND  exactly 3 o'clock in the morning  i.e. the shift itself has no sense as Forex is closed from Saturday to Sunday  )
            TimeToStruct(tSeek,dtf);
           }
         if(pdt>tSeek)
           {
            code=0; // summer
           }
         else
            code=1; // winter
        }
     }
  return( code);
  }

11932

Best MetaTrader Indicators + Profitable Expert Advisors