113
Основное время работы программы - это период работы функции start(). При некоторых
условиях (см. свойства специальных функций в разделе Специальные функции), в том
числе - при поступлении в клиентский терминал нового тика с сервера, клиентский
терминал вызовет для исполнения специальную функцию start(). Эта функция (как и
другие функции) может обращаться к информационному окружению клиентского
терминала, производить необходимые вычисления, открывать и закрывать ордера, словом
производить любые действия, позволенные правилами языка MQL4. Обычно в ходе
исполнения специальной функции start() вырабатывается решение, которое реализуется в
виде управляющего воздействия (красная стрелка). Таким управляющим воздействием
может быть сформированный программой торговый приказ на открытие, закрытие или
модификацию ордера.
После того как весь код специальной функции start() эксперта будет исполнен, функция
start() закончит свою работу и вернёт управление клиентскому терминалу. Некоторое
время клиентский терминал будет удерживать управление, не запуская на исполнение ни
одну из специальных функций. Возникает пауза, в течение которой программа не
работает. В дальнейшем, при поступлении нового тика, клиентский терминал снова
передаст управление специальной функции start(), в результате чего она снова начнёт
исполняться, а по окончании исполнения вернёт управление клиентскому терминалу. На
следующем тике функция start() снова будет запущена на исполнение клиентским
терминалом.
Процесс многократного вызова на исполнение специальной функции start() клиентским
терминалом будет продолжаться до тех пор, пока программа прикреплена к окну
финансового инструмента, и может продолжаться недели и месяцы. В течение всего этого
периода эксперт может осуществлять автоматическую торговлю, т.е. выполнять своё
основное назначение. На схеме процесс многократного исполнения функции start()
показан несколькими крупными жёлтыми стрелками, огибающими специальную функцию
start().
В момент, когда трейдер отсоединит эксперт от окна финансового инструмента,
клиентский терминал один раз запустит на исполнение специальную функцию deinit().
Исполнение этой функции вызвано необходимостью корректного завершения работы
эксперта. В процессе работы программа может, например, создавать графические объекты
и глобальные переменные клиентского терминала. Поэтому в коде функции deinit()
обычно указываются программные строки, исполнение которых приводит к удалению