Знакомство c MQL5 и средой разработки

Одним из важнейших изменений в языке MQL5 при переходе к его новой инкарнации в MetaTrader 5 явилась поддержка концепции объектно-ориентированного программирования (ООП). Если предыдущий MQL4 (язык MetaTrader 4) было принято сравнивать в момент его появления с языком программирования C, то для MQL5 уместно проводить параллели с C++. Справедливости ради отметим, что сегодня все инструменты ООП, присутствовавшие изначально только в MQL5, уже перенесены и в MQL4, но, тем не менее, для пользователей, мало знакомых с программированием, ООП по-прежнему кажется чем-то чересчур сложным.

Эта книга призвана, в некотором смысле, сделать сложное простым. Она является не заменой, а дополнением к справочному руководству по MQL5, которое поставляется вместе с терминалом и также доступно на сайте mql5.com.

В данной книге мы последовательно расскажем о всех составных частях и приемах программирования на MQL5, двигаясь небольшими шагами — так, чтобы каждая итерация была понятной, а технология ООП постепенно раскрывала свой потенциал, наиболее заметный, как и в случае с любым мощным инструментом, только при правильном, обоснованном применении. В результате разработчики MQL-программ смогут выбирать наиболее подходящий для себя и для конкретной задачи стиль программирования — не только объектно-ориентированный, но и "старый" процедурный, а также комбинировать их в произвольных сочетаниях.

Пользователей торгового терминала можно условно разделить на категории "программистов" (тех, кто имеет опыт программирования хотя бы на одном языке) и "непрограммистов" ("чистых" трейдеров, которые интересуются возможностью кастомизации терминала с помощью MQL5). Первые могут, при желании, пропустить первую и вторую части книги, описывающую базовые понятия языка, и сразу приступить к изучению специфических API (Application Programming Interface — программный интерфейс), встроенных в MetaTrader 5. Для вторых рекомендуется поступательное чтение.

Из представителей категории "программистов" наибольшую фору в освоении MQL5 получат знатоки C++ — в силу похожести синтаксисов MQL5 и С++. Однако эта "медаль" имеет и обратную сторону. Дело в том, что MQL5 все же не полностью соответствует C++ (особенно, если сравнивать со свежими стандартами) и потому зачастую попытки написать ту или иную конструкцию по привычке "как на плюсах" будут прерываться неожиданными ошибками компилятора. Мы постараемся обращать внимание на данные отличия при рассмотрении конкретных элементов языка.

Технический анализ, выполнение торговых приказов или интеграция со внешними источниками данных — все эти функции доступны пользователям терминала как из пользовательского интерфейса, так и через программные средства, встроенные в MQL5.

И поскольку MQL-программы должны выполнять столь разные функции, в MetaTrader 5 поддерживается несколько специализированных типов программ. Это является стандартным приемом во многих программных системах. Например, в системе Windows помимо наиболее привычных нам программ с оконным интерфейсом существуют  консольные программы с управлением из командной строки и службы.

В MQL5 же доступны следующие типы программ:

  • индикаторы — программы для графического отображения массивов данных, рассчитываемых по заданной формуле, обычно на основе рядов котировок;
  • эксперты — программы для полной или частичной автоматизации торговли;
  • скрипты — программы для выполнения одноразовых действий;
  • сервисы — программы для выполнения постоянных фоновых действий.

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

Основополагающая техническая особенность торговой системы MetaTrader заключается в том, что всё управление осуществляется в клиентском терминале, и инициированные в нем команды отправляются на сервер. Иными словами, прикладные MQL-программы могут работать только внутри клиентского терминала, причем большинство из них требует "живого" подключения к серверу для правильного функционирования. На сервере никакие прикладные программы не устанавливаются. Сервер лишь обрабатывает приказы, поступающие со стороны клиентского терминала, и передает обратно на него изменения торгового окружения. Эти изменения становятся также доступными и для MQL-программ.

Большинство типов MQL-программ выполняется в контексте графика, то есть программу нужно "набросить" на требуемый график, чтобы запустить. Исключение составляет только особый тип — сервисы: они предназначены для работы в фоне, без привязки к графику.

Напомним, что все MQL-программы находятся внутри рабочей папки MetaTrader 5, во вложенной папке с именем вида /MQL5/<тип>, где <тип> — это, соответственно:

  • Indicators
  • Experts
  • Scripts
  • Services

В зависимости от способа установки MetaTrader 5 путь к рабочей папке может различаться (в частности, при ограниченных правах пользователя в системе Windows, в обычном режиме или portable). Например, он может быть:

C:/Program Files/MetaTrader 5/

или

C:/Users/<username>/AppData/Roaming/MetaQuotes/Terminal/<instance_id>/

Пользователь может узнать фактическое размещение данной папки, выполнив команду Файл -> Открыть каталог данных (она имеется как в терминале, так и в редакторе). Кроме того, при создании новой программы Вы можете не думать о поиске правильной папки за счет использования встроенного в редактор Мастера MQL. Он вызывается командой Файл -> Новый и позволяет выбрать требуемый тип MQL-программы. Соответствующий текстовый файл с заготовкой исходного кода будет автоматически создан в нужном месте после завершения Мастера и открыт для редактирования.

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