DayOfYear() срабатывает раньше наступления нового дня???

 

Уважаемые знатоки MQL.

Возможно ли такое, что функция DayOfYear() срабатывает немного раньше, чем нужно, или я что-то неверно прописал?

Советник удаляет файл, в котором записан номер текущего дня (функция DeleteStop()) в 23:59:38, хотя новый день еще не наступил. Как такое может быть?

Идея была такая, что как только наступает новый день, советник разрешает торговлю до определенного момента, потом записывает в файл значение текущего дня и пока не наступит следующий день, торговля запрещена. Только вот он почему-то вновь разрешает торговлю, как я и написал, за 20 секунд до начала нового дня. Магия?...

Часть кода:

 if(stop!=0 && stop<DayOfYear())
     {
      stop=0;
      DeleteStop();
     }

void DeleteStop()
  {
   if(IsTesting())
      return;
   string nn="STOP.csv";
   int h=FileDelete(nn);
   if(h==INVALID_HANDLE)
     {
      Print("Файл не найден!");
      return;
     }
   Print("File ",nn," deleted. Keep trading");
  }

void STOP_TRADE()
  {
   if(IsTesting())
      return;
   string nn="STOP.csv";
   int h=FileOpen(nn,FILE_CSV|FILE_WRITE);
   FileWrite(h,stop);
   FileClose(h);
  }
 
mrantonion:

Возможно ли такое, что функция DayOfYear() срабатывает немного раньше, чем нужно, или я что-то неверно прописал?

Какое время берете в качестве эталонного?

 
Ihor Herasko:

Какое время берете в качестве эталонного?

Не очень понял вопроса, тк я сразу проверяю условие:

Чтение из файла числа номера дня каждые 5 минут. Вчера (10.03.20) был 70-й день. Сегодня наступил 71-й день.

Если stop<DayOfYear(), удаляем файл, разрешаем торговлю. Т.е. по сути сегодня в полночь, когда наступил 71-й день, файл должен был удалиться, торговля разрешиться. Но он удалился вчера в 23:59:38. При том, что во журнале "Эксперты" стоит время компьютера (00:59:38). В это время в терминале было 23:59:38.


 

А если уж совсем точно брать, то разница во времени между терминалом и компьютером составляет 59 минут 10 секунд. Может, в этом что-то кроется?

Т.е. когда на компьютере было 00:59:38, в терминале было 00:00:28....

Но причем здесь компьютерное время, если DayOfYear() проверяет терминально время?

 

Кажется, я понял свою ошибку:

Когда файл удален, советник проверяет наличие условия предыдущего бара. А т.к. на некоторых парах еще не наступил первый тик нового дня, то он думает, что наступил и получается, что открывает сделки раньше времени.

Спасибо огромное за помощь! Вроде бы особо ничем не помогли, но я всё понял. Нужно подкорретировать логику советника.

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