Скачать MetaTrader 5

Можно ли как-то узнать количество дней в месяце средствами MQL?

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Ant
65
Ant  

Привет. Есть желание менять поведение эксперта в два последних дня месяца. Конечно, можно применять логику к 30 и 31 числу, и в большинстве случаев это будет работать. Но, сами понимаете, хотелось бы чего-то красивее. Обычно везде есть функции типа DaysInMonth(), в справке не нашёл ничего подобного. Задача вроде должна быть распространённой, как в народе такое решается?

Благодарю за помощь.

Vadim Zhunko
5236
Vadim Zhunko  
Так оно и так известно. В зависимости от високосности и номера месяца доставать из массива. Потребуется 2 массива с високосными числами и невисокосными числами.
Комбинатор
16966
Комбинатор  

0. Ложим на советы предыдущего оратора.

1. Берем 1 числа текущего месяца.

2. прибавляем 31 день.

3. Берем 1 числа следующего месяца

4. сравниваем 1 и 3

PapaYozh
3768
PapaYozh  
TheXpert:

0. Ложим на советы предыдущего оратора.

Извините, но - "кладём".
Vadim Zhunko
5236
Vadim Zhunko  
Зачем вычислять то, что уже известно? Для этого массивы есть. Это проще, наглядно. Отсутствие вычислений это отсутствие ошибок и отладки кода. Не говорю, что это существенно более быстрые операции.
Victor Nikolaev
Модератор
15965
Victor Nikolaev  

Я бы взял первое число следующего месяца и отнял (вычел) два дня

PapaYozh
3768
PapaYozh  
alex_ant:

Привет. Есть желание менять поведение эксперта в два последних дня месяца. Конечно, можно применять логику к 30 и 31 числу, и в большинстве случаев это будет работать. Но, сами понимаете, хотелось бы чего-то красивее. Обычно везде есть функции типа DaysInMonth(), в справке не нашёл ничего подобного. Задача вроде должна быть распространённой, как в народе такое решается?

Благодарю за помощь.


А если один из этих дней или даже оба последних дня являются выходными?
Dmitry Fedoseev
47061
Dmitry Fedoseev  
int dim(int m,int y){ // m - месяц от 1 до 12, y - год
   int d=30+(m+(m>7))%2-(m==2)*(1+((y%4)!=0));
   return(d);
}

исправлено
PapaYozh
3768
PapaYozh  
Integer:

В этом коде точно нет ошибок?
Dmitry Fedoseev
47061
Dmitry Fedoseev  
PapaYozh:

В этом коде точно нет ошибок?

В каких-то случаях неправильно считает?
Vadim Zhunko
5236
Vadim Zhunko  
Одна ошибка точно есть. Неправильно високосность вычисляется.
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий