Работа с таймером
Для многих прикладных задач важно иметь возможность выполнять действия по расписанию, с некоторым заданным интервалом. В MQL5 такой функционал обеспечивается таймером — системным счетчиком времени, который можно настроить таким образом, чтобы он посылал регулярные уведомления MQL-программе.
Для установки или отмены уведомлений таймера в MQL5 API имеется несколько функций: EventSetTimer, EventSetMillisecondTimer, EventKillTimer. А сами уведомления поступают в программу в виде событий особого типа: для них в исходном коде зарезервирован обработчик OnTimer. Об этой группе функций и пойдет речь в данной главе.
Напомним, что в MQL5 события могут получить только интерактивные программы, выполняющиеся на графиках, то есть индикаторы и эксперты. Скрипты и сервисы не поддерживают никакие события, в том числе и от таймера.
Вместе с тем, в главе Функции для работы со временем мы уже касались смежных тем:
- получения временных меток текущих локальных или серверных часов (TimeLocal / TimeCurrent);
- приостановки выполнения программы на заданный период с помощью Sleep;
- получения состояния счетчика системного времени компьютера, отсчитываемого от старта операционной системы (GetTickCount) или с момента запуска MQL-программы (GetMicrosecondCount).
Эти возможности доступны абсолютно всем типам MQL-программ.
В предыдущих главах мы уже неоднократно использовали функции таймера, несмотря на то, что их формальное описание будет дано только сейчас. Из-за того, что события таймера доступны лишь в индикаторах или экспертах, было бы затруднительно изучать его раньше, чем сами программы. После того как мы освоили создание индикаторов, тема таймеров станет логичным продолжением.
В основном мы использовали таймеры для ожидания построения таймсерий. Такие примеры можно найти в разделах Ожидание данных, Мультивалютные и мультитаймфреймовые индикаторы, Поддержка множества символов и таймфреймов, Использование встроенных индикаторов.
Кроме того, мы переключали по таймеру (каждые 5 секунд) тип подчиненного индикатора в демонстрационной "анимации" индикаторов в разделе Удаление экземпляров индикаторов.