Обсуждение статьи "Работаем со временем (Часть 2): Функции" - страница 2

 
Nikita Chernyshov #:

А как именно вы это сделали? Каким образом высчитывается константы?

Время гринвича минус таймкаррент, с переходом на зимнее он изменится на час. Писал как то время начала и окончания работы, с клиентом разница в час +3 и +2, у брокеров +3, +2, -6 по гринвичу.))) А начинать работу надо было в определенное время, одинаковое для всех. Гринвич одинаков, а серверное и локальное время разные. Код из учебника Федосеева переделал.) 

В общем проблема как бы, что нет штатной функции разницы серверного и гринвича времени. Но она считается. Тут еще затык, что у локального времени тоже может быть переход на зимнее время, и в отличное время, от перехода у брокера.

// TimeGMT()-TimeCurrent(); летом одна величина, зимой другая.
// 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 #:

Время гринвича минус таймкаррент, с переходом на зимнее он изменится на час. Писал как то время начала и окончания работы, с клиентом разница в час +3 и +2, у брокеров +3, +2, -6 по гринвичу.))) А начинать работу надо было в определенное время, одинаковое для всех. Гринвич одинаков, а серверное и локальное время разные. Код из учебника Федосеева переделал.) 

В общем проблема как бы, что нет штатной функции разницы серверного и гринвича времени. Но она считается. Тут еще затык, что у локального времени тоже может быть переход на зимнее время, и в отличное время, от перехода у брокера.

Спасибо, да, такое решение есть в голове, оно +- так и реализовано. Но вы в последнем абзаце указали на всю боль)

 

Версия DealingWithTime.mqh v. 1.01 из статьи Работа со временем (Часть 2): Функции ( https://www.mql5.com/ru/articles/9929 ) перестала работать, так как MQ изменил поведение CopyTime( ) через некоторое время после публикации этой статьи. Теперь эта функция больше не возвращает будущие значения времени, если они больше, чем TimeCurrent() , указанный для параметров start_time и/или stop_time. Вместо этого возвращается максимально возможное значение времени открытия последнего текущего бара.

Так как окончание валютной сессии было определено таким образом, чтобы определить смещение времени брокера, теперь это приводит к неверным значениям!

Этот расчет был изменен в версии 2.03. Эта версия теперь доступна в CodeBase здесь: https://www.mql5.com/ru/code/45287 .

Но также был полностью изменен расчет перевода времени, так что теперь охвачены сложные времена перевода времени из Сиднея (Австралия) обратно в 70-е годы.

Также прилагается таблица DST 1975 - 2030.xlsx в виде zip-файла со всеми временными изменениями с 70-х годов, чтобы каждый мог проверить правильность работы формул, вот пример серии таблицы:

1 января 1982 г. - стандартное время в США (DST == 0), а следующее изменение произойдет 25 апреля 1982 г., в последнее (25-е число месяца) воскресенье апреля (4). Таблица уже отсортирована по географическому часовому поясу (столбец A), затем по часовому поясу года (столбец L, spr=весна, aut=осень) и, наконец, по дате запроса (столбец C). Таблица может быть создана автоматически включенным советником (скрипт не может быть запущен в режиме отладки). Test_DST 2.mq5, если вы запустите его в режиме отладки и скопируете строки журнала журнала в отладчике и вставите их в электронную таблицу; Разделителем ячеек будет пробел.

Кроме того, теперь есть новая простая функция SecTillClose() , которая дает вам оставшееся время в секундах (валюта времени MQ) до закрытия рынка форекс - без CopyTime() . Это интересно для тех, кто хочет закрыть свои позиции до выходных или не хочет открывать новую позицию в определенный период до выходных.

Включенный индикатор DealingWithTime_TestIndi.mq5, как комментарий к графику, показывает не только летнее время в Европе, США и Австралии (Сидней), но также текущее время и разницу во времени различных городов. Здесь вы можете найти таблицу с разным местным временем крупных городов для сравнения: https://www.timeanddate.com/worldclock/ . Таким образом, вы можете проверить значения в любое время. Этот индикатор также показывает, как эти значения определяются и используются (что от чего вычитается или прибавляется), что облегчает самостоятельное использование — копирование и вставка, самая быстрая форма программирования.

Последние две строки также показывают последнюю секунду текущей FX-сессии и оставшееся время в часах (о чем проще судить) и в секундах. В Нью-Йорке, когда сессия FX закрывается в 17:00 по местному времени в пятницу, нет действительного бара, открытого в 17:00 по нью-йоркскому времени. Поэтому в этой функции вычитается 1 секунда, чтобы получить последнее действительное время открытия последнего бара во времени брокера. Однако некоторые брокеры заканчивают свою валютную сессию на несколько минут раньше, больше не предоставляя цены и не принимая торговые приказы.

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.