Русский

Учебник по MQL4  Редактор MetaEditor  Создание и использование программ

Создание и использование программ


Прикладные программы на языке MQL4 - эксперты, скрипты и индикаторы - создаются с помощью редактора MetaEditor.

Исполняемый файл редактора MetaEditor (MetaEditor.exe) поставляется в составе клиентского терминала и находится в корневом каталоге терминала. Руководство по работе в редакторе MetaEditor открывается при нажатии клавиши F1. Здесь рассматриваются общие сведения, которые необходимы для создания новых программ. Открыть редактор для использования можно, например, кликнув по имени файла MetaEditor.exe или по ярлыку, предварительно расположенному на рабочем столе.

Структура клиентского терминала


Для удобства работы в редактор MetaEditor встроены панели "Навигатор" (Ctrl+D) и "Инструментарий" (Ctrl+T).


Рис. 25. Расположение окон в редакторе MetaEditor.

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

Создание новой программы


Обычно при создании новой программы окна инструментария и навигатора остаются скрытыми, и внимание программиста сосредоточено на создаваемой программе. Для создания новой программы необходимо воспользоваться пунктом меню редактора Файл >> Создать или кнопкой создания новых файлов .

В результате этого действия "Мастер создания Советника" предложит выбрать вид создаваемой программы:



Рис. 26. Выбор вида программы при её создании.

Если требуется создать эксперт, то необходимо сделать отметку в графе Советник и нажать кнопку Далее. В следующем окне необходимо вписать название создаваемого эксперта. Пусть этот эксперт называется create.mq4.

Имя создаваемого файла указывается без расширения (указания типа).

Мастер создания советника выведет окно, в котором необходимо заполнить несколько полей ввода:


Рис. 27. Окно для указания общих параметров советника.

После клика по кнопке Готово в основном окне отобразится некоторый набор текста, и одновременно с этим в файловой системе и в окне навигатора появится полноценное название созданного нами эксперта create.mq4.


Рис. 28. Отображение созданного файла эксперта в файловой системе и в окне навигатора.

Посмотрим, какой текст программы был сгенерирован редактором MetaEditor:

//+------------------------------------------------------------------+
//| create.mq4 |
//| John Smith |
//| www.company.com |
//+------------------------------------------------------------------+
#property copyright "John Smith"
#property link "www.company.com"

//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----

//----
return(0);
}
//+------------------------------------------------------------------+

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

В программе имеются три специальные функции (init(), start() и deinit() ), содержанием каждой из которых является всего один оператор return(0) выхода из функции. Таким образом, код программы, сгенерированный мастером создания советников, являет собой лишь шаблон, используя который программист может создать новую программу. Конечный код программы не обязательно должен содержать все указанные специальные функции. Они представлены в программе мастером создания программ лишь потому, что обычная программа средней сложности, как правило, содержит все эти функции. Если же использование какой-либо из функций не предполагается, то её описание можно удалить.

Следующие строки в коде программы также можно опустить:

#property copyright "John Smith"
#property link "www.company.com"

Несмотря на то, что эта программа не несёт никакой полезной нагрузки, она составлена корректно с точки зрения соблюдения синтаксиса. Поэтому, вообще говоря, эту программу можно было бы скомпилировать и запустить на выполнение. И она исполнялась бы как любая полноценная программа (при этом не выполнялись бы никакие вычисления ввиду их отсутствия в исходном коде).

Внешний вид программы


Использование подробных комментариев в программе крайне желательно, а в некоторых случаях и жизненно необходимо. Следует особо подчеркнуть, что программисту приходится не только составлять программы, но и читать их. В ряде случаев при чтении программы могут возникнуть значительные затруднения. Опыт многих программистов свидетельствует о том, что логика собственных рассуждений, на основе которых была построена программа, забывается (в случае чужой программы - неизвестна) и без построчных комментариев понять смысл иных фрагментов кода довольно сложно, а в некоторых случаях - просто невозможно.

Корректно составленная программа обязательно содержит комментарии.

Основные достоинства комментариев состоят в следующем:

  • Во-первых, комментарии позволяют отделить одну логически обособленную часть программы от другой. Гораздо легче читать удобно форматированный текст, нежели текст, составленный сплошным потоком.
  • Во-вторых, построчные комментарии позволяют пояснить обычными словами, что имел ввиду программист в каждой отдельно взятой строке кода.
  • В-третьих, в верхней части программы можно указать некоторый набор сведений, касающихся программы в целом: фамилию и реквизиты автора (в том числе, авторский сайт, адрес электронной почты и пр.), назначение программы (является она законченной торгующей программой или библиотечной функцией), основные её характеристики и ограничения, а также другую полезную информацию на усмотрение автора.

Каждый программист по своему вкусу может выбрать любой удобный ему стиль комментариев. Стиль, предлагаемый разработчиками языка MQL4, представлен в эксперте create.mq4. Рассмотрим основные особенности любого приемлемого стиля оформления программы.

