Программирование на MQL 4: Введение.
|

Программирование на MQL 4: Введение.

   В предыдущем номере журнала Forex Magazine мы начали серию статей предваряющих выход новой версии информационно-торговой системы Meta Trader 4. В этой статье мы постараемся описать изменения, которые коснулись встроенного в систему языка программирования MQL 4.


   Мы постараемся построить своё изложение таким образом, чтобы материал был понятен как читателям, имеющим опыт программирования для Meta Trader, так и впервые знакомящимся с тонкостями воплощения своих идей на языке MQL 4.


   Итак, начнём с описания структуры программы. Программы на языке MQL 4 состоят из трёх основных частей: инициализация, реализация алгоритма и деинициализация.
   Инициализация – этап, который выполняется при первом запуске программы; он оформляется в виде функции init. Обычно на этапе инициализации выполняются проверки параметров и инициализируются внутренние переменные для корректной работы программы.


   Деинициализация – завершающий этап выполнения программы, он оформляется в виде функции deinit. На этом этапе, по желанию, можно удалить с графика последствия работы программы или же выполнить ещё какие-то мероприятия по “заметанию следов”.


   Основным же этапом программы является процедура start. Именно здесь должен быть реализован алгоритм вашего индикатора, советника или скрипта.


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


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


   Хоть синтаксис языка программирования изменился, при его изучении не создаётся впечатления, что изучаешь совершенно новый язык программирования. Переход на MQL 4 мы бы назвали “мирной революцией”. Кардинальные изменения коснулись способа работы с параметрами, передаваемыми в программы, и уже упомянутого разделения программы на три этапа. По нашему мнению, лишь эти нововведения потребуют переосмысления стиля программирования. Остальные изменения в программном интерфейсе, в частности существенное расширение набора функций, можно трактовать лишь как огромный шаг вперёд с целью обеспечить программистов более удобным инструментарием для воплощения в жизнь уникальных задумок!
   Для иллюстрации изменений в синтаксисе языка, мы приводим программу, написанную на MQL 4 – это уже знакомый читателям по предыдущим выпускам Forex Magazine индикатор “Медианное сглаживание”. Заметим, что перенос программы с MQL II на MQL 4 не потребовал особых усилий, более того, благодаря появлению набора функций для работы с массивами, программа упростилась. Вместо самостоятельной реализации в программе сортировки массива методом пузырька, появилась возможность использовать встроенной функции сортировки.


   Приведённый пример индикатора на MQL 4 подробно прокомментирован, и читателю предлагается самостоятельно разобраться с тем, что написано в этой программе.


   #define copyright “Copyright c 2004, Horn.”
   #define link “alexander@indus.ru


   // Объявление глобальных переменных
   double g_ValuesArray[5];


   // Функция инициализации пользовательского индикатора
   int init(int Range=5)
   {
   int err = 0;


   // Если размер массива отличается от того, что мы
   // указали при создании переменной g_ValuesArray
   // то есть возможность изменить его в ходе выполнения программы.
   if(Range != 5) {
   err = ArrayResize(g_ValuesArray, Range);
   if(err != Range) {
   Alert(“Невозможно выделить память под массив”);
   err = -1;
   }
   }


   return(0);
   }


   // Функция деинициализации пользовательского индикатора
   int deinit()
   {
   return(0);
   }


   // Главная функция пользовательского индикатора
   int start()
   {
   int shift = 0;
   int ux = 0;
   int size = ArraySize(g_ValuesArray);


   for( shift = size; shift < (Bars – size); shift++) {
   // помещаем значения из массива Open
   // во временный массив, с которым мы и будем
   // дальше работать
   ArrayCopy(g_ValuesArray, Open, shift, size);


   // сортируем массив но уже не методом пузырька
   // а встроеной в MQL4 aetrwbtq для сортировки массивав.
   ArraySort(g_ValuesArray);


   if(MathMod(size,2) != 0) {
   SetIndexValue(0,shift, g_ValuesArray[(size – 1)/2]);
   } else {
   SetIndexValue(0,shift, (g_ValuesArray[(size/2)-1]+g_ValuesArray [(size/2)])/2);
   }
   }


   return(0);
   }


   На этом мы прервём наш рассказ об MQL 4 до следующего номера Forex Magazine. Будем надеяться, что эта статья поможет многим получить первое представление о новом языке программирования пользовательских индикаторов, функций и советников для новой информационно-торговой системы Meta Trader 4.


Александр Иванов
для Forex Magazine