Язык программирования MQL 4: Выполнение программ, их типы и структура
|

Язык программирования MQL 4: Выполнение программ, их типы и структура

   Написание программы на любом языке программирования требует полного понимания того, как и в каком окружении она будет рабoтать, и какова её пользовательская аудитория. Если с аудиторией программ, написаных на MQL 4 почти всегда всё ясно, то с первым вопросом стоит разобраться отдельно. Проведём некоторое сравнение выполняющейся обычной программы, исполняемой на нашем компьютере, и программы, написанной на MQL 4. Прежде всего, следует обратить внимание на то, кто исполняет инструкции той или иной программы.


Обычная программа


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


MetaEditor 4


   Теперь рассмотрим случай, когда программа написана на MQL 4. Мы не можем просто запустить такую программу на нашем компьютере, если на нём не установлен MetaTrader 4. Это означает, что эта программа на самом деле не является полноценным самостоятельным исполняемым модулем. Львиная доля того, что програма хочет сделать, исполняется не самой программой, а интерпретатором MQL-программ клиентского терминала Metatrader 4.
   Когда MQL-программе нужно прочитать файл с диска, онa не запрашивает такую возможность у операционной системы, как это сделала бы “полноценная” программа, а просит интерпретатор обратиться к операционной системе и прочитать файл. Если MQL-программе нужно сложить два числа, то она не может скомандовать процессору сложить два числа, она может попросить интерпритатор, чтобы тот обратился к процессору и уже процессор сложил два числа. MQL-программа запускается и выполняется интерпретатором, встроенным в клиентский терминал. Хорошо это или плохо? Для программ, ориетнтированных на работу только с MetaTrader 4, этот вариант подходит, как никакой другой. Именно благодаря такой организации работы терминала с пользовательскими программами, можно легко предоставить в распоряжение MQL-программ все сервисы, доступные пользователю в MetaTrader 4. Интерпретатор перехватывает все вызовы функций MetaTrader’а и выполняет их с помощью ядра клиентского терминала. Договоримся называть программным интерфейсом терминала
набор функций и возможностей, предостовляемых MetaTrader’ом MQL-программам. И заметим, что изучение языка программирования – это в основном изучение интерфейсов, доступных для программной реализации своих замыслов.


   Кроме того, что MQL-программам доступен интерфейc терминала, в новую версию языка была добавлена возможность выполнения функций, которые скомпилированы в так называемые динамически подгружаемые библиотеки, что позволяет выполнять функции написанные на других языках программирования. Таким образом, написание собственной динамически подгружаемой библиотеки позволяет самостоятельно создавать пользовательские интерфейсы и тем самым расширять функциональность MetaTrader’а. Но это можно будет обсуждать много позже и только тогда, когда будут полностью усвоены азы программирования на MQL 4; сейчас же стоит отметить лишь то, что многие функции операционной системы доступны для использования именно таким способом. Для ознакомления со списком таких функций советуем заглянуть в файл WinUser32.mqh, поставляемый вместе с MetaTrader 4.


   Теперь настало время обсудить типы программ, которые мы можем писать на MQL 4, они делятся на три типа:
. Советник;
. Пользовательский индикатор;
. Пользовательский скрипт.


   Именно эти три типа программ нам предлагает создать мастер создания программ в MetaEditor’е вызывается нажатием клавиш Ctrl+N).


   Советник – MQL-программа, которая прикрепляется к некоторому графику и выполняется на каждом тике, то есть после каждого изменения цены. Советники обычно используются для написания механических торговых систем. Собственно, само название “советник” говорит о том, что такая программа призвана советовать что-либо делать или не делать при каждом изменении цены. У программ типа советник есть эксклюзивная возможность – во время своего выполнения совершать сделки. Такой возможности нет у других типов пользовательских программ. Причём, совершать сделки советник может как реально так и виртуально. В последнем случае он отмечает на графике то место, где сделка могла бы быть совершена не осуществляя
реальной операции, он как бы советует её совершить.


   Пользовательский индикатор – MQL-программа, которая позволяет нам написать свой собственный технический индикатор. Часто бывает, что трейдеры хотят иметь больший набор индикаторов, чем тот, что предоставили в их распоряжение разработчики терминала. Спасти такую ситуацию призваны MQL-программы типа “пользовательский индикатор”. В этих программах мы можем рисовать свои собственные графики и выводить текстовые и символьные метки на графики котировок. Индикаторы, так же как и советники, прикрепляются для отображения к графику какого-либо торгового инструмента и выполняются при каждом изменении цены. Отличия состоят в том, что пользовательские индикаторы не могут осуществлять никаких сделок.
   Как уже было отмечено, советники и индикаторы выполняются при каждом изменении цены. Это ознаяает, что когда мы прикрепляем к какому-либо графику индикатор или советник, метатрейдер ставит его в некую внутреннюю очередь и, когда происходит изменение цены, все попавшие в эту очередь программы поочерёдно выполняются.


   Пользовательский скрипт – MQL-программа, которая пишется для выполнения каких-либо конкретных действий и выполняется всего один раз. Для повторного исполнения скрипта, его потребуется явно вызвать ещё раз, така как сам он не будет выполняться, как это происходит с советниками и индикаторами.


  Как мы видим, все три типа MQL-программ различаются, как способом взаимодействия с выполняющей их средой (то есть MetaTrader’ом), так и предназначением.


   Теперь перейдём к рассмотрению структуры программы.
   Как правило, для написания программы требуется воспользоваться мастером создания советников (вызывается нажатием клавиш Ctrl+N). В зависимости от типа программы, после окончания всех шагов выполнения мастера создания советника, в случае, если были выбраны советник или пользовательский индикатор, появится текст с тремя пустыми функциями или с одной пустой функцией, в случае, если был выбран скрипт.


   Прежде всего, стоит отметить, что программы на MQL 4 чётко структурированы, и их выполнение разделено на несколько этапов.


   Советники и индикаторы содержат в своих программах три этапа выполнения, которые представлены функциями init(),start() и deinit(). Скрипты состоят толко из функции start(). Такая структура может говорить о том, какие этапы проходит программа от её прикрепления к графику до того момента, когда она будет убрана с графика пользователем.


   Жизненный цикл всех программ, за исключением скриптов, включает: инициальзацию, выполнение основной части программы и деинициализацию. Эти этапы как раз и реализуются функциями init(),start() и deinit().
Не трудно догадаться, что основная работа выполняется в функции start(), так как именно она выполняется каждый раз, когда происходит изменение графика, к которому прикреплена программа.Кроме указанных функций, программа содержит заголовок. В этом заголовке, кроме коментариев-пояснений о создателях программы и их правах на программу, указываются параметры выполнения программы, как то: будет ли индикатор запущен в том же окне, что и график цены, или же он будет рисоваться в отдельном окне и прочие параметры. Все подробности будут нами рассмотрены в следующих статьях.


   На сегодня всё. Читателям рекомендуется внимательно посмотреть и сравнить исходные коды индикаторов и советников, поставляемых вместе с MetaTrader 4 в качестве примеров. Очень полезным было бы прочитать, как пользоваться MetaEditor 4 и научиться компилировать программы.


Александр Иванов
для Forex Magazine
fxtrade@tomsk.ru