Работа с таймером

Для многих прикладных задач важно иметь возможность выполнять действия по расписанию, с некоторым заданным интервалом. В MQL5 такой функционал обеспечивается таймером — системным счетчиком времени, который можно настроить таким образом, чтобы он посылал регулярные уведомления MQL-программе.

Для установки или отмены уведомлений таймера в MQL5 API имеется несколько функций: EventSetTimer, EventSetMillisecondTimer, EventKillTimer. А сами уведомления поступают в программу в виде событий особого типа: для них в исходном коде зарезервирован обработчик OnTimer. Об этой группе функций и пойдет речь в данной главе.

Напомним, что в MQL5 события могут получить только интерактивные программы, выполняющиеся на графиках, то есть индикаторы и эксперты. Скрипты и сервисы не поддерживают никакие события, в том числе и от таймера.

Вместе с тем, в главе Функции для работы со временем мы уже касались смежных тем:

  • получения временных меток текущих локальных или серверных часов (TimeLocal / TimeCurrent);
  • приостановки выполнения программы на заданный период с помощью Sleep;
  • получения состояния счетчика системного времени компьютера, отсчитываемого от старта операционной системы (GetTickCount) или с момента запуска MQL-программы (GetMicrosecondCount).

Эти возможности доступны абсолютно всем типам MQL-программ.

В предыдущих главах мы уже неоднократно использовали функции таймера, несмотря на то, что их формальное описание будет дано только сейчас. Из-за того, что события таймера доступны лишь в индикаторах или экспертах, было бы затруднительно изучать его раньше, чем сами программы. После того как мы освоили создание индикаторов, тема таймеров станет логичным продолжением.

В основном мы использовали таймеры для ожидания построения таймсерий. Такие примеры можно найти в разделах Ожидание данных, Мультивалютные и мультитаймфреймовые индикаторы, Поддержка множества символов и таймфреймов, Использование встроенных индикаторов.

Кроме того, мы переключали по таймеру (каждые 5 секунд) тип подчиненного индикатора в демонстрационной "анимации" индикаторов в разделе Удаление экземпляров индикаторов.