Здравствуйте, дорогие друзья.
Ни для кого не секрет, что автоматические торговые системы очень удобны: будучи созданными один раз, они приносят прибыль постоянно и освобождают трейдера от большинства рутинной работы. Ей, конечно, нужно управлять, но затраченное время не идет ни в какое сравнение с ручной торговлей.
В этой статье мы начнем учиться превращать свои торговые идеи в код. У вас наверняка есть какие-то свои идеи, которым хотелось бы дать жизнь. Начнем!
Содержание:
- Как создать приложение для MQL4
- Мастер создания MQL-программы
- Комментарии
- Директивы property
- Основные функции
- Описываем код для получения и отображения спреда
- Отображение на экране
- Компиляция и запуск
- Заключение (и скачать исходник)
Как создать приложение для MQL4
Терминал Metatrader поставляется с удобной средой разработки, поэтому настраивать рабочее окружение, как при программировании на других языках, не понадобится: если у вас установлен торговый терминал, то уже есть возможность начать разрабатывать свой советник, скрипт или индикатор.
Отличный учебник о том, как это делается, можно найти тут. А мы начнем с простых и понятных примеров. В качестве первого примера сделаем индикатор, который мониторит спред и показывает его в нижнем правом углу экрана. Эту программу вы можете скачать в конце статьи, даже если не заинтересованы в программировании, и применять в торгах.
Мастер создания MQL-программы
Итак, откройте торговый терминал и нажмите F4. Откроется редактор кода Metaeditor. В левом верхнем углу нажмите на кнопку Создать:
Выберите Пользовательский индикатор:
Заполните название, автора и ссылку на сайт. Все поля, кроме названия, опциональны:
В остальных окнах просто нажмите Далее и Готово.
Далее откроется созданный файл с заготовкой кода:
У вас окно, вероятно, будет белого цвета. Если интересно, как сделать темную тему - пишите в комментарии! На сам индикатор это никак не повлияет.
Комментарии
Разберем код по шагам. Серым цветом отмечены комментарии - они нужны для разработчика и в итоговый файл не включаются. В них можно отметить, почему при проектировании вы приняли те или иные решения, или напомнить себе как работает тот или иной участок вашего кода:
Чтобы написать комментарий, напишите в начале строки два двойных слеша или заключите текст, который хотите закомментировать, в символы /* */ вот так:
Комментарии из программы можно удалить полностью - это никак не повлияет на ее работоспособность.
Директивы property
Далее с помощью директив property описана служебная информация. Обязательными здесь являются только indicator_chart_window и strict.
Основные функции
Далее идут 3 основных функции, которыми управляется выполнение:
- OnInit()
- OnCalculate()
- OnDeinit()
OnDeinit() не добавляется по умолчанию при создании индикатора (однако при создании эксперта добавляется). Поэтому мы напишем ее сами позже. В ней описываются действия, которые нужно совершить при завершении работы программы.
В OnInit() мы можем инициализировать (задать начальные значения) какие-то переменные, выполнить начальные действия и т.д., эта функция вызывается перед началом работы индикатора однократно. Пока ее можно оставить пустой - мы добавим туда код позже:
OnCalculate() устроена несколько сложнее. так как включает список передаваемых параметров:
Мы на данном этапе можем не вдаваться в подробности, как это все устроено - разберем позже. Мы ведь хотим уже сделать индикатор спреда!
Описываем код для получения и отображения спреда
Поскольку мы будем измерять спред кадый тик, то нужно поместить код его получения и отображения в функцию OnCalculate(), которая вызывается каждый тик. Там много нюансов, но пока сделаем просто.
Для начала создадим переменную spread типа double и запишем в нее значение текущего спреда по паре при помощи служебной функции MarketInfo():
MarketInfo() принимает 2 параметра. Первый - это символ (валютная пара). Указывая константу _Symbol, мы сообщаем функции, что нужно использовать валютную пару графика, на которой мы запустили индикатор. Второй параметр показывает, что мы хотим, чтобы функция нам вернула. Константа MODE_SPREAD запрашивает спред по переданной в 1-м аргументе паре.
Итого функция запрашивает спред и копирует его в переменную spread.
Счета бывают с 2, 3, 4 и 5 знаками после запятой:
Функция MarketInfo() обрабатывает такие счета по-разному. На 4-знаке она вернет значение спреда в 4-значных пунктах, тогда как на 5-знаке - в 5-значных. Также есть еще иеновые пары, где 3 знака соответствуют пяти на обычных парах, а 2 - обычным на 4-знаке)
В общем, не все сразу :) Напишем код в OnCalculate(), который правильно обработает этот момент:
В случае, когда на счету 2 или 4 знака - спред будет уже в привычных 4-значных пунктах, и функция не будет выполнять никаких преобразований. А если 3 или 5 знаков - то мы делим спред на 10, тем самым преобразовывая его в 4-значные пункты.
Отображение на экране
Осталось только отобразить полученный спред в терминале. Для этого выполним ряд действий.
1. Создадим переменную clr (color, цвет), которая будет устанавливаться при загрузке на график, и вы сможете выбрать цвет отображения спреда. Объявим ее как внешнюю, т.е. снаружи функций OnInit() и OnCalculate():
Модификатор extern говорит о том, что переменную можно будет увидеть в окне настроек при запуке индикатора.
2. В функции OnInit() создадим метку и зададим ей начальное значение спреда:
Этот код создает текстовую метку, устанавливает точку привязки к правому нижнему углу, запрашивает текущий спред (точно так же, как описывалось выше) и пишет его на метку.
3. В функции OnDeinit() добавим выгрузку индикатора с графика при его удалении. Заодно и напишем сам OnDeinit(), который нужно поместить сразу после OnCalculate():
Компиляция и запуск
Нажмите Компилировать в верхней панели среды разработки:
Если все прошло без ошибок, то будет создан ex4-файл, который можно найти в каталоге данных терминала -> MQL4 -> Indicators. Открыть текущий каталог можно командой Файл -> открыть каталог данных.
Найдите в окне Навигатор созданный файл и перетащите его на график:
Появится окно настроек. В разделе Входные параметры можно выбрать цвет - это наша переменная clr:
Выберите цвет и нажмите ОК. Вуаля! В правом нижнем углу терминала появился компактный индикатор, который отображает спред каждый тик:
Заключение
Исходный код индикатора можно скачать здесь. Просто положите его в папку Indicators и перезапустите терминал. После этого пользуйтесь как обычно.
Надеемся, статья оказалась полезной начинающим программистам и трейдерам, которые искали очень легкий и компактный индикатор спреда в открытом исходном коде. Оставайтесь с нами, будет много всего интересного!
---------------------------------------------------------------
Не хочешь сам делать советник, а заработать хочется? Можно купить готовый грааль вот тут.
---------------------------------------------------------------
Платные уроки по программированию на MQL4 и MQL5 - обращайтесь в лс. Автор имеет многолетний опыт разработки советников.