Библиотеки: ZZ_TimeWinter 1-1000.mq4

 

ZZ_TimeWinter 1-1000.mq4:

Библиотека YURAZ , определение перехода зимнего времени на летнее с летнего на зимнее

Author: Yuriy Zaytsev

 

Спасибо.

Только есть пожелание: заменить

tSeek = StrToTime(StringTrimRight(StringTrimLeft(DoubleToStr(TimeYear(dt),0)))+".10.31"); // установим последний день октября

на

tSeek = StrToTime(StringTrimRight(StringTrimLeft(DoubleToStr(TimeYear(dt),0)))+".10.31 02:00"); // установим последний день октября

и

tSeek = StrToTime( StringTrimRight(StringTrimLeft(DoubleToStr(TimeYear(dt),0)))+".03.31"); // установим последний день марта

на

tSeek = StrToTime( StringTrimRight(StringTrimLeft(DoubleToStr(TimeYear(dt),0)))+".03.31 03:00"); // установим последний день марта

поскольку часы переводятся не в полночь, а 2 и 3 часа соответственно (Wikipedia: переход на летнее время).

Ну и "string sTIM;" можно убрать.

Функцию надо переименовать SummerTime (см. выходной параметр).

bool is_summer_time(datetime dt) 
{
	if (TimeMonth(dt) >= 11 || TimeMonth(dt) <= 2)
		return(false);
	if (TimeMonth(dt) >= 4  && TimeMonth(dt) <= 9)
		return(true);
	datetime tSeek;
	if (TimeMonth(dt) == 10) // октябрь
	{
		if (TimeDay(dt) < 25) // ночью в последнее воскресенье октября - переход на зимнее время
			return (true);
		tSeek = StrToTime(StringTrimRight(StringTrimLeft(DoubleToStr(TimeYear(dt),0)))+".10.31 02:00");  // установим последний день октября
		// ищем первое воскресенье с конца
		while (TimeDayOfWeek(tSeek) != 0)
			tSeek = tSeek - 86400;
		return (dt < tSeek);
	}
	if (TimeMonth(dt) == 3) // март
	{
		if (TimeDay(dt) < 25) // ночью в последее воскресенье МАРТА - переход на ЛЕТНЕЕ время
			return (true); //  уже лето 
		tSeek = StrToTime(StringTrimRight(StringTrimLeft(DoubleToStr(TimeYear(dt),0)))+".03.31 03:00");  // установим последний день марта
		// ищем первое воскресенье с конца
		while (TimeDayOfWeek(tSeek) != 0)
			tSeek = tSeek - 86400;
		return (dt >= tSeek);
	}
}
 

Допустил опечатку:

if (TimeDay(dt) < 25) // ночью в последее воскресенье МАРТА - переход на ЛЕТНЕЕ время
			return (true); //  уже лето 

исправить на


if (TimeDay(dt) < 25) // ночью в последее воскресенье МАРТА - переход на ЛЕТНЕЕ время
			return (false);