TimeDayOfWeek() - разработчики, проверте

 

Вчера мудохался до часу ночи. Думал где же я затупил. Потом проверил алертом и ах...!

RVD 

Угадайте что алерт вернул? Правильно, 3(среда сегодня). 

if(TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,0)==1)) Alert(TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,0)));
 
eevviill:

Вчера мудохался до часу ночи. Думал где же я затупил. Потом проверил алертом и ах...!

RVD 

Угадайте что алерт вернул? Правильно, 3(среда сегодня). 

ну, из понятия вчера ничего не следует - вчера на пк и вчера в терминале..

в какое время по терминалу криво работало и вообще данных по дневках могло и не быть..

это не замечание, а в том смысле, как воссоздать условия у себя чтобы проверить ошибку  ?

 
eevviill:

Вчера мудохался до часу ночи. Думал где же я затупил. Потом проверил алертом и ах...!

RVD 

Угадайте что алерт вернул? Правильно, 3(среда сегодня). 

Проверил - алерт не срабатывает, т. к. сегодня не понедельник.

Скорее всего, дело в том, что к моменту проверки условия данные дневного графика неполные. Обращение к ним инициирует подкачку дневного ТФ. К моменту второго обращения к дневному ТФ необходимые данные уже есть. В итоге получаем, что там 1, а по факту 3.

Чтобы не спотыкаться на таких моментах, необходимо кэшировать рабочее значение:

   datetime time = iTime(Symbol(),PERIOD_D1,0);
   if(TimeDayOfWeek(time) == 1) 
      Alert(TimeDayOfWeek(time));

 Ну и со скобочками Вы намудрили, конечно же. Видимо, причина именно в них:

if(TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,0)==1)) Alert(TimeDayOfWeek(iTime(Symbol(),PERIOD_D1,0)));

Нужно вынести сравнение с 1 за правую скобку. 

 

 Ну и со скобочками Вы намудрили, конечно же. Видимо, причина именно в них:

Нужно вынести сравнение с 1 за правую скобку.

 

Спасибо! 

 

 

 

 

 

Причина обращения: