81
только советников и не касается индикаторов) исторических данных, после смены
финансового инструмента и/или периода графика, после перекомпиляции программы в
редакторе MetaEditor, после смены входных параметров из окна настройки эксперта или
пользовательского индикатора. Советник также инициализируется после смены счёта
Каждая присоединенная к графику программа завершает работу функцией deinit().
Функция deinit() запускается также при завершении работы клиентского терминала, при
закрытии графика, непосредственно перед сменой финансового инструмента и/или
периода графика, при удачной перекомпиляции программы, при смене входных
параметров, а также при смене счета. Причину деинициализации можно получить,
используя функцию UninitializeReason()
при выполнении функции deinit(). Выполнение
функции deinit() ограничивается 2.5 секундами. Если за это время функция не закончила
свою работу, то ее выполнение завершается принудительно. Исключение составляют
скрипты, которые как правило, самостоятельно завершают свою работу без команды
извне. Если же скрипт работает долго (например, по причине бесконечного цикла), то его
можно завершить командой извне (при удалении скрипта из контекстного меню графика,
при присоединении к графику нового скрипта, при закрытии графика, при смене
финансового инструмента и/или периода графика). В этом случае deinit() также
ограничивается 2.5 секундами.
При поступлении новых котировок выполняется функция start() у присоединенных
советников и пользовательских индикаторов. Если при поступлении новой котировки
выполнялась функция start(), запущенная на предыдущей котировке, то пришедшая
котировка будет проигнорирована советником. Все пришедшие во время выполнения
программы новые котировки программой игнорируются до тех пор, пока не завершится
очередное выполнение функции start(). После этого функция start() будет запущена только
после прихода очередной новой котировки. У пользовательских индикаторов функция
start() запускается для пересчета также после смены символа или периода текущего
графика вне зависимости от поступления новых котировок. Функция start() не запускается
при включенном запрете использования советников (кнопка "Разрешить/запретить
советников"). Однако запрещение работы советников путем нажатия на указанную кнопку
не прерывает текущее выполнение функции start(). Функция start() не запускается на
выполнение при открытом окне свойств советника. Окно свойств не может быть открыто
в момент выполнения советника.