Урок №11: Пишем индикатор
На этом уроке мы напишем простой индикатор, который в дальнейшем будем использовать при разработке советника.
А использовать для получения сигнала мы будем уже существующие — Moving Average и MACD. Алгоритм следующий:
Определять направление сделки (покупка или продажа) мы будем по индикатору Moving Average с периодом 100 на дневном графике(Daily), т.е. если текущая цена выше MA(100), то покупаем, а если ниже — продаём.
А для поиска удачных точек входа воспользуемся индикатором MACD.
вход в покупки– индикатор MACD ниже нуля, идет снизу вверх, а его сверху вниз пересекает сигнальная линия.
вход в продажи – индикатор MACD выше нуля, идет cверху вниз, а его снизу вверх пересекает сигнальная линия.
Запускаем MetaEditor и вызываем мастер создания программ.
Отмечаем в списке выбора «Пользовательский индикатор»:
Заполняем пока только поле «Имя», остальное без изменений и нажимаем кнопку «Далее»:
На следующей форме мастера оставляем как есть и нажимаем кнопку «Далее»:
Тут также ничего не меняем и нажимаем «Готово»:
Итак, шаблон нашего будущего индикатора готов:
В основе пользовательских индикаторов, является передача значений индикаторных массивов клиентскому терминалу (для построения индикаторных линий) через буферы обмена.
Буфер — область памяти, содержащая численные значения индикаторного массива.
Стандартом языка MQL4 предусмотрена возможность построения с помощью одного пользовательского индикатора до восьми индикаторных линий. Каждой из индикаторных линий ставится в соответствие один индикаторный массив и один буфер. Каждый из буферов имеет свой индекс. Индекс первого буфера — 0, второго — 1, и т.д., а последнего — 7.
Нам необходимо два буфера для хранения и отображения на графике сигналов для покупок и для продаж, поэтому определим их:
а кроме того, давайте определим два имени «BUY» и «SELL», присвоив им значения «0» и «1» соответственно.
В дальнейшем это облегчит нам восприятие исходного текста индикатора:
Далее в функции OnInit():
С помощью функции SetIndexBuffer() необходимый буфер (рассмотрим случай с индексом 0) ставится в соответствие массиву (в нашем случае «Buy»). Это значит, что для построения первой стрелки клиентский терминал будет принимать данные, заключённые в массиве «Buy», используя для этого нулевой буфер и соответственно для буфера «Sell» — первый буфер.
Функция SetIndexEmptyValue() устанавливает значения «по умолчанию», т.е. те, при которых индикатор не будет ничего показывать на графике, в нашем случае это ноль.
Функция SetIndexStyle() у станавливает новый тип, стиль, ширину и цвет для указанной линии индикатора. Для нашего же случае это стрелки (DRAW_ARROW).
Функция SetIndexArrow() — у станавливает значок для линии индикаторов, имеющей стиль DRAW_ARROW. В качестве параметров в функцию передаётся номер буфера и код символа из шрифта Wingdings.
Функция IndicatorDigits — определяет формат точности (количество знаков после десятичной точки) для визуализации значений индикатора.
Функция IndicatorShortName — устанавливает «короткое» имя пользовательского индикатора для отображения в подокне индикатора.
Функция SetIndexLabel — устанавливает текст описания линии индикатора для отображения информации в окне.
С этим разобрались и далее я предлагаю написать функцию, которая будет определять наличие сигнала на определённом баре. Таким образом в качестве параметра функции мы будем передавать индекс расчитываемого бара.
При получении показаний с индикатора в качестве параметров я намеренно указал переменные (fast_ema_period, slow_ema_period, signal_period и т.д.), а не вписал жёсткие значения. Это позволит нам гибко подбирать параметры при тестировании будущего советника. Следовательно эти параметры необходимо определить и сделать их внешними:
Дополнительно в этом блоке определена переменная MACDOpenLevel. Она нам понадобится для фильтрации от ложных сигналов.
Собственно, остаётся написать небольшой код в функции OnCalculate():
Если раньше индикатор не был присоединён к окну финансового инструмента, то при первом исполнении функции OnCalculate значение переменной counted_bars будет равно нулю:
Это означает, что индикаторный массив не содержит ни одного элемента с ранее определённым значением, поэтому есть необходимость пересчитать весь индикаторный массив от начала до конца. Расчёт массива производится в направлении от самого старого бара к нулевому. Индекс самого старого бара, начиная с которого необходимо производить вычисления, рассчитывается так:
Предположим, что в момент запуска в окне финансового инструмента имеется 200 баров. Эта величина является значением предопределённой переменной Bars. Ранее определённое значение counted_bars равно 0. В результате получится, что индекс i первого не посчитанного бара (самого старого бара, начиная с которого необходимо начать расчёт) равен 199.
Далее в цикле мы проверяем значения индикатора через функцию Signal() и при наличии сигнала записываем в буфер индикатора значение цены текущего пересчитанного бара:
Именно так и получаются сигнальные стрелки на графике самого индикатора:
И полный текст индикатора:
На этом, пожалуй, все. На одном из следующих уроков мы рассмотрим советник на нашем индикаторе.
Исходный текст нашего индикатора доступен для скачивания.
Создание
Для создания пользовательских индикаторов используются язык программирования торговых стратегий MetaQuotes Language 4 (MQL4) и редактор редактор MetaEditor. Чтобы запустить редактор советников, необходимо выполнить команду «Создать» контекстного меню окна «Навигатор — Пользовательские индикаторы», команду меню «Сервис — Редактор MetaQuotes Language», нажать клавишу F4 или кнопку панели «Стандартная». При создании MQL4-программы автоматически откроется мастер создания советников, позволяющий быстро создавать новые MQL4-программы. В нем в качестве типа создаваемого объекта необходимо указать «Пользовательский индикатор»
и заполнить поля требуемыми данными:
Затем нужно определить, будет ли новый индикатор создаваться в отдельном подокне и какие у него будут границы. Кроме того, необходимо задать количество и параметры индикаторных массивов. Значения элементов индикаторных массивов используются для отображения на графике линий. Иными словами, при определении индикаторных массивов происходит определение линий будущего индикатора. После этого в редакторе открывается окно нового индикатора с заданными параметрами. Файл с исходным текстом (*.MQ4) индикатора автоматически помещается в папку /EXPERTS/INDICATORS клиентского терминала. С этого момента можно приступать к написанию текста пользовательского индикатора.
По завершении разработки необходимо скомпилировать индикатор. Для этого в редакторе советников следует выполнить команду меню «Файл — Компилировать», нажать клавишу F9 или кнопку панели инструментов. В результате успешной компиляции создается исполняемый файл программы с расширением *.EX4, автоматически помещаемый в папку /EXPERTS/INDICATORS. Список пользовательских индикаторов можно просмотреть в окне «Навигатор — Пользовательские индикаторы» клиентского терминала.
Редактирование пользовательских индикаторов
Чтобы приступить к редактированию уже существующего индикатора из терминала, необходимо выполнить команду «Изменить» контекстного меню окна «Навигатор — Пользовательские индикаторы». При этом откроется редактор MetaEditor, в который уже будет загружен исходный код выбранного индикатора. После изменения исходного кода аналитического инструмента необходимо повторно скомпилировать его и получить новый исполняемый EX4-файл. В противном случае в терминале будет использоваться неизмененная, предыдущая версия индикатора.
Внимание: если индикатор скомпилирован с ошибками, его наложить нельзя. При этом окно свойств индикатора не появится, а в журнале экспертов появится запись о невозможности открыть файл с исполняемым кодом.
Как написать индикатор или советник для Forex Tester
Как вы знаете – в специализированной программе Forex Tester для тестирования торговых стратегий можно писать свои собственные индикаторы и советники, но мало кто пробовал это сделать. К сожалению – программа не поддерживает скриптовый язык mql, встроенный в терминал MetaTrader 4. Тем не менее, программа поддерживает импорт стратегий и индикаторов в виде dll файлов и сегодня мы разберемся, что нужно для того, чтобы писать свои индикаторы для Forex Tester.
Инструментарий
Прежде всего вам нужно установить программу Forex Tester, импортировать котировки для нее и подготовиться к тестированию. Все это уже было описано, например, тут, поэтому подробно останавливаться на этом не стоит. Где брать котировки и как их устанавливать вы также, думаю, разберетесь самостоятельно.
Написание собственных скриптов, индикаторов, советников для программы может происходить на двух языках программирования: C++ и Delphi. Но пугаться не стоит – дело в том, что язык mql очень похож на C++. К тому же – зная один из языков программирования и имея под рукой справочник по нему – можно справиться с любой несложной задачей. Вся логика везде одинаковая, конструкции различаются только синтаксисом, и то не особо сильно, а написание индикатора в большинстве случаев является как раз простой задачей.
Итак, я советую вам выбрать именно C++ за его сходство с mql. Поэтому для написания советников и индикаторов вам потребуется установка среды разработки. Лично я часто веду разработки для веба и уже давно использую для этого такую IDE, как NetBeans. В сети вы сможете найти немало видео уроков по использованию этой среды разработки, в которой детально разобран каждый элемент интерфейса.
Также можно найти и немало различных плагинов, упрощающих работу с ней. Это очень мощная среда разработки со множеством функций и возможностей под различные языки программирования. Но намного легче было бы установить что-то попроще, особенно если вам не нужно много функционала, а ваша цель – просто написать индикатор для Forex Tester. Поэтому предлагаю вам установить Dev-C++ – простую, легкую в использовании IDE.
Подготовка к работе
Чтобы получить сведения об основных функциях, используемых в индикаторах, вы можете воспользоваться справкой программы Forex Tester:
Как видите, для советников, индикаторов и скриптов используются разные файлы справки, так как интерфейсы для каждого из этих объектов различны. В зависимости от того, что вы собрались писать, вам нужно открыть тот или иной файл. Первым делом я советую вам ознакомиться с разделом «Как создавать индикаторы/скрипты/советники». В нем вы сможете найти общую структуру файла, которая очень похожа на аналогичную для терминала МТ4.
Сначала мы подключаем необходимые интерфейсы API при помощи команды uses. Затем идет перечисление внешних переменных, которые можно настроить при запуске.
После идет объявление пользовательских переменных, которые так или иначе используются в вашей программе.
Затем разрабатывается инициализирующая функция, деинициализирующая функция, функция обработки новых тиков и так далее. Внутри каждой из них мы и должны писать свою логику.
Ознакомиться со структурой программ вы можете в справке в разделе «Как создавать…». Далее я советую ознакомиться со списком функций, которые вы будете использовать при создании вашей программы. Затем почитайте, какие есть структуры, типы, классы и константы – все это займет не так уж и много времени, но зато вы примерно будете себе представлять спектр возможностей, который вам даст API, а также лишний раз убедитесь, насколько все похоже на родной mql.
Поэтому, если вы хорошо знакомы с mql и пишете на нем уверенно, практически все, что вам нужно, чтобы написать советник или индикатор для Forex Tester – вы уже знаете. Я же, не вдаваясь в детали программирования, опишу общий порядок действий для того, чтобы написать свой первый индикатор за один вечер:
Вы найдете файл InterfaceUnit – это, собственно, сам интерфейс API, библиотеку технических функций TechnicalFunctions и пример написания советника или индикатора.
Открываем Dev-C++, жмем Файл->Создать-> Проект, выбираем dll:
Далее выбираем местоположение проекта:
Закрываем файлы, которые автоматически создались вместе с проектом и добавим свои:
После написания советника или индикатора идем во вкладку Выполнить – Скомпилировать или жмем Ctrl+F9. Если вы не наделали ошибок, в папке с проектом вы найдете dll файл советника/индикатора:
Именно этот файл нам нужно подключить к Forex Tester. Для этого находим в Forex Tester вкладку файл – установить:
Выбираем наш созданный файлик и жмем установить. После этого ваш индикатор вы найдете тут:
Советник появится в списке советников:
Заключение
Как видите, ничего сложного нет. Язык программирования прекрасно знаком тем, кто уже программировал индикаторы или советники на mql. Сама установка и разработка стратегий и индикаторов немного замысловата, но я надеюсь, эта статья помогла вам начать самостоятельно программировать под платформу Forex Tester.
Visual Strategy Builder – создаем советников для MT4 без программирования
Все мы знаем, что основное достоинство терминала Metatrader 4 – это возможность создания роботов и торговля с их помощью.
Далеко не все трейдеры владеют программированием на mql4/5. Разработчики программы Forex Tester смогли решить эту проблему. Теперь можно создать робота или реализовать торговую идею в виде индикатора на ресурсе «Визуальный конструктор стратегий» (Visual Strategy Builder). Без навыков программирования.
Как это сделать, плюсы и минусы бесплатного (на текущий момент) конструктора роботов – в нашем материале.
Постоянные читатели нашего сайта знакомы с Forex Tester 4 – уникальным симулятором торгов, выступающим в роли тренажера, тестера и анализатора. Программа имела функцию написания на заказ индикаторов и советников, совместимых с Metatrader. Теперь разработчики платформы решили дать каждому трейдеру шанс самостоятельно создать собственные стратегии.
Сконструированные с помощью готовых модулей команд скрипты также совместимы с Metatrader 4, их создание на период бета-тестирования полностью бесплатно. Так что спешим читать статью и воплощаем в жизнь все идеи индикаторов и советников, которые были отложены до лучших времен.
Сервис Visual Strategy Builder расположен по адресу: https://tools.forextester.com/
Зачем нужен Visual Strategy Builder?
Visual Strategy Builder (VSB) представляет собой программную оболочку с набором инструментов теханализа, которые хорошо знакомы пользователям Metatrader 4. В отличие от этой торговой платформы VSB позволяет задавать в индикаторах правила открытия позиции и установки ордеров тейк-профит и стоп-лосс.
Любой новичок может выбрать сигнал на открытие позиции из набора готовых опций (кроссоверы, пересечения уровней, больше/меньше и т. д.). Эти настройки открывают недоступную для Metatrader 4 возможность протестировать работу одного или нескольких индикаторов.
Например, можно получить реальный торговый результат по стратегии пересечений скользящих средних линий. Такой советник создается в VSB за 5 минут, потом его можно экспортировать в Metatrader 4 или Forex Tester.
Разобравшись с созданием одного индикатора в Visual Strategy Builder, трейдер может в несколько кликов создать рабочую автоматизированную стратегию и тоже проверить ее в тестере. Если советник показывает положительные результаты, то по его сигналам можно торговать на реальном счете через Metatrader 4.
Кстати, тестировать стратегию однозначно лучше через Forex Tester – там точнее котировки и можно быстро эмулировать сессию за любой торговый день. Например, выбрав какой-нибудь «черный вторник», чтобы воочию понять, как аномальная волатильность повлияет на настройки мани менеджмента.
Профессиональные трейдеры могут экспортировать код советников прямо в VSB, соединять его с созданными там программами или редактировать в Metaeditor и отправлять обратно в Metatrader 4.
Visual Strategy Builder будет полезен тем, кто ищет новые идеи – программа поддерживает библиотеку стратегий пользователей. Любой желающий без навыков программирования сразу поймет «внутренности алгоритма» по составу индикаторов и описанным правилам торговых сигналов. Тут же можно самостоятельно убедиться в результативности торговой системы.
Как работать на платформе Visual Strategy Builder
Сервис Visual Strategy Builder расположен по адресу: https://tools.forextester.com/
Использование VSB требует регистрации – это быстрая и несложная процедура. Введите адрес электронной почты и придумайте пароль для входа. Он должен быть не менее 8 символов, содержать буквы разного регистра, почтовый ящик лучше указать gmail.
После заполнения вышеуказанных строк программа сразу открывает окно конструктора стратегий, автоматически переходя на русскоязычную версию.
Валютным спекулянтам доступно создание стратегии, использование шаблона от разработчиков или других пользователей VSB, а также создание собственного «индикатора мечты». Если пользователь планирует собрать торговую систему, надо нажать на иконку «Стратегии».
Платформа удобно сохраняет их под выбранным пользователем именем с кратким описанием сути системы. На странице предусмотрена кнопка возврата, если трейдер допустил ошибку на предыдущем этапе.
После шага «Создать стратегию» обратной дороги нет. Впрочем, совсем не обязательно бросаться мастерить сложные торговые системы. Программа, например, способна сильно упростить жизнь внутридневным трейдерам, автоматизировав некоторые индикаторы. Они расположены списком на панели слева под опцией «Элементы». Выше этого списка указаны различные целевые ориентиры для применения в стратегиях:
Перечисленные опции можно объединять друг с другом, накладывая различные условия выполнения сделки, например, пробой уровня только до американской сессии и т. д. Определитесь с главным инструментом своей стратегии и перетащите его в окно «Состояние 1».
Как только он там отобразится, можно приступать к редактированию параметров. Наведите курсор на поле присоединенного Bollinger Bands (BB), чтобы увидеть эту опцию.
После ее нажатия появится таблица со стандартными настройками линий BB. Стоит отметить одну особенность: для каждой из них сигналы на открытие позиций прописываются отдельно.
Набор правил входа в позицию доступен после нажатия рядом окна «Операции», вместе с которым активируется аналогичная опция слева со списком шаблонов. Учитывая, что работа идет с верхней линией, а вход в рынок планируется по контртренду, выбираем кроссовер сверху вниз.
Теперь конкретизируем тип позиции и условия мани менеджмента с помощью пункта меню на левой панели «Действия». Перетаскиваем в поле ордер на продажу и редактируем его параметры.
Пройдем по пунктам снизу вверх – индикатор на графике предусматривает многократное открытие позиции, поэтому ставим «Нет» на предложение открыть ордер один раз. Магический номер необходим, если открытие позиций по сигналам Bollinger Bands будет пересекаться с работающими на графике другими советниками.
Остальные опции понятны, следует только внимательно отнестись к пунктам: 25 – это для четырехзначной системы котировок. При пяти знаках умножайте значения пунктов на 10.
Для нижней линии Боллинджера потребуется создать второе правило, опцию можно выбрать слева вверху, повторив все вышеописанные операции со следующими изменениями:
Полученную стратегию можно сохранить и экспортировать в ForexTester или Metatrader 4. В последнем случае используйте латинские буквы в названии файла. Стратегия сохраняется в файл ex4 в папку, выбранную трейдером.
Запустить написанный советник можно сразу после его установки в Metatrader 4. Это делается обычным способом, описанным на нашем сайте.
Заключение
Основной плюс Конструктора стратегий от Forex Tester – простота интерфейса и функциональность шаблонов. Это позволяет трейдеру частично автоматизировать стратегии или дополнить ручную торговлю дополнительными сигналами, которые приходилось искать визуально на графике.
Любителей сеток особо порадует наличие опции «Мартингейл», а также команд на закрытие всех ордеров по условию. Среди минусов VSB следует отметить баги бета-версии и будущую запланированную плату за опцию. Так что спешим писать и экспортировать советников, пока платформа имеет открытую лицензию.
На ней можно попробовать создать прототип своей торговой идеи и, если она окажется прибыльной, обратиться к программистам для полноценной ее реализации.