Скрипты и сервисы

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

Скрипты и сервисы имеют одинаковые принципы организации и исполнения программного кода. Как мы знаем, их главная функция OnStart является и единственной. Скрипты и сервисы не могут обрабатывать другие события.

Вместе с тем, есть пара существенных отличий. Скрипты выполняются в контексте графика и имеют доступ к его свойствам напрямую — через встроенные переменные, такие как _Symbol, _Period, _Point и другие. Мы изучим их в разделе Свойства графика. Сервисы же работают сами по себе, не привязанные ни к каким окнам, хотя и имеют возможность анализировать с помощью специальных функций все графики (эти же Chart-функции можно использовать в остальных типах программ: скриптах, индикаторах и экспертах).

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

Обратите внимание, что сервис выполняется в терминале, как и все остальные типы MQL-программ, а потому закрытие терминала останавливает и сервис. Работа активного сервиса возобновится при следующем запуске терминала. Бесперебойную работу MQL-программ может обеспечить только постоянно загруженный терминал, например, на VPS-сервере.

В скриптах и сервисах можно установить Общие свойства программ с помощью директив #property. В дополнение к ним существуют свойства, характерные именно для скриптов и сервисов — о них будет сказано в двух следующих разделах.

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

Управление сервисами возможно только из окна Навигатора.