1. Длина строки кода не должна превышать размер основного окна. Это ограничение не является формальным требованием синтаксиса языка, однако чтение программы, содержащей длинные строки, очень неудобно. Любую длинную строку всегда можно расположить в несколько программных строк, так, чтобы все они были полностью видны на экране. Для монитора с разрешением 1024 х 768 пикселей максимальная длина строки составляет 118 символов.

2. Объявление переменных осуществляется в начале программы. К каждой переменной желательно дать описание в комментарии: кратко отметить сущность и (если необходимо) особенности использования переменной.

3. Каждый оператор желательно располагать в отдельной строке.

4. Построчный комментарий, если он присутствует в строке, должен начинаться с 76 позиции (рекомендуется для мониторов 17" с разрешением 1024 х 768 пикс.). Это требование также не является обязательным. Например, если строка кода занимает 80 позиций, то её не обязательно разбивать на две строки, можно написать комментарий, начиная с 81 позиции. Обычно содержательная часть программы (код) составляют строки длиной около 50 символов, поэтому построчный комментарий выглядит как столбец текста в правой части экрана.

5. Для разделения логически обособленных фрагментов используются строки комментария на всю ширину (118 символов).

6. При использовании фигурных скобок обязательно используется отступ на величину табуляции (обычно 3 символа).

Посмотрим? как может выглядеть эксперт после того, как в него вписан программный код. В данном случае логика программного алгоритма не обсуждается. Здесь важно отметить только подробности оформления программы. Комментированная программа (эксперт create.mq4) может выглядеть, например, так:

//--------------------------------------------------------------------
// create.mq4
// Предназначен для использования в качестве примера в учебнике MQL4.
//--------------------------------------------------------------------
int Count=0; // Глобальная перемен.
//--------------------------------------------------------------------
int init() // Спец. ф-ия init()
{
Alert ("Сработала ф-ия init() при запуске"); // Сообщение
return; // Выход из init()
}
//--------------------------------------------------------------------
int start() // Спец. ф-ия start()
{
double Price = Bid; // Локальная перемен.
Count++; // Счётчик тиков
Alert("Новый тик ",Count," Цена = ",Price);// Сообщение
return; // Выход из start()
}
//--------------------------------------------------------------------
int deinit() // Спец. ф-ия deinit()
{
Alert ("Сработала ф-ия deinit() при выгрузке"); // Сообщение
return; // Выход из deinit()
}
//--------------------------------------------------------------------

Легко увидеть, что законченные смысловые блоки программы отделены друг от друга комментарием - сплошной строкой. Таким способом выделяются специальные, пользовательские функции и головная часть программы:

//--------------------------------------------------------------------

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

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

int Count=0;                                    
int init() {
Alert ("Сработала ф-ия init() при запуске");
return; }
int start() {
double Price = Bid;
Count++;
Alert("Новый тик ",Count," Цена = ",Price);
return; }
int deinit(){
Alert ("Сработала ф-ия deinit() при выгрузке");
return;}

Компиляция программы


Чтобы программу можно было использовать на практике, её необходимо скомпилировать. Для этого нужно воспользоваться кнопкой (F5) в редакторе MetaEditor. Если в программе нет ошибок, то программа будет скомпилирована, а в окне инструментария появится сообщение:


Рис. 29. Сообщение редактора об успешной компиляции программы.


При этом в соответствующем каталоге (в данном случае в Каталог_терминала\experts) появится новый файл create.ex4. Это - программа, готовая к работе в клиентском терминале MetaTrader 4. В момент компиляции в том же каталоге сохранится также последняя редакция исходного текста программы с тем же названием, в нашем случае - это файл create.mq4.

Одновременно с этим в окне навигатора клиентского терминала, в разделе Советники появится строка с названием созданного эксперта:


Рис. 30. Отображение названия эксперта в окне навигатора клиентского терминала.

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

Использование программы в практической работе


Если прикладная программа (эксперт, скрипт, индикатор) успешно скомпилирована и её название появилось в окне навигатора клиентского терминала, то её можно использовать в практической работе. Для этого достаточно мышкой перетащить соответствующий значок из окна навигатора в окно финансового инструмента. Это будет означать, что программа присоединена к окну графика финансового инструмента и будет запущена на исполнение.

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

Здесь необходимо ещё раз подчеркнуть, что:

Любые прикладные программы (эксперт, скрипт, индикатор) могут быть использованы для торговли только в составе клиентского терминала MetaTrader 4 при условии его подключения к серверу (дилинговому центру) с помощью сети Интернет; никакие программы не могут быть установлены пользователем на сервере или использоваться в терминалах других производителей.

Иными словами, если трейдер хочет использовать в своей работе какую-либо прикладную программу, он должен включить свой компьютер, открыть клиентский терминал MetaTrader 4 и запустить в окне финансового инструмента исполняемый файл *.ex4. При исполнении программы (в зависимости от её алгоритма) могут быть сформированы торговые приказы, которые будут отправлены на сервер, в результате чего и будет осуществляться управление торговлей.