Функции для работы со временем

Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 0.5$
Ответственный Модератор - Haos

Функции для работы со временем

Сообщение Haos » 13 янв 2018, 05:58

При работе со встроенными функциями времени в MQL удобно формализовать некоторые часто встречающиеся в коде процедуры.
Для начала можно ввести две константы (длина недели и длина суток):
Код: выделить все
// Длина недели
// 7*24*60*60
#define WEEK_LENGTH 604800
#define SUTKI_LENGTH 86400 // day (and night)

Всё рассчитывается в секундах. Для справки далее приведена длительность (в секундах) различных временных периодов:
Код: выделить все
  /*
   int intW01Lenth = 604800;    // Длительность недели (сек): 7*24*60*60
   int intD01Lenth = 86400;     // Длительность дневного бара (сутки) (сек): 24*60*60
   int intH04Lenth = 14400;
   int intH01Lenth = 3600;
   int intM30Lenth = 1800;
   int intM15Lenth = 900;
   int intM05Lenth = 300;
   int intM01Lenth = 60;
*/
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Функции для работы со временем

Сообщение Haos » 13 янв 2018, 06:01

1. Количество дней между двумя датами
Код: выделить все
int f_Days(datetime d1, datetime d2)
{
// Количество дней между двумя датами
   int intSutki = 86400;     // Сутки (сек): 24*60*60
   if(d2 > d1) return((int) (MathFloor((d2 - d1) / intSutki)));

return(-1);
}

В качестве параметров для функции служат две даты: дата начала диапазона и дата конца диапазона. Количество дней округляется до целого значения. В случае ошибки (начальная дата больше конечной) возвращается "-1".
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Функции для работы со временем

Сообщение Haos » 13 янв 2018, 06:03

2. Количество недель между двумя датами
Код: выделить все
int f_Weeks(datetime d1, datetime d2)
{
// Количество недель между двумя датами
   int intWeek = 604800; // Длительность недели (сек): 7*24*60*60
   if(d2 > d1) return((int) (MathFloor((d2 - d1) / intWeek)));

return(-1);
}

Аналогично функции (1), только для недель.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.

Функции для работы со временем

Сообщение Haos » 13 янв 2018, 06:06

3. Количество месяцев между двумя датами
Код: выделить все
int f_Months(datetime d1, datetime d2)
{
// Количество месяцев между двумя датами (по 30 дней в месяце)
   int intMonth = 2592000; // Длительность месяца (сек.): 30*24*60*60
   if(d2 > d1) return((int) (MathFloor((d2 - d1) / intMonth)));

return(-1);
}

Предполагается, что в месяце 30 дней. Аналогично функциям ранее, округление происходит до целого значения.
Аватар пользователя
Haos
Специалист MQL
 
Сообщений: 24699
Зарегистрирован: 29 мар 2014, 16:07
Средств на руках: 193.70 Доллар
Группа: Главные модераторы
Благодарил (а): 3379 раз.
Поблагодарили: 8200 раз.


Вернуться в MQL – теория и практика

Кто сейчас на форуме?

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 61

Права доступа к форуму

Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения