MqlDateTime stime; //+------------------------------------------------------------------+ //| Expert initialization function | //+------------------------------------------------------------------+ int OnInit() { return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ void OnTick() { bool stop_trade=false; TimeCurrent(stime); if(stime.day_of_week==5) { stop_trade=((stime.mon==3) && (stime.day>=29)?true: (stime.mon==6)&&(stime.day>=28)?true: (stime.mon==9)&&(stime.day>=28)?true: (stime.mon==12)&&(stime.day>=29)?true:false); } if(stop_trade) { Comment("Сегодня торговля запрещена, конец квартала"); return; } }
Красиво. Но если проверить остаток от деления stime.mon%3 == 0 то это последний месяц квартала.
Да. Только количество дней в разных месяцах разное. Где-то нужны 28,29,30, а где-то 29,30,31.
Да. Только количество дней в разных месяцах разное. Где-то нужны 28,29,30, а где-то 29,30,31.
Так и это можно сократить. Если пятница и плюс 3 дня == новый месяц, то это последняя пятница квартала.
Да. Только количество дней в разных месяцах разное. Где-то нужны 28,29,30, а где-то 29,30,31.
Квартал всегда заканчивается на 30-31. Февраль, это середина первого квартала.
Квартал всегда заканчивается на 30-31. Февраль, это середина первого квартала.
Это к чему? Задание прочитайте. Пятница может выпасть на 28-30 день или 29-31.
Так и это можно сократить. Если пятница и плюс 3 дня == новый месяц, то это последняя пятница квартала.
Да.
Это к чему? Задание прочитайте. Пятница может выпасть на 28-30 день или 29-31.
Примерно к этому
bool Trade(void) { MqlDateTime mqlDateTime; TimeToStruct(TimeCurrent(), mqlDateTime); if(mqlDateTime.mon%3 != 0) return true; if(mqlDateTime.day_of_week == 5) { if(28+(mqlDateTime.mon==3 || mqlDateTime.mon==12 ? 1 : 0) > mqlDateTime.day) return true; } else if((mqlDateTime.mon==3 || mqlDateTime.mon==12 ? 31 : 30) > mqlDateTime.day) return true; return false; }
Если просто нужен последний день квартала, то
bool Trade(void) { MqlDateTime mqlDateTime; TimeToStruct(TimeCurrent(), mqlDateTime); if(mqlDateTime.mon%3 != 0) return true; if((mqlDateTime.mon==3 || mqlDateTime.mon==12 ? 31 : 30) > mqlDateTime.day) return true; return false; }
Примерно к этому
...
if(28+(mqlDateTime.mon==3 || mqlDateTime.mon==12 ? 1 : 0) > mqlDateTime.day)
Начали с 23, потом 24, теперь 28 ...
Начали с 23, потом 24, теперь 28 ...
Сначала вроде логически, потом полистал календарь =) Вот точнее будет. Надо просто брать последний торговый день
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Доброе время суток!
Как программно запретить советнику торговать в пятницу, если на эту пятницу, субботу или воскресение выпадает последний день квартала?
Чет не могу сообразить.