Вы используете устаревший браузер. Этот и другие сайты могут отображаться в нем неправильно. Необходимо обновить браузер или попробовать использовать другой.
[MQL4] Функция ограничения работы советника за период времени
Коллеги поделитесь функцией по ограничению времени работы. С часами все понятно а вот с периодами в днях не могу сообразить.
Задача следующая:
что бы включался запрет с 15.12(15декабря) по 15.01(15января) открытии ордеров
Роман, Спасибо. Но задачка была другая и никак не мог сообразить. Тем более с функциями дат запутываюсь. Но разобрался уже. Может кто поправит или поможет оптимизирует функцию.
extern string F222 = "===== ФИЛЬТР ТОРГОВ ПО ДАТАМ =====";
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
//| Функция ограничения по датам в промежутке времени |
//+-------------------------------------------------------------------------------------------------------------------------------------------------+
bool CheckData()
{
if (Data1 == true) // если включен фильтр
{
string startData= DataStart1+"."+ IntegerToString(Year()); // число/месяц/год в формате строки начальная дата фильтра
string endData = DataEnd1+"."+ IntegerToString(Year()); // число/месяц/год в формате строки конечная дата фильтра
datetime ND_Data= StringToTime(startData); // преобразавание число/месяц/год в формат даты начальная дата фильтра
datetime KD_Data=StringToTime(endData); // преобразавание число/месяц/год в формат даты конечная дата фильтра
//datetime SD_Data= TimeCurrent(); //
int ND_Day_Of_Year= TimeDayOfYear(ND_Data); // день года начальной даты фильтра
int KD_Day_Of_Year= TimeDayOfYear(KD_Data); // день года конечной даты фильтра
int SD = DayOfYear(); // день года сегодня
if (ND_Day_Of_Year > KD_Day_Of_Year) // если день начала > дня окончания (это случай когда фильтр дат установлен через Новый год)
if(SD>=ND_Day_Of_Year || SD<=KD_Day_Of_Year) return (false);
if (ND_Day_Of_Year <= KD_Day_Of_Year) // если день начала <= дня окончания (это случай когда фильтр дат установлен в течении 1 года или месяца))
if(SD>=ND_Day_Of_Year && SD<=KD_Day_Of_Year) return (false);
}
return (true);
Не нужно. Внешняя переменная - тип дата, из неё функциями TimeDay() и TimeMonth() можно вытянуть то, что нужно. А год, если не нужен, можно задать любой.
Внешняя переменная может быть и в строковом формате yyyy.mm.dd [hh:mi], тогда её вначале надо преобразовать функцией StrToTime()
Я, кстати, себе тоже делал график торгов и столкнулся с тем, что проще не задавать периоды, переходящие через год. В данном случае я бы задал 2 периода неторгов: 15-31 декабря и 1-15 января