Программирование на MQL 4: Сравнение с EasyLanguage и MQL II
|

Программирование на MQL 4: Сравнение с EasyLanguage и MQL II

   До недавнего времени бесспорным лидером среди торговых систем для торговли на финансовых рынках оставалась программа TradeStation фирмы Omega Research. Языком программирования для написания индикаторов и торговых систем для TradeStation является удобный и лёгкий в изучении EasyLanguage. Естественно, что множество энтузиастов и профессионалов создало огромное количество индикаторов и торговых систем для этой системы. Программный комплекс, в который входит торговый терминал TradeStation, на долго станется образцом для программных систем своего класса, но последнее время про коллектив разработчиков столь знаменитой торговой платформы ничего не слышно и, наверное, вряд ли стоит надеяться на её дальнейшее развитие и поддержку.


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


   Так как при выборе платформы трейдеры, собирающиеся писать свои собственные индикаторы и торговые системы, должны обратить пристальное внимание на язык программирования, то для того, чтобы помочь им сориентироваться в сложившейся ситуации, мы сравним три языка программирования, используемые в современных торговых платформах. Первые два языка программирования – это уже упоминавшийся EasyLanguage для терминала TradeStation и используемый в настоящих версиях торгового терминала MetaTrader язык программирования MQL II. Третьим, в связи с грядущим выходом в свет новой версии торгово-информационного комплекса MetaTrader 4, в наш обзор попал использующийся в нём язык программирования MQL4.


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


   Итак, для начала следует отметить, что официальное описание языка MQL II гласит, что он синтаксически сильно похож на EasyLanguage, а это означает, что программист, хорошо знакомый с последним, сможет легко понять то, что написано в программе на MQL II.


   Видимо, когда перед группой разработчиков фирмы MetaQuotes Software встал вопрос о включении в первые версии терминала MetaTrader удобного и лёгкого в изучении языка программирования, они сочли, что правильнее предоставить в распоряжение писателей программ язык очень сильно похожий на знакомый и хорошо зарекомендовавший себя язык EasyLanguage. Это решение избавило многих программистов от трудностей, связанных с переходом на новый язык программирования, и дало возможность большой аудитории трейдеров почти безболезненно воспользоваться своими наработками для TradeStation на новой платформе.


   В подтверждение сказанного, далее приводятся синтаксически верные выражения на языках EasyLanguage и MQL II:


   Пример кода на  EasyLanguage
 
If Close[0] > Close[1] then begin
    Condition1 = Low[0] < Low[1] and Open[0] < Open[1];
    Condition2 = RSI(Close, 14) < 30;
End;
 
   Пример кода на MQL II
 
If Close[0] > Close[1] then begin
    Condition1 = Low[0] < Low[1] and Open[0] < Open[1];
    Condition2 = iRSI(14,0) < 30;
End;


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


   Со временем стали ясны слабые стороны MQL II и, разрабатывая новую версию MetaTrader’а, в MetaQuotes Software приняли решение предложить для написания программ новый язык программирования MQL 4, которому, похоже, удалось сочетать в себе лучшие стороны его двух “предшественников”. Кроме того, в нём появились очень полезные новшества, расширяющие возможности программистов.


   Постараемся показать несколько наиболее важных, на наш взгляд, отличий MQL 4 от EasyLanguage и MQL II.


   1. Структура программы на MQL 4 приобрела чёткое разделение на блоки, выполняемые каждый в своё время. Программа гарантированно состоит из функций init(), deinit() и statr(), которые выполняются соответственно при запуске, завершении и в процессе работы программы. Программы на EasyLanguage и MQL II содержали все вызовы и директивы в одно общем блоке и многие, особенно начинающие программисты, затруднялись написать блок кода, который выполнялся бы лишь раз, при первом запуске программы.


   2. Индикатор, написанный на EasyLanguage, может содержать максимум только четыре линии индикатора. Индикатор, написанный на MQL II, может отрисовать ещё меньше линий индикатора – всего две линии. Язык MQL 4 имеет функцию SetIndexValue, которая в качестве первого параметра принимает номер индекса данных отрисовываемой линии, и, судя по тому, что этот индекс имеет тип integer, то теоретически эта функция могла бы задавать данные для 32768 линий. Реально же это число, скорее всего, будет ограничено каким-либо разумным числом до тридцати.


   3. Языки EasyLanguage и MQL II имели возможность работать только с массивами фиксированной длины, причём о размере массива программисту следовало догадываться ещё на этапе написания программы. Это вносило определённые ограничения в алгоритмы. MQL 4 содержит всё необходимое для работы с массивами, размер которых может быть изменён программистом динамически – в процессе работы программы.


   4. Язык MQL 4, благодаря возможности импорта функций, из любой динамически подключаемой библиотеки (из файлов с расширением .dll) может теперь выполнять всевозможные системные вызовы. Благодаря этому можно устранить недостаток почти любой недостающей функции.


   5. Синтаксис EasyLanguage при выставлении ордеров на покупку, продажу и закрытие ордеров имеет массу нюансов. Язык MQL 4 унаследовал от MQL II удобный, с точки зрения программиста, способ вставления ордеров.


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


   7. Некоторые изменения в синтаксисе позволили писать более читаемые программы. Отказ в MQL 4 от использования операторных скобок “Begin … End”, используемых, как в MQL II, так и в EasyLanguage, привёл к тому, что исходные коды программ воспринимаются значительно легче, в таких программах в первую очередь видна суть. Несмотря на кажущуюся незначительность этого изменения, оно может значительно облегчить жизнь программистам, особенно начинающим.


   8. В MQL 4 избавились от неоднозначности оператора “=”, который в языках MQL II и в EasyLanguage, в зависимости от контекста использования, означал два разных действия: присваивание нового значения переменной и сравнение двух значений. Теперь в случае с присваиванием используется “=”, а для проверки на равенство двух значений используется “==”.


   Для объективности следовало бы заметить, что существуют торговые системы, которые для программирования предлагают использовать такие развитые языки программирования, как VBScript и JavaScript. Но эти языки в силу своей универсальности несколько сложны для изучения новичками и, в особенности, людьми, далёкими от программирования.


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