Рекомендуемый ДЦ - Forex4you !

В прошлых уроках «Первые шаги по MQL», мы разобрались как работает терминал MetaTrader: что и где находится, как в терминале MT4 запускаются советники. Теперь можно переходить собственно к изучению языка MQL.

Давайте взглянем на типичную программу написанную на MQL4:

//±-----------------------------------------------------------------+
//| Tester.mq4 |
//| Copyright c 2010. |
//| http://mql4you.ru |
//±-----------------------------------------------------------------+
#property copyright "Copyright c 2010."
#property link "http://mql4you.ru"
//±-----------------------------------------------------------------+
int init() {return(0);}
//±-----------------------------------------------------------------+
int deinit() {return(0);}
//±-----------------------------------------------------------------+
int start() {return(0);}
//±-----------------------------------------------------------------+

Как видно из примера, программа представляет собой обычный текст состоящий из ключевых слов. Давайте разберемся что они означают:

Комментарий— это необязательная и неисполняемая часть программы. Готовая программа будет работать в соответствии с заложенным в неё кодом независимо от того, есть в ней комментарии или нет. Однако комментарии очень облегчают понимание кода программы. Они могут быть однострочными и многострочными. Однострочный комментарий — это любая последовательность символов, перед которой стоят две косые черты (//). Признак однострочного комментария заканчивается вместе с переводом строки. Многострочный комментарий начинается символами /* и заканчивается символами */

Давайте удалим комментарии и посмотрим что получиться:

#property copyright "Copyright c 2010."
#property link "http://mql4you.ru"
int init() {return(0);}
int deinit() {return(0);}
int start() {return(0);}

У нас осталось всего 5 строк. Что же еще можно удалить из программы, написанной на MQL,  не нарушая ее работоспособности?

У каждой MQL4 программы можно указать дополнительные специфические параметры #property, которые помогают клиентскому терминалу Metatrader 4 правильно обслуживать программы без необходимости их явного запуска.

#property идентификатор значение

Идентификатор

 

 

Тип

 

 

Описание

 

 

link string ссылка на сайт компании-производителя
copyright string название компании-производителя
stacksize int размер стека для рекурсивных вызовов
library   библиотека; не назначается никакой стартовой функции, не удаляются функции, которые не вызываются из других функций
indicator_chart_window void выводить индикатор в окно графика
indicator_separate_window void выводить индикатор в отдельное окно
indicator_buffers int количество буферов для расчета индикатора, максимум до 8
indicator_minimum double нижнее ограничение шкалы отдельного окна индикатора
indicator_maximum double верхнее ограничение шкалы отдельного окна индикатора
indicator_colorN color цвет для вывода линии N, где N от 1 до 8
indicator_widthN int толщина линии N, где N от 1 до 8
indicator_styleN int стиль линии N, где N от 1 до 8
indicator_levelN double горизонтальный уровень N в отдельном окне индикатора, где N от 1 до 8
indicator_levelcolor color цвет горизонтальных уровней индикатора
indicator_levelwidth int толщина горизонтальных уровней индикатора
indicator_levelstyle int стиль горизонтальных уровней индикатора
show_confirm void выводить окно подтверждения перед запуском скрипта
show_inputs void выводить окно со свойствами перед запуском скрипта и запретить вывод окна подтверждения

Как видно из таблички, в нашей программе указаны необязательные параметры «ссылка на сайт» и «название компании-производителя». Удалим и их из нашей программы:

int init() {return(0);}
int deinit() {return(0);}
int start() {return(0);}

Осталось всего 3 строчки. Можно ли еще упростить?

В MQL4 существуют 3 функции с предопределенными именами:

init() — функция, вызывающаяся в процессе инициализации модуля. В случае ее отсутствия при инициализации не вызывается никакой функции.

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

deinit() — функция, вызывающаяся в процессе деинициализации модуля. В случае ее отсутствия при деинициализации не вызывается никакой функции.

Как видно из описания функции init() и deinit() можно тоже опустить при написании. Удалим их из нашей программы:

int start() {return(0);}

Осталась всего 1 строка. Это описание функции start() которую будет вызывать терминал MT4. Если откомпилировать данную программу — не будет никаких ошибок.

А можно ли еще сократить программу? Да можно. Можно убрать оператор return.

Получим:

int start() {}

При компиляции опять не будет ошибок. Но больше сокращать нечего.

Вот мы и получили минимально возможную программу на языке MQL4.