Русский

Учебник по MQL4  Основы языка  Виды программ

Виды программ


Приступая к созданию программы на MQL4, программист должен, прежде всего, ответить на вопрос о том, к какому виду программ она будет относиться. От этого зависят её содержание и функциональные возможности. В языке MQL4 различают 3 вида прикладных программ: эксперты, скрипты и пользовательские индикаторы. Любая программа, созданная программистом, будет относиться к одному из этих видов. Все они имеют своё назначение и особенности. Рассмотрим эти характеристики.

Эксперт (Expert Advisor) - программа, составленная на языке MQL4 и вызываемая клиентским терминалом для исполнения на каждом тике. Основным назначением экспертов является программное управление торговыми операциями. Эксперты создаются пользователями. В клиентском терминале отсутствуют встроенные эксперты.

Скрипт - программа, составленная на языке MQL4 и исполняемая клиентским терминалом однократно. Назначением скриптов является выполнение любых разрешённых операций, которые требуется выполнить только один раз. Скрипты создаются пользователями, клиентский терминал встроенными скриптами не укомплектован.

Пользовательский индикатор - программа, составленная на языке MQL4 и вызываемая клиентским терминалом для исполнения на каждом тике. Основным назначением индикаторов является отображение на экране линий заданных зависимостей. У индикаторов отсутствует возможность осуществления торговых операций. Различают два вида индикаторов - технические (встроенные) и пользовательские. Подробно индикаторы рассматриваются в разделах Использование технических индикаторов и Создание пользовательских индикаторов.


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


Свойства программ


Запуск программы на исполнение


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

Эксперт и пользовательский индикатор. После присоединения к окну финансового инструмента программа (эксперт или пользовательский индикатор) выполняет подготовительные операции и переходит в режим ожидания тика. При поступлении тика программа запускается клиентским терминалом на выполнение, исполняет все действия, заложенные в её алгоритме, и по окончании исполнения передаёт управление клиентскому терминалу - переходит в режим ожидания тика.

Если новый тик приходится на время исполнения программы, то это не оказывает никакого влияния на исполнение программы - программа продолжает исполняться в соответствии с алгоритмом и лишь по окончании исполнения передаёт управление клиентскому терминалу. Поэтому не все тики приводят к запуску эксперта и пользовательского индикатора на исполнение, а только те, которые поступают в период, когда управление передано клиентскому терминалу и программа находится в режиме ожидания нового тика.

Новый тик снова запускает программу на выполнение. Таким образом, эксперт и пользовательский индикатор могут находиться в работе в течение длительного времени, оставаясь присоединёнными к окну финансового инструмента и периодически (кратно тикам) включаясь в практическую работу.

Существует также разница между порядком исполнения эксперта и индикатора при первом запуске программы. Эта разница определяется свойствами специальных функций программы определённого вида (см. Специальные функции). После присоединения к окну финансового инструмента эксперт выполняет подготовительные операции (функция init()) и переходит в режим ожидания тика для запуска функции start(). В отличие от экперта, индикатор не только выполняет функцию init(), но и однократно производит вызов функции start() для первого предварительного расчета значения индикатора. В дальнейшем при поступлении тика программа запускается вызовом только функции start(), то есть исполняются операторы в соответствии с алгоритмом функции start().

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

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


Осуществление торговых операций


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

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


Одновременное использование


Существует также отличие в количестве программ разного вида, одновременно присоединённых в окно финансового инструмента.

Эксперт. В окне финансового инструмента одновременно можно присоединить только один эксперт; одновременное использование нескольких экспертов запрещено.

Скрипт. В окне финансового инструмента одновременно можно присоединить только один скрипт; одновременное использование нескольких скриптов запрещено.

Пользовательский индикатор. В окне финансового инструмента одновременно могут быть присоединены несколько индикаторов, не мешая работе друг друга.

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

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

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


Вызов программ на исполнение


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

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

Таблица 2. Основные свойства экспертов, скриптов и пользовательских индикаторов.

Свойство программы Эксперт Скрипт Индикатор
Продолжительность работы В течение длительного срока Однократно В течение длительного срока
Осуществление торговых операций Разрешено Разрешено Запрещено
Возможность отображения линий Нет Нет Есть
Одновременное использование нескольких программ одного вида Запрещено Запрещено Разрешено
Вызов на исполнение программным способом Запрещено Запрещено Запрещено

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