Содержание
Здравствуйте! Начнем урок с самого простого, создадим свой первый скрипт. Почему скрипт? Да потому что у него всего 1 функция, которая не имеет никаких параметров.
Что такое скрипт на форекс
Скрипт MQL4 – это программа для Meta Trader, которая выполняется какое-либо действие в терминале только один раз. Скрипт устанавливается (в простонародье — кидается) на график и происходит обработка функции OnStart(), после чего скрипт удаляется с графика. На этом его работа завершена. Выполнение в большинстве случаев осуществляется за один тик (по приходу свежих котировок), на который он попал при установке. Есть скрипты, которые с функцией while() могут находиться на графике до момента его закрытия, либо перезагрузки терминале, но сейчас речь не о них.
Зачем же нужен скрипт? Это простая программа, но применений ей много. Из самого простого скрипт может изменить цвет или масштаб графика, вид отображения свечей, выдать текущий спред или цену Open/Close, High/Low заданного количества баров, а также открыть или закрыть существующий график. Из более сложного: рассчитать безубыток открытых позиций, суммарный лот ваших ордеров, их количество, направление и отобразить цели. Может открыть, модифицировать или закрыть существующие ордера трейдера по заведомо заданным настройкам, записать котировки в отдельный файл на диске, закрыть терминал и т.п. Проще говоря — скрипт mql4 может выполнить любое действие, которое не требует его постоянного нахождения на графике. Выполнил и удалился.
Чтобы создать скрипт, нужно в меню нажать ‘Файл’ -> ‘Создать’. Выбираем пункт ‘Скрипт’, жмем далее.
В появившемся окне заполняем строки по вашему усмотрению. В начале строки ‘Имя’ стоит запись Scripts\, это папка, куда должен быть сохранен новый скрипт. Если ее задать другой, то терминал просто не увидит эту программу. Для скриптов, индикаторов, советников и библиотек существуют свои собственные папки.
Назовем свой первый файл 1.0 Hello World. Автора и ссылку можно оставить по умолчанию, это не имеет сейчас значения и по желанию в самой программе это можно всегда изменить. Внешние переменные скрипта мы задавать не будем, в данном примере они не нужны, плюс их можно указать потом. Жмем ‘Готово’.
Перед нами появился экран кода данной программы. Рассмотрим его подробнее.
С 1 по 5 строку идет текстовая запись — комментарии, это можно понять по двух наклонным линиям //
Это означает, что данный текст не учитывается в коде программы и виден только программисту, это свое рода напоминание, подсказка. Данные комментарии нужны в коде, чтобы по началу в нем просто не потеряться, о чем я говорил в предыдущем посте.
Далее с 6 до 9 строчку идет свойство программа #property. Оно задается один раз для всей программа. Свойства бывают разные и отличаются для скриптов и индикаторов. В данном примере свойства простые и отображают ту информацию, что мы указали при создании скрипта. А именно:
- copyright — наименование компании или программиста, который создал эту программу.
- link — ссылка на веб сайт разработчика, можете указать свой сайт или ссылку на профиль MQL5.Community.
- version — текущая версия программы. По умолчанию 1.0, далее пользователь уже сам увеличивает версию по мере модификации кода.
- strict — параметр строгой проверки на ошибки, он просто должен быть прописан, чтобы программист не упустил какие-то недочеты в коде во время компиляции. В ранних версиях MetaEditor данного параметра не было, код мог содержать сотни ошибок, в основном неявных преобразований переменных.
Можно еще вручную добавить свойство description — описание данного скрипт для пользователей. Для этого просто переходим на новую строчку рядом с другими свойствами и прописываем:
0 |
#property description "Скрипт, дружелюбно приветствующий этот мир" |
То есть запись свойства идет в такой последовательности: свойство — пробел — константа — пробел — в кавычках описывается текст.
Так как у скрипта нет никаких настроек, то при переносе на график их не будет видно, потому что скрипт сразу начнет выполняться. Если же нужно настроить программу перед ее применением с помощью внешних переменных, добавляем свойство script_show_inputs
0 |
#property script_show_inputs |
Теперь информация о программе будет отображаться таким образом:
Поскольку нам не нужно сейчас настраивать внешние переменные скрипта и видеть информацию о программе, мы закомментируем строчку script_show_inputs, поставив две наклонные линии // в самом начале строки чтобы данная строчка не учитывалась при компиляции и выполнение программы было сразу после запуска. Теперь свойства выглядят так:
0 1 2 3 4 5 |
#property copyright "Copyright (c) DaVinci FX Group" #property link "https://www.davinci-fx.com/" #property version "1.00" #property strict #property description "Скрипт, дружелюбно приветствующий этот мир" //#property script_show_inputs |
Чтобы посмотреть, какие еще бывают свойства, можно воспользоваться справкой. Для этого поставить текстовый указатель на слово property и нажать F1. Справка очень полезная вещь, к которой вы будете постоянно обращаться, чтобы найти нужные функции, переменный и примеры их использования.
Оставшаяся часть кода это функция обработки событий OnStart(), которое является заголовком функции.
0 1 2 3 4 5 6 7 |
//+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { //--- } //+------------------------------------------------------------------+ |
Именно в ней происходит выполнение кода скрипта, данная функция не имеет параметров и используется только для скриптов. Тип переменной void обозначает, что данная функция не возвращает никаких значений, т.е. по завершению работы она не будет запоминать и выдавать результат, в ней не используется оператор return.
Функции для обработки событий бывают разные для разных типов кода, они определены программой MQL4 и не подлежат изменениям. Основные из них создаются автоматически, другие дополнительно указываются пользователем при создании советника, скрипта, индикатора или библиотеки.
Пустые круглые скобки в OnStart() обозначают, что у функции нет параметров, но при этом скобки у нее быть все равно должны. Выполнение функции проходит в фигурных скобках, притом вначале обязательно должна быть открытая скобка и в самом конце должна стоять закрывающая ее скобка. Если поставить указать между скобками, то они выделятся другим цветом, это поможет определить где начинается и заканчивается текущая функция.
Функция Print
Переходим к самому основному, для чего эта тема и создана — напишем «Привет Мир!«
Любое информационное сообщение пользователя в журнале терминала выводиться через общую функцию Print(). Она также является типом void, в круглых скобках же указывается наше сообщение. Разместить функцию нужно между фигурными скобками OnStart. Для завершения функции Print, чтобы сказать программе, что мы закончили с ней работу, нужно поставить точку с запятой ;
0 |
Print("Hello World"); |
Все, после этого компилируем советник (создаем .ex4 файл), нажав на кнопку на панели инструментов, либо на F7.
Полученный скрипт автоматически должен появится в окне Навигатора во вкладке ‘Скрипты’. Если этого не произошли — кликаем правой клавишей по данной вкладке — ‘Обновить‘. Скрипт переносим на любой график валютной пары и проверяем журнал:
Журнал читается снизу вверх. Мы видим, что вначале скрипт был загружен (loaded successfully), инициализирован (initialized), после этого вступила в работу функция OnStart, в которой выполнило свое действие всего одна заданная нами функция Print, что дало нам увидеть сообщение: «Hello World«. После этого скрипт деинициализировался, т.е. завершил свой работу (uninit reason 0) и удалился с графика (removed).
Все оказалось просто. Через принт можно выводить данные любых текстовых значений и переменных (кроме массивов, они выдаются поэлементно) длиной до 64 символов. Типы переменных мы рассмотрим в следующем уроке.
Принтов в коде может быть сколько угодно, по началу даже лучше, если их больше и они информационные.
Раз мы начала изучать функции вывода информации, то почему бы быстренько не рассмотреть их все.
Другие функции вывода информации:
- Comment — функция, которая выводит mql4 комментарии в левый верхний угол графика, на котором запущен скрипт. Тип ее также void. Длина комментария намного больше, чем Принта — 2045 символов. В основном комментарий используется для наглядного отображения информации непосредственно на графике, я его использую для вывода настроек советника, текущего спреда, цены и т.д.
Обработка кода редактором идет сверху вниз внутри одной функции. Пишем ту же самую надпись сразу под функцией Print:
0 |
Comment("Hello World"); |
Компилируем, запускаем скрипт и проверяем график:
Как видно, принт и наш комментарий отобразился. Вначале скрипт обработал функцию принт, затем комментарий.
Чтобы разделить комментарий на несколько строк, нужно использовать символ перевода строки «\n». Проверьте, как теперь будет выглядеть надпись.
0 |
Comment("Hello \nWorld"); |
Из минусов комментария можно отметить только два — нельзя регулировать размер и тип шрифта, а также его нельзя вручную стереть с графика.
- Alert — отдельно всплывающее диалоговое окно с данными пользователя. Alert в mql4 также можно разделять на несколько строк с помощью текстового разделителя «\n». Длина его 64 символа, а тип void. Нужен он в основном, чтобы сигнализировать пользователю о данных индикаторов, когда цена перешла какую то отметку, либо о сигнале входа в рынок. Алерт сопровождается звуковым сообщением, который можно отключить в настройках. Чтобы установить алерт в программе мт4 необходимо прописать всего одну строчку:
0 |
Alert("Hello World!"); |
- MessageBox — окно сообщений, чем то схоже с Алертом, но больше напоминает информационные окна Windows. Имеет ряд настроек, таких как Заголовок окна, флаги для создания дополнительных кнопок и иконок этого окна. Тип данной функции int, т.е. она возвращает целое число после своего выполнения.
Функция MessageBox содержит в себе три параметра, но мы можем указать только первый — текст:
0 |
MessageBox("Hello World!"); |
Можно же более серьезно подойти к настройке функции и задать через запятую все три параметра: первый это наш текст, второй — заголовок и третий — флаг, код которого является константой и его можно посмотреть в справке.
0 |
MessageBox("Hello World!","DaVinci FX Group",MB_ICONINFORMATION); |
Функция редко примеряется мною в коде, но с помощью нее можно создать ряд всплывающих окон для подтверждения каких либо действий, вот пример, накиданный на скорую руку, возможно где-то такой пример вам пригодится. Попробуйте проверить его работу.
0 1 2 |
if(MessageBox("Вы хотите запустить этот скрипт?!","DaVinci FX Group",MB_YESNO|MB_ICONINFORMATION) == 6) if(MessageBox("Скрипт запушен. Но к сожалению он не сможет заработать денег на Форекс, но сможет передать привет!","DaVinci FX Group",MB_OK|MB_ICONEXCLAMATION) == 1) MessageBox("Hello World!","DaVinci FX Group",MB_OK|MB_ICONINFORMATION); |
- SendNotification — функция отправки сообщения на мобильный телефон или планшет в приложение Meta Trader 4. Для корректной работы вы заранее должны указать свой MetaQuotes ID в настройках терминала. Имеет всего один текстовой параметр, длина сообщения не должна превышать 255 символов.
0 |
SendNotification("Hello World!"); |
- SendMail — функция отправки текстового сообщения на электронную почту. Для корректной работы нужно настроить в терминале сервер SMTP, к примеру для Яндекс: smtp.yandex.ru:25, для Mail.ru: smtp.mail.ru:465. Функция имеет 2 параметра — заголовок письма и текст.
0 |
SendMail("DaVinci FX Group","Hello World!"); |
Заключение
На сегодня это все. Я рассказал, как сделать алерт в мт4 и попытался максимально просто, в доступной форме описать самые простые функции для вывода сообщений пользователя на экран и работу в программе MetaEditor, т.к. функции mql4 Print и Comment будут очень часто использоваться нами в дальнейшем.
Прикладываю ссылку на файл .mql4 с данными функциями ниже.
Если у вас будут вопросы — пишите комментарии.
[download url=»https://www.davinci-fx.com/wp-content/uploads/2021/01/1.0-Hello-World.rar» title=»Скачать 1.0 Hello World.mq4″]
4 комментария. Оставить новый
Сделал все как вы написали — и все равно при компиляции выдает 1 ошибку…в чем ошибка — понять не могу…я безнадежен?)))
Добрый день. Сложно понять где у вас ошибка по описанию. Нужен тест в строчке редактора кода с этой ошибкой увидеть. Тот, что выделен красным кругом.
Чтобы понять где именно в коде находится ошибка, необходимо два раза нажать на эту ошибки и выделение в коде перенесется на проблемную строку.
Если же не получилось понять, то просто скачайте наш файл «1.0 Hello World.mq4» и проверьте построчно что где не так в вашем коде.
Все просто и понятно, продолжу читать ваш блог.
Спасибо — начало понравилось.