Программирование прибыли: от азов к секретам мастерства. Читайте, спрашивайте, делитесь опытом.
Бонус за сообщение 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 раз.
Кто сейчас на форуме?
Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 337
Права доступа к форуму
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения