Новая версия платформы MetaTrader 5 build 5100: Переход на Git и хаб разработчиков MQL5 Algo Forge, темная тема и улучшения интерфейса - страница 37

 
Slava #:
Таймер много лет не трогали.

если так, то таймер может подсбаивать если одновременно где-то в терминале работает DLL и использует нити/таймеры. Именно EventSetTimer, EventKillTimer могут втормозить или завершится с ошибкой. По вполне понятным системным причинам.

PS/ и конечно SetTimer, KillTimer внутри OnTimer это жезть

 
Slava #:

Зачем каждый раз в обработчике таймера делать EventKillTimer?

Пробовал без него, ситуация не менялась.

 
Slava #:

Зачем каждый раз в обработчике таймера делать EventKillTimer?

Эту функцию логично вызывать в начале OnTimer, чтобы медленные расчеты внутри OnTimer не создавали большую очередь Timer-событий.

 
Простое воспроизведение бага таймера.
const bool Init = EventSetMillisecondTimer(1); // Одна миллисекунда.

void OnTimer()
{
  static int Count = 0;
  
  if (!(Count++ % 100)) // Срабатывает через каждые 100 проверок.
  {
    Print(Count);
    Sleep(100); // 100 миллисекунд.
  }
}


Результат.

2025.06.12 16:15:58.968 1
2025.06.12 16:16:00.727 101
2025.06.12 16:16:02.374 201
2025.06.12 16:16:04.076 301
2025.06.12 16:16:05.770 401
2025.06.12 16:16:07.419 501
2025.06.12 16:16:09.099 601
2025.06.12 16:16:10.769 701
2025.06.12 16:16:12.453 801
2025.06.12 16:16:14.129 901

Между соседними записями больше секунды.

 
fxsaber #:

Эту функцию логично вызывать в начале OnTimer, чтобы медленные расчеты внутри OnTimer не создавали большую очередь Timer-событий.

Зачем?

Пока выполняется работа OnTimer, новые события таймера в очередь не добавляются

 
Slava #:

Пока выполняется работа OnTimer, новые события таймера в очередь не добавляются

Вроде, не всегда так было. Возможно, ошибаюсь.

 
fxsaber #:

Вроде, не всегда так было. Возможно, ошибаюсь.

Так было с самого начала. В документации про это явно написано.
Документация по MQL5: Работа с событиями / EventSetTimer
Документация по MQL5: Работа с событиями / EventSetTimer
  • www.mql5.com
Указывает клиентскому терминалу, что для данного эксперта или индикатора необходимо генерировать события от таймера с указанной периодичностью...
 

Версия 5100 работает корректно, но в Бета-версии 5107 перестал загружаться график в окне тестера и не подгружаются индикаторы, что не даёт работать советнику.


 
fxsaber #:

Замеряли?

Есть опыт запуска этого индикатора на той же машине, где торговый сервер...

В случае отсутствия латенси, если между тиками торгового сервера N миллисекунд, то и между соответствующими OnTick MQL-программы должно пройти ровно N миллисекунд. Это далеко не так, к сожалению.


Предлагаю не доверять этому индикатору, а самому померить данное несоответствие на своих машинах с нулевым пингом.


Результат с ненулевым пингом.

Попробуйте на машине с нулевым.

Спасибо, проверю внимательно

 
Slava #:
Так было с самого начала. В документации про это явно написано.

Спасибо! Считать ли это багом?