Наши рекомендации:

  1. Главная
  2. Уроки MQL4
  3. 1.0 Скрипт Hello World. Создание скрипта MQL4

1.0 Скрипт Hello World. Создание скрипта MQL4

1.0 Скрипт Hello World

Здравствуйте! Начнем урок с самого простого, создадим свой первый скрипт. Почему скрипт? Да потому что у него всего 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 — описание данного скрипт для пользователей. Для этого просто переходим на новую строчку рядом с другими свойствами и прописываем:

То есть запись свойства идет в такой последовательности: свойство — пробел — константа — пробел — в кавычках описывается текст.

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

Теперь информация о программе будет отображаться таким образом:

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

Чтобы посмотреть, какие еще бывают свойства, можно воспользоваться справкой. Для этого поставить текстовый указатель на слово property и нажать F1. Справка очень полезная вещь, к которой вы будете постоянно обращаться, чтобы найти нужные функции, переменный и примеры их использования.

Оставшаяся часть кода это функция обработки событий OnStart(), которое является заголовком функции.

Именно в ней происходит выполнение кода скрипта, данная функция не имеет параметров и используется только для скриптов. Тип переменной void обозначает, что данная функция не возвращает никаких значений, т.е. по завершению работы она не будет запоминать и выдавать результат, в ней не используется оператор return.

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

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

Функция Print

Переходим к самому основному, для чего эта тема и создана — напишем «Привет Мир!«

Любое информационное сообщение пользователя в журнале терминала выводиться через общую функцию Print(). Она также является типом void, в круглых скобках же указывается наше сообщение. Разместить функцию нужно между фигурными скобками OnStart. Для завершения функции Print, чтобы сказать программе, что мы закончили с ней работу, нужно поставить точку с запятой ;

Все, после этого компилируем советник (создаем .ex4 файл), нажав на кнопку на панели инструментов, либо на F7.

Полученный скрипт автоматически должен появится в окне Навигатора во вкладке ‘Скрипты’. Если этого не произошли — кликаем правой клавишей по данной вкладке — ‘Обновить‘. Скрипт переносим на любой график валютной пары и проверяем журнал:

Журнал читается снизу вверх. Мы видим, что вначале скрипт был загружен (loaded successfully), инициализирован (initialized), после этого вступила в работу функция OnStart, в которой выполнило свое действие всего одна заданная нами функция Print, что дало нам увидеть сообщение: «Hello World«. После этого скрипт деинициализировался, т.е. завершил свой работу (uninit reason 0) и удалился с графика (removed).

Все оказалось просто. Через принт можно выводить данные любых текстовых значений и переменных (кроме массивов, они выдаются поэлементно) длиной до 64 символов. Типы переменных мы рассмотрим в следующем уроке.

Принтов в коде может быть сколько угодно, по началу даже лучше, если их больше и они информационные.

Раз мы начала изучать функции вывода информации, то почему бы быстренько не рассмотреть их все.

Другие функции вывода информации:

  • Comment — функция, которая выводит mql4 комментарии в левый верхний угол графика, на котором запущен скрипт. Тип ее также void. Длина комментария намного больше, чем Принта — 2045 символов. В основном комментарий используется для наглядного отображения информации непосредственно на графике, я его использую для вывода настроек советника, текущего спреда, цены и т.д.

Обработка кода редактором идет сверху вниз внутри одной функции. Пишем ту же самую надпись сразу под функцией Print:

Компилируем, запускаем скрипт и проверяем график:

Как видно, принт и наш комментарий отобразился. Вначале скрипт обработал функцию принт, затем комментарий.

Чтобы разделить комментарий на несколько строк, нужно использовать символ перевода строки «\n». Проверьте, как теперь будет выглядеть надпись.

Из минусов комментария можно отметить только два — нельзя регулировать размер и тип шрифта, а также его нельзя вручную стереть с графика.

  • Alert — отдельно всплывающее диалоговое окно с данными пользователя. Alert в mql4 также можно разделять на несколько строк с помощью текстового разделителя «\n». Длина его 64 символа, а тип void. Нужен он в основном, чтобы сигнализировать пользователю о данных индикаторов, когда цена перешла какую то отметку, либо о сигнале входа в рынок. Алерт сопровождается звуковым сообщением, который можно отключить в настройках. Чтобы установить алерт в программе мт4 необходимо прописать всего одну строчку:

  • MessageBox — окно сообщений, чем то схоже с Алертом, но больше напоминает информационные окна Windows. Имеет ряд настроек, таких как Заголовок окна, флаги для создания дополнительных кнопок и иконок этого окна. Тип данной функции int, т.е. она возвращает целое число после своего выполнения.

Функция MessageBox содержит в себе три параметра, но мы можем указать только первый — текст:

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

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

  • SendNotification — функция отправки сообщения на мобильный телефон или планшет в приложение Meta Trader 4. Для корректной работы вы заранее должны указать свой MetaQuotes ID в настройках терминала. Имеет всего один текстовой параметр, длина сообщения не должна превышать 255 символов.

  • SendMail — функция отправки текстового сообщения на электронную почту. Для корректной работы нужно настроить в терминале сервер SMTP, к примеру для Яндекс: smtp.yandex.ru:25, для Mail.ru: smtp.mail.ru:465. Функция имеет 2 параметра — заголовок письма и текст.

Заключение 

На сегодня это все. Я рассказал, как сделать алерт в мт4 и попытался максимально просто, в доступной форме описать самые простые функции для вывода сообщений пользователя на экран и работу в программе MetaEditor, т.к. функции mql4 Print и Comment будут очень часто использоваться нами в дальнейшем.

Прикладываю ссылку на файл .mql4 с данными функциями ниже.

Если у вас будут вопросы — пишите комментарии.

4 комментария. Оставить новый

  • Aйдар
    06.01.2021 23:53

    Сделал все как вы написали — и все равно при компиляции выдает 1 ошибку…в чем ошибка — понять не могу…я безнадежен?)))

    Ответить
    • Добрый день. Сложно понять где у вас ошибка по описанию. Нужен тест в строчке редактора кода с этой ошибкой увидеть. Тот, что выделен красным кругом.
      Чтобы понять где именно в коде находится ошибка, необходимо два раза нажать на эту ошибки и выделение в коде перенесется на проблемную строку.
      Если же не получилось понять, то просто скачайте наш файл «1.0 Hello World.mq4» и проверьте построчно что где не так в вашем коде.

      Ответить
  • Дмитрий
    08.02.2021 09:36

    Все просто и понятно, продолжу читать ваш блог.

    Ответить
  • Николай
    24.03.2021 14:15

    Спасибо — начало понравилось.

    Ответить

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Заполните поле
Заполните поле
Пожалуйста, введите корректный адрес email.
Вы должны согласиться с условиями для продолжения

Меню