Статьи по MQL4
Создание скрипта

Создание скрипта


например, forex

Мы уже имеем необходимый минимум знаний, чтобы написать простейшую программу на MQL-4. Для этого я выбрал скрипт, а не индикатор или советник, так как в них было бы слишком много новой информации. Сделаем скрипт, который выполняет ту же функцию, что и строка меню терминала «Файл»-«Сохранить как» (Ctrl+S). Для этого начинаем в MetaEditor стандартную процедуру — меню «Файл» — «Создать» (Ctrl+N), появляется диалоговое окно, ставим галочку напротив поля «Пользовательский скрипт»:

 
 

Идем «Далее», открывается новое диалоговое окно. Заполняем поля «Имя», «Автор» и «Ссылка». Поля «Автор» и «Ссылка» MetaEditor в дальнейшем запомнит и будет подставлять их значения при создании каждого нового исполняемого файла. Жмем кнопку «Готово» и скрипт создан.

 
 

Получили простейший код, сгенерированный «Мастером создания советника».

 
 

Код состоит из трех частей:
1. Шапка
2. Директивы компилятору
3. Функция start().
Шапка

 
 

кодом не является, так как представляет 5 строк комментариев. Комментарий — любая строка, которая начинается с двойной косой черты, компилятор игнорирует комментарии, ему нет дела до того, есть ли там ошибки или нет. Но комментарии упрощают понимание программ, в них можно делать пояснения о назначении тех или иных функций или переменных. Экономить на них нецелесообразно, так как спустя какое-то время вы и сами не всегда сможете вспомнить все нюансы, заложенные в программе. Мы видим, что автоматом были вставлены как комментарии значения полей «Имя», «Автор» и «Ссылка». При опубликовании кода это будет удобно видеть.

Директивы компилятору

 
 

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

 
 

Функция start()

 
 

Самая важная часть, именно здесь мы задаем тот алгоритм, который и должен выполняться. Любая программа на MQL-4 должна иметь как минимум одну функцию, по умолчанию эта функция называется start(). Первые три строчки — это опять таки комментарии, для любой функции необходимо писать минимальный комментарий, объясняющий назначение функции, лучше сразу себя приучить к этому. Времени для написания требует пару минут, а в последствии может сэкономить часы, и не только для вас, но и для тех, с кем вы поделитесь кодом. Не зря говорят, что иногда проще написать самому, чем разбираться в чужом коде. Мы видим, что функция выделена визуально как блок, что позволяет легко видеть, где заканчивается одна и начинается другая функция. Сама функция может быть разделена на две части:

 
 

содержит имя функции и тип возвращаемого значения данной функцией, а

 
 

само тело функции.
Тело функции всегда заключено в фигурные скобки, и в конце функции (перед закрывающей фигурной скобкой) практически всегда стоит оператор возврата. Справка по оператору:

 
 

В данном случае мы видим, что функция start() возвращает значение 0 (ноль). Это значение мы использовать в данном случае не будем, поэтому можем спокойно закомментировать эту строчку. Наша задача: вывести значения Open, Close, Low, High, Time и Volume для каждого бара(свечи) на графике. Доступ к каждому бару мы можем получить по индексу, таким образом нам необходимо сделать пробег по барам от самого последнего бара до нулевого. Для этого существует оператор цикла for(). Из справки:

 
 

На открытом графике обычно присутствует не более Bars баров. Нам необходимо опросить их все, начиная с самого первого по истории, имеющего индекс Bars-1, и заканчивая последним, имеющим нулевой индекс. Объявим переменную целого типа, назовем ее index и напишем оператор цикла:
for (int index=Bars-1; index>=0; index-) { // Выведем High, Low, Open, Close для бара с индексом index }
Разберем цикл:
int index=Bars-1 объявили переменную index и задали для нее начальное значение Bars-1, то есть мы пойдем от самого первого бара на графике
index>=0 задали условие, при котором тело цикла выполняется. Таким образом, пока индекс больше или равно нулю, тело цикла выполняется
index- равносильно записи index= index-1 . Уменьшение значения на 1 называют декрементом, а увеличение инкрементом. Если индекс больше или равен нулю, выполняется тело цикла, после чего индекс уменьшается на единицу. Таким образом, когда-нибудь наступит момент, при котором index будет меньше нуля, в этот момент цикл и прервется.
{ // Выведем High, Low, Open, Close для бара с индексом index } Тело оператора цикла, вместо комментария нам необходимо вставить настоящие операторы вывода значений. Для этого существует оператор Print()

 
 

Добавим в тело цикла оператор Print(High[index],««,Low[index],» «,Open[index],» «,Close[index],» бар=»,index); Он выводит в Журнал советников и индикаторов значения High, Low и так далее. Скрипт готов, жмем F5 (Компилировать) — если ошибок нет, то скрипт готов к использованию.

 
 

Возвращаемся в терминал, открываем папку «Скрипты» и набрасываем наш скрипт на график EURUSD D1. Открываем окно «Терминал» (Ctrl+T), переходим на закладку «Эксперты» и видим результат работы скрипта. После завершения работы скрипт удаляется с графика : 2006.01.07 23:35:31 OutPrint EURUSD,Daily: removed В журнал экспертов можно выводить любую информацию с помощью оператора Print, при это выводится информация в два столбца. Первый столбец содержит дату и время вывода, а второй столбец содержит название скрипта, название инструмента, тайм-фрейм и двоеточие, после которого выводится результат работы скрипта. В этом простейшем скрипте мы использовали две, пожалуй самые нужные, функции в языке MQL-4, for() и Print(). Если for() используется для выполнения однообразных операций (работа в цикле), то Print() самая удобная функция для протоколирования работы советников и индикаторов, а также для отладки кода. Если код программы не работает, или работает не так, как ожидалось, то самое простое — это использовать вывод в лог переменных программы для анализа ее работы. Обычно этого достаточно для нахождения ошибки в своем коде.

 
 

И напоследок, лог журнала закладки «Эксперты» содержат результат работы нашего скрипта и любого другого советника или индикатора. Если нажмем на любой строке правую кнопку мышки, то появится контекстное меню.

Выберем пункт «Открыть», появится диалоговое окно выбора :

 
 

Логи экспертов (и индикаторов) хранятся в папке Program FilesMetaTrader 4expertslogs, каждый день создается новый файл. Наш лог (в котором находятся результаты работы скрипта) самый последний по времени и дате. Откроем его:

 
 

Таким образом, мы зафиксировали работу нашего скрипта, поэтому Print() очень удобно использовать для отладки кода в онлайне. Сам скрипт можно взять здесь


Перейти к статье «Скрипт – мостик в Microsoft Excel».
 
+7 (495) 710-76-76
8 (800) 200-01-31
по России бесплатно

закрыть

Вход в личный кабинет

Для счета alpari.classic введите номер счета (буква и 4 цифры) и пароль в ЛК.

Для счетов alpari.micro и alpari.partner введите логин и пароль в МТ.

Зарегистрироваться!Забыли пароль?

 
Rambler's Top100