Найти в Дзене
Romero Trading

Пишем простой индикатор спреда на MQL4

Здравствуйте, дорогие друзья. Ни для кого не секрет, что автоматические торговые системы очень удобны: будучи созданными один раз, они приносят прибыль постоянно и освобождают трейдера от большинства рутинной работы. Ей, конечно, нужно управлять, но затраченное время не идет ни в какое сравнение с ручной торговлей. В этой статье мы начнем учиться превращать свои торговые идеи в код. У вас наверняка есть какие-то свои идеи, которым хотелось бы дать жизнь. Начнем! Содержание: Как создать приложение для MQL4 Терминал Metatrader поставляется с удобной средой разработки, поэтому настраивать рабочее окружение, как при программировании на других языках, не понадобится: если у вас установлен торговый терминал, то уже есть возможность начать разрабатывать свой советник, скрипт или индикатор. Отличный учебник о том, как это делается, можно найти тут. А мы начнем с простых и понятных примеров. В качестве первого примера сделаем индикатор, который мониторит спред и показывает его в нижнем прав
Оглавление

Здравствуйте, дорогие друзья.

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

В этой статье мы начнем учиться превращать свои торговые идеи в код. У вас наверняка есть какие-то свои идеи, которым хотелось бы дать жизнь. Начнем!

Содержание:

  • Как создать приложение для MQL4
  • Мастер создания MQL-программы
  • Комментарии
  • Директивы property
  • Основные функции
  • Описываем код для получения и отображения спреда
  • Отображение на экране
  • Компиляция и запуск
  • Заключение (и скачать исходник)

Как создать приложение для MQL4

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

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

Мастер создания MQL-программы

Итак, откройте торговый терминал и нажмите F4. Откроется редактор кода Metaeditor. В левом верхнем углу нажмите на кнопку Создать:

-2

Выберите Пользовательский индикатор:

-3

Заполните название, автора и ссылку на сайт. Все поля, кроме названия, опциональны:

-4

В остальных окнах просто нажмите Далее и Готово.

Далее откроется созданный файл с заготовкой кода:

-5

У вас окно, вероятно, будет белого цвета. Если интересно, как сделать темную тему - пишите в комментарии! На сам индикатор это никак не повлияет.

Комментарии

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

Комментарии начинаются с // или /* */
Комментарии начинаются с // или /* */

Чтобы написать комментарий, напишите в начале строки два двойных слеша или заключите текст, который хотите закомментировать, в символы /* */ вот так:

-7

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

Директивы property

Далее с помощью директив property описана служебная информация. Обязательными здесь являются только indicator_chart_window и strict.

-8

Основные функции

Далее идут 3 основных функции, которыми управляется выполнение:

  • OnInit()
  • OnCalculate()
  • OnDeinit()

OnDeinit() не добавляется по умолчанию при создании индикатора (однако при создании эксперта добавляется). Поэтому мы напишем ее сами позже. В ней описываются действия, которые нужно совершить при завершении работы программы.

В OnInit() мы можем инициализировать (задать начальные значения) какие-то переменные, выполнить начальные действия и т.д., эта функция вызывается перед началом работы индикатора однократно. Пока ее можно оставить пустой - мы добавим туда код позже:

-9

OnCalculate() устроена несколько сложнее. так как включает список передаваемых параметров:

-10

Мы на данном этапе можем не вдаваться в подробности, как это все устроено - разберем позже. Мы ведь хотим уже сделать индикатор спреда!

Описываем код для получения и отображения спреда

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

Для начала создадим переменную spread типа double и запишем в нее значение текущего спреда по паре при помощи служебной функции MarketInfo():

-11

MarketInfo() принимает 2 параметра. Первый - это символ (валютная пара). Указывая константу _Symbol, мы сообщаем функции, что нужно использовать валютную пару графика, на которой мы запустили индикатор. Второй параметр показывает, что мы хотим, чтобы функция нам вернула. Константа MODE_SPREAD запрашивает спред по переданной в 1-м аргументе паре.

Итого функция запрашивает спред и копирует его в переменную spread.

Счета бывают с 2, 3, 4 и 5 знаками после запятой:

5 знаков после запятой
5 знаков после запятой

Функция MarketInfo() обрабатывает такие счета по-разному. На 4-знаке она вернет значение спреда в 4-значных пунктах, тогда как на 5-знаке - в 5-значных. Также есть еще иеновые пары, где 3 знака соответствуют пяти на обычных парах, а 2 - обычным на 4-знаке)

В общем, не все сразу :) Напишем код в OnCalculate(), который правильно обработает этот момент:

-13

В случае, когда на счету 2 или 4 знака - спред будет уже в привычных 4-значных пунктах, и функция не будет выполнять никаких преобразований. А если 3 или 5 знаков - то мы делим спред на 10, тем самым преобразовывая его в 4-значные пункты.

Отображение на экране

Осталось только отобразить полученный спред в терминале. Для этого выполним ряд действий.

1. Создадим переменную clr (color, цвет), которая будет устанавливаться при загрузке на график, и вы сможете выбрать цвет отображения спреда. Объявим ее как внешнюю, т.е. снаружи функций OnInit() и OnCalculate():

-14

Модификатор extern говорит о том, что переменную можно будет увидеть в окне настроек при запуке индикатора.

2. В функции OnInit() создадим метку и зададим ей начальное значение спреда:

-15

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

3. В функции OnDeinit() добавим выгрузку индикатора с графика при его удалении. Заодно и напишем сам OnDeinit(), который нужно поместить сразу после OnCalculate():

-16

Компиляция и запуск

Нажмите Компилировать в верхней панели среды разработки:

-17

Если все прошло без ошибок, то будет создан ex4-файл, который можно найти в каталоге данных терминала -> MQL4 -> Indicators. Открыть текущий каталог можно командой Файл -> открыть каталог данных.

-18

Найдите в окне Навигатор созданный файл и перетащите его на график:

-19

Появится окно настроек. В разделе Входные параметры можно выбрать цвет - это наша переменная clr:

-20

Выберите цвет и нажмите ОК. Вуаля! В правом нижнем углу терминала появился компактный индикатор, который отображает спред каждый тик:

-21


Заключение

Исходный код индикатора можно скачать здесь. Просто положите его в папку Indicators и перезапустите терминал. После этого пользуйтесь как обычно.

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

---------------------------------------------------------------

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

---------------------------------------------------------------

Платные уроки по программированию на MQL4 и MQL5 - обращайтесь в лс. Автор имеет многолетний опыт разработки советников.