ПОЛЬЗОВАТЕЛЬСКИЕ ИНДИКАТОРЫ ФОРЕКС ДЛЯ ЧЕГО ОНИ

Лучшие Форекс брокеры 2021 года:

Язык MQL4 для "чайников". Пользовательские индикаторы (часть 1)

Это четвертая статья из цикла «Язык MQL4 для ‘чайников'». Сегодня мы будем учиться писать пользовательские индикаторы. Мы изучим классификацию свойств индикаторов, посмотрим, как эти свойства влияют на сам индикатор, узнаем про новые функции и оптимизацию, и наконец-то напишем несколько своих индикаторов. Кроме того, в конце статьи вас ждут советы по стилю программирования. Если это первая статья «для чайников», которую вы читаете, то, пожалуйста, прочитайте предыдущие статьи, чтобы у вас не возникало никаких вопросов. Кроме того убедитесь, что вы хорошо разобрались в старом материале, так как в этой статье я не буду объяснять основы.

Какие бывают индикаторы?

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

Это Скользящее Среднее (Moving Average, MA), часто используемый технический индикатор. Обратите внимание на следующие важные вещи:

  • индикатор рисуется в окне самого графика
  • индикатор выводит лишь один показатель
  • диапазон значений индикатора никак не ограничен и зависит от текущих цен
  • линия рисуется определенным цветом, толщиной и стилем (сплошная линия)

Теперь давайте посмотрим на другой индикатор:

Это Процентный Диапазон Вильямса (Williams’ Percent Range, %R). Обратите внимание, что:

  • индикатор рисуется в отдельном подокне
  • как и в предыдущем случае, индикатор выводит лишь один показатель
  • диапазон значений индикатора строго ограничен
  • сама линия рисуется другим стилем, цветом и толщиной

Таким образом, существуют следующие свойства индикаторов:

Рейтинг брокеров FOREX:
  • индикатор рисуется: в окне графика цен или в отдельном подокне. Теперь давайте разберемся, почему Скользящее Среднее рисуется на графике цен, а Процентный Диапазон Вильямса в отдельном окне. Вся разница — это диапазон выводимых значений. Обратите внимание, что второй индикатор выводит значения в диапазоне от 0 до -100. Теперь представьте, что мы выводим эти значения в окно цен. Что бы произошло?? Вы бы даже не увидели эту линию, потому что цена выводится в гораздо более скромном диапазоне. В нашем случае: от 0.6805 до 0.7495. И тут дело даже не в этом. Цены — это положительные числа, а показатель у нас отрицательный. Индикаторы рисуются в отдельном подокне, если их показатели не входят в диапазон цен активного графика. Если же диапазон приблизительно совпадает (например, различные виды скользящих средних), то индикатор рисуется в окне графика. В будущем настраивайте это свойство индикатора по этой простой логике. Посмотрите рисунок:
  • индикатор, который выводится в отдельном подокне может быть ограничен в строгом диапазоне. Это значит, что терминал установит фиксированный масштаб на вывод показателя индикатора и даже если значения «выходят» за диапазон, то вы этого просто не увидите. Если же вы отключите это свойство, то терминал будет автоматически изменять масштаб таким образом, чтобы в окно помещались все значения индикатора. Посмотрите рисунок:
  • индикатор может выводить свои значения разным цветом, стилем и толщиной. Вы часто это видели, когда настраивали внешний вид индикаторов в терминале. Здесь имеется одно ограничение: если вы используете толщину линии больше 1, то вы можете использовать только один стиль — сплошную линию.

Теперь давайте посмотрим на еще один индикатор:

Как видите, индикатор Объемов (Volumes) рисуется в виде гистограммы. Таким образом, существуют еще несколько видов вывода показателей индикатора. Вот пример другого типа вывода:

индикатор Фракталов (Fractals) рисуется в виде определенных символов. А теперь внимательно посмотрите на следующий индикатор:

Это индикатор Аллигатор (Alligator). Обратите внимание, что индикатор одновременно рисует 3 показателя (линии баланса). Как это работает?? Дело в том, что любой (есть и исключения, но о них в другой раз) индикатор при выводите использует буферы данных.

Буфер данных — это почти обычный массив. Его отличительная особенность заключается в том, что этим массивом частично управляет терминал. Терминал изменяет массив таким образом, что с появлением каждого нового бара происходит смещение. Это делается для того, чтобы каждый элемент массива соответствовал определенному бару. Максимальное количество выводимых буферов данных в одном индикаторе: 8. Да, сейчас все звучит очень запутанно, но скоро вы поймете, что иначе и быть не могло. Просто запомните, что каждой линии в индикаторе Alligator соответствует свой буфер данных. Также каждый буфер имеет свои параметры, в соответствии с которыми терминал и рисует их. В нашем случае есть 3 буфера, которые можно описать следующим образом:

  1. Первый буфер: рисуется сплошной линией зеленым цветом с толщиной 3.
  2. Второй буфер: рисуется пунктирной линией красным цветом с толщиной 1.
  3. Третий буфер: рисуется сплошной линией синим цветом с толщиной 2.

Индикатору необязательно рисовать какой-то буфер. Он может быть использован для промежуточных расчетов. Поэтому буферов может быть больше, чем вы видите. Но самое главное свойство буфера данных — это то, что каждый элемент буфера соответствует определенному бару на графике цен. Просто запомните это, скоро вы увидите, как это соответствие работает в коде.

Надежные Форекс платформы:

Теперь давайте подведем итог нашей небольшой экскурсии. Любой индикатор имеет такие свойства:

  • один или больше буферов данных (хотя это тоже не обязательно) для вывода своих показателей или расчета промежуточных результатов. В свою очередь каждый буфер также имеет свои свойства, которые определяют, как он будет рисоваться и будет ли вообще. Например: рисовать показатель в виде гистограммы, символа или линии; каким цветом и стилем.
  • где должен рисоваться индикатор (в окне графика или в подокне).
  • если индикатор рисуется в подокне, то нужно ли ограничивать диапазон или производить масштабирование автоматически.

Убедитесь, что вы хорошо разобрались и понимаете все эти свойства. Сейчас мы воспользуемся Мастером, чтобы создать пользовательский индикатор.

Создание пользовательского индикатора

Запускаем Meta Editor, выбираем Файл->Создать:

Появляется окно Мастера создания советника, выбираем Пользовательский индикатор, нажимаем Далее:

Заполняем поля Имя, Автор и Ссылка. Тут все как обычно, но теперь вы можете добавлять параметры. Что же это такое??

Параметры — это обычные переменные, которые может настраивать пользователь. И что очень важно, эти переменные можно использовать в коде индикатора. Назначение параметров очевидно — вы позволяете пользователям настраивать некоторые аспекты работы индикатора. Это может быть что угодно. Например: какой таймфрейм использовать, в каком режиме работать, сколько баров брать для усреднения и т.д.

Сейчас (для наглядного примера) мы добавим параметр, который будет указывать, сколько баров должно обрабатываться для расчета показателя нашего индикатора. Где это может быть использовано?? Представьте, например, что ваш индикатор серьезно нагружает процессор, так как проводит много сложных вычислений. При этом вы часто меняете таймфрейм графика и просматриваете лишь 100-200 последних баров. Зачем в таком случае проводить лишние вычисления и ждать несколько лишних секунд?? Вот тут нас и выручит этот параметр. Конечно, в нашем индикаторе не будет ничего сложного и затратного для ресурсов компьютера. Это просто один из вариантов использования параметров индикатора.

Итак, чтобы добавить параметр нужно нажать на кнопку Добавить (1). После этого вы можете изменить название переменной на что-нибудь более подходящее (2). В нашем случае меняем название на barsToProcess (баров для обработки). Также вы можете изменить начальное значение (3), то есть значение по умолчанию. Меняем на 100. Кроме того, вы можете изменить тип переменной, но в нашем случае ничего менять не нужно, так как тип int идеально подходит для наших целей. После внесения всех необходимых изменений нажимаем Далее:

Почти все готово. Теперь нужно указать, как рисовать индикатор: в отдельном окне или в окне графика цен. Также вы можете ограничить диапазон. Ставим галочку напротив Индикатор в отдельном окне. Ниже мы видим пустое поле Индексы(буферы данных). Здесь вы можете добавить, сколько вам нужно буферов данных (максимум 8). Кроме того, вы всегда сможете добавить или убрать буфера позже, изменив код. Нажимаем Добавить, чтобы добавить один буфер. Теперь вы можете изменить то, как будет отображаться буфер: обычная линия, гистограмма, отрезки или стрелки (символы). Оставим все как есть, то есть тип — Line. Настройте цвет для рисования этого буфера. Нажимаем Готово:

Вуаля!! Ваш первый индикатор готов! Ну и что, что он ничего не рисует, зато сколько кода. Файл с исходным кодом будет размещен в папке с индикаторами: MetaTrader4\experts\indicators.

Разбираем каждую строчку

А теперь давайте посмотри, что для нас создал Meta Editor:

Как всегда, «шапка» из однострочных комментариев включает введенные ранее вами данные. Очень мило, смотрим дальше:

Вы еще помните директиву препроцессора #define из второй статьи? Мы ее использовали для объявления констант. Так вот, это еще одна директива. Она используется для того, чтобы указать какие-то специфические свойства индикатора. В нашем случае, чтобы указать авторство. Обратите внимание, что сначала идет специальный знак — # (решетка), потом ключевое слово property (без пробела). Property означает свойство. Дальше идет конкретное свойство, которое мы хотим задать, в нашем случае copyright, а потом значение этого свойства. В нашем случае — это строка с вашим именем. С помощью директивы #property можно настроить много специфических аспектов индикатора, в чем вы сейчас убедитесь. Все эти свойства будут заданы по умолчанию. Смотрим дальше:

Эта директива указывает, как можно связаться с автором. Вы можете спросить: где же эти данные (имя автора, как связаться), они ведь нигде не отображаются? Да, не отображаются, но они «прошиваются» в исполняемый файл. Если просмотреть исполняемый файл как обычный текст, то вы сможете увидеть эти данные:

Эта директива указывает, что индикатор должен рисоваться в отдельном подокне. Как видите, никаких дополнительных параметров не указывается, как, например, в предыдущей директиве.

Эта директива указывает, сколько буферов данных будет использовать индикатор. Как вы заметили, директивы чем-то похожи на обычные функции: Они тоже принимают какие-то параметры и что-то делают в ответ. Но есть важное отличие: директивы выполняются в первую очередь (еще до начала компиляции).

Указываем цвет по умолчанию для первого буфера. Обратите внимание, что нумерация буферов в директивах начинается с единицы, а не с нуля. Постарайтесь запомнить это, чтобы в дальнейшем не возникало никакой путаницы. Цвет указывается с помощью одного из множества предопределенных названий. Посмотреть ключевые слова для всех доступных цветов можно в справке: Справочник MQL4 -> Стандартные константы -> Набор Web-цветов. Аналогично можно указать цвет и для других буферов, нужно просто изменить номер буфера.

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

Это обычный массив. Просто не указывается размерность и не выполняется инициализация. Этот массив в дальнейшем будет настроен как буфер данных.

Дальше у нас идет объявление и описание функций. В отличие от привычного для вас скрипта, в каждом индикаторе имеется 3, а не 1 функция:

  • init() — эта функция вызывается терминалом только один раз, когда вы запускаете индикатор. Ее назначение: подготовить индикатор для работы. Настроить буфера данных, проверить параметры (мало ли что там мог пользователь ввести) и другие подготовительные действия. Эта функция не является обязательной. Если вы не выполняете никакого кода в ней, то можете ее просто удалить.
  • deinit() — эта функция также вызывается только один раз, когда вы удаляете индикатор с графика. В ней вы должны подготовить индикатор для завершения работы. Например, закрыть открытые файлы, удалить графические объекты с графика (не переживайте, еще научитесь). Эта функция также необязательная.
  • start() — эта функция в отличие от скриптов, в индикаторе вызывается каждый тик. То есть, как только поступают новые котировки от валютной пары, к графику которой вы применили индикатор, так и будет сразу вызвана эта функция. Кроме того, эта функция вызывается при первом запуске индикатора, то есть после функции init().

Посмотрим, что происходит в каждой функции:

Здесь у нас вызываются 2 важные функции для настройки буфера данных:

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

Эта функция «привязывает» массив к номеру буфера. То есть она указывает, что буфер с указанным номером будет использовать указанный массив для хранения данных. Таким образом, в результате, изменяя элементы этого массива, вы будете изменять значения самого буфера. Фактически массив — это и есть буфер данных. Первый аргументномер буфера, к которому нужно привязать массив (нумерация с нуля). Второй аргументназвание массива, который следует привязать.

Завершение функции, возвращаем нуль — инициализация прошла успешно.

Функция деинициализации по умолчанию пуста.

Вот мы и добрались до самой главной функции. Весь основной код размещается здесь. Обратите внимание, что заранее объявлена переменная counted_bars (посчитанные бары), которая инициализируется функцией IndicatorCounted(). Эта переменная обычно используется для оптимизации и ускорения работы индикатора, о чем мы поговорим позже. А сейчас давайте наконец-то что-то нарисуем в окне индикатора!

Дописываем индикатор

Определимся что выводить. Что вообще нам будет показывать индикатор? Что-нибудь простое. Для начала давайте рисовать случайные числа. А что?? Этот индикатор гарантирует вам 50% прибыльных сигналов. Решено.

Идем к нашей функции init() и дописываем код для инициализации генератора случайных чисел:

Инициализация готова, переходим к функции start():

Компилируем — F7. Запускаем терминал, находим панель Навигатор, выбираем раздел Пользовательские Индикаторы и делаем двойной клик на названии нашего индикатора:

Индикатор будет добавлен к активному графику:

Как видите, все работает, теперь давайте хорошенько разберемся, что делает этот код:

Мы используем цикл for для того, чтобы пройтись по всем элементам буфера данных. Так как каждому элементу буфера соответствует определенный бар, то мы используем цикл, начиная проход с нулевого бара (последнего доступного) и заканчиваем первым доступным, который по счету меньше на единицу, чем переменная Bars (потому что мы считаем бары с нуля).

Каждую итерацию счетчик увеличивается на единицу, и мы двигаемся от последнего до первого доступного бара и одновременно присваиваем каждому элементу буфера (который соответствует своему бару) случайное число от 0 до 1000. Если вам сложно понять, как каждому элементу буфера соответствует свой бар, то попробуйте изменить цикл следующим образом и посмотрите на результат в терминале:

Теперь индикатор будет показывать номер каждого бара, посмотрите:

Как видите, номер бара постепенно увеличивается от последнего к первому (от 0 до Bars). Надеюсь теперь вы поняли, каким образом элементы буфера данных соответствуют барам на графике.

Давайте вернемся к коду «случайного» индикатора. Если бы вы начали использовать его хотя бы на протяжении нескольких минут, то заметили бы, что каждый тик индикатор будет рисовать абсолютно другой график. То есть каждый тик индикатор выполняет повторные вычисления того, что мы уже посчитали в прошлый раз. Нам это будет неудобно хотя бы потому, что мы не будем видеть даже то, что было тик назад. Но дело даже не в этом, потому что такой индикатор никто использовать не будет — мы всего лишь учимся. Дело в другом. Представьте, что ваш индикатор выполняет очень много сложных вычислений и расчет одного бара занимает много ресурсов процессора. В таком случае, когда появится новая цена, ваш индикатор снова и снова будет рассчитывать показатель для каждого доступного бара, даже если это уже происходило раньше. Понимаете? Вместо того, чтобы один раз посчитать, он будет делать это снова и снова. Устранение подобных проблем, которые связаны с нерациональным использованием ресурсов и называется оптимизацией.

Как же решить эту проблему? Обычно поступают следующим образом. Сначала индикатор рассчитывается на всех доступных свечах, а уже потом по мере поступления котировок, будет пересчитываться показатель только для последней свечи. То есть поступаем рационально — никаких лишних телодвижений. Давайте оптимизируем функцию start(), чтобы она работала именно так:

Разбираем каждую строку:

Объявляем переменную counted_bars, которая будет хранить количество посчитанных индикатором баров. На самом деле функция IndicatorCounted() возвращает количество неизмененных баров после прошлого вызова функции start(). Таким образом, если это первый вызов функции start(), то IndicatorBars() возвратит нам 0, так как все бары для нас новые. Если же, это не первый вызов, то очевидно, что изменился только последний бар, поэтому IndicatorBars() возвратит число равное Bars-1.

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

Как уже было сказано, если IndicatorCounted() возвращает 0, то это значит, что функция start() вызывается впервые и все бары для нас «новые» (еще не рассчитывался индикатор для них). Но если это не первый вызов start(), то нам будет возвращено значение равное Bars-1. Так вот, это условие отслеживает как раз такую ситуацию. После чего мы уменьшаем переменную counted_bars на 1. Зачем это делается, ведь измениться может лишь последний бар?? Оказывается, что бывают ситуации, при которых последний тик предыдущего бара оказывается необработанным из-за того, что в момент прихода этого последнего тика обрабатывался предпоследний тик. Поэтому пользовательский индикатор не был вызван и не был рассчитан. Именно поэтому мы уменьшаем на 1 переменную counted_bars, чтобы исключить эту ситуацию.

Здесь мы присваиваем переменной limit (ограничителю) количество последних баров, которые нужно пересчитать. Так как в переменной counted_bars хранится количество свечей, которые уже рассчитаны, то мы просто находим разницу между Bars (всего доступных баров) и counted_bars, чтобы определить, сколько свечей необходимо пересчитать.

Сам цикл почти не изменился. Мы всего лишь поменяли условие выполнения. Теперь цикл будет выполняться пока счетчик i меньше чем ограничитель limit.

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

Вы еще не забыли про параметр индикатора (barsToProcess), который мы добавили в мастере. Сейчас самое время чтобы его задействовать. Нужно добавить всего пару строк перед циклом:

Как видите, все достаточно тривиально. Мы проверяем или больше limit чем barsToProcess и если да, то уменьшаем ограничитель через присваивание. В результате, если установить barsToProcess=100, то вы сможете наблюдать похожую картину:

Как видите, рассчитывается только определенное нами количество баров.

Наш индикатор практически готов. Но у нас нет четких сигналов для входа в рынок. Поэтому нужно добавить определенности. Для этой цели нам подойдут уровни.

Уровни — это горизонтальные линии, которые рисуются индикатором определенным стилем, цветом и толщиной. Важно отметить, что максимальное количество уровней на одном баре: 8. Кроме того вы можете задавать уровни как с помощью директив, так и используя функции. Предпочтительнее использовать первый вариант, если вы собираетесь настроить уровни по умолчанию. Для динамического изменения уровней во время работы индикатора используйте функции. Итак, разместим 2 уровня: первый на отметке 800, второй — 200. Для этого добавим несколько директив в начале кода индикатора:

Разберемся в новых директивах:

Эта директива указывает, что уровень номер 1 следует разместить на отметке 800.0. Обратите внимание, что нумерация буферов начинается с единицы, подобно тому, как это сделано в директивах для настройки буферов. Чтобы настроить другой уровень, следует просто поменять номер уровня в конце директивы:

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

Эта директива устанавливает цвет, который будет использоваться для рисования всех уровней.

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

Эта директива задает стиль для рисования линии. Доступны такие предопределенные константы:

  • STYLE_SOLID — сплошная линия
  • STYLE_DASH — штриховая линия
  • STYLE_DOT — пунктирная линия
  • STYLE_DASHDOT — штрих-пунктирная линия
  • STYLE_DASHDOTDOT — штрих-пунктирная линия с двойными точками

На этом разработка нашего «случайного» индикатора закончена. Давайте сохраним исходный файл с более подходящим названием — randomIndicator.mq4. Перекомпилируйте исходники еще раз. В следующем разделе этот индикатор нам еще пригодиться. Финальная версия с уровнями должна выглядеть примерно так:

Функция iCustom

Сейчас мы познакомимся с очень полезной функцией — iCustom. Она используется для того, чтобы получить показатели любого пользовательского индикатора. То есть, если для встроенных индикаторов мы используем функции для работы с техническими индикаторами, которые мы рассмотрели в прошлой статье (например: iADX(), iMACD и т.д.), то для всех остальных индикаторов (пользовательских индикаторов) мы используем функцию iCustom. Эта функция является универсальной и может использоваться с любым пользовательским индикатором, который соответствует таким требованиям:

  • индикатор откомпилирован и имеет вид исполняемого файла (*.ex4)
  • индикатор размещен в папке MetaTrader 4\experts\indicators

Прототип функции имеет следующий вид:

  • symbol – определяет, какой финансовый инструмент (валютную пару) использовать для вычисления показателя пользовательского индикатора. Используйте NULL (или 0), если вам нужен текущий (активный) инструмент (график).
  • timeframe – определяет, на каком тайм фрейме (периоде) использовать индикатор. Используйте 0 для текущего периода или одну из констант (PERIOD_M1, PERIOD_M5, PERIOD_M15, PERIOD_M30, PERIOD_H1, PERIOD_H4, PERIOD_D1, PERIOD_W1, PERIOD_MN1).
  • name – название исполняемого файла пользовательского индикатора. Указывается только название: не нужно писать расширение(.ex4) или путь к файлу(experts/indicators/). Например, если название исполняемого файла пользовательского индикатора имеет вид «RandomIndicator.ex4», то нужно написать «RandomIndicator». При этом регистр не имеет значения. То есть можете написать «RANDOMindicator» и это тоже сработает.
  • . – в этом месте указываются все значения параметров пользовательского индикатора. Например, в нашем индикаторе RandomIndicator всего один параметр — barsToProcess. То есть в нашем случае, мы напишем здесь 100 (или другое подходящее вам значение). Если параметров больше одного, то они указываются в том порядке, в котором они объявлены в пользовательском индикаторе через запятую. Если не очень понятно, то не беспокойтесь, мы сейчас напишем индикатор на основе этой функции.
  • mode – режим работы пользовательского индикатора. На самом деле это всего лишь номер буфера данных, значение которого вы хотите получить. Нумерация производиться с нуля (в отличии от директив). Если пользовательский индикатор имеет всего лишь один буфер данных, то следует указать 0 в качестве этого параметра.
  • shift – определяет, к какому бару применить пользовательский индикатор.

Примеры использования:

Сигнальный индикатор

Сейчас мы с вами напишем еще один простенький индикатор. Итак, представьте себе такую ситуацию. Вы написали довольно сложный индикатор с множеством буферов данных. Многие из них выводятся в отдельном окне, остальные используются для промежуточных расчетов. Вы точно знаете сигналы на покупку и продажу. Но вот незадача: их (сигналы) достаточно сложно отследить. Вам приходится постоянно пялится в монитор, пытаясь выявить очередное пересечение линий, которые находятся выше или ниже уровней. Поэтому вы решаете написать еще один индикатор, который делал бы все это сам, а вам лишь показывал сигналы для входа в рынок. Например, это могли бы быть стрелочки, которые указывают, в каком направлении открывать позиции. Это всего лишь фантазия, которая показывает, где было бы уместно написать сигнальный индикатор. У нас ситуация намного проще, но карта той же масти.

Мы будем писать сигнальный индикатор на основе прошлого индикатора RandomIndicator. Сначала нужно точно определить условия для входа в рынок. Уровни мы ведь не просто так добавляли, поэтому условия будут следующие:

  • если линия поднимается выше верхнего уровня (800.0), то покупаем
  • если линия опускается ниже нижнего уровня (200.0), то продаем

Теперь пришло самое подходящее время для написания нового индикатора. Воспользуйтесь мастером для создания нового пользовательского индикатора. Добавьте один дополнительный параметр, как в прошлый раз:

А последний шаг настройте следующим образом:

Сначала нужно добавить 2 буфера данных, которые будут использоваться, чтобы рисовать сигналы на покупку и продажу в виде стрелочек. Измените тип буферов данных на Arrow. Поменяйте цвета и измените коды символов. Ниже представлены все доступные коды символов:

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

Мы используем 2 буфера данных, потому что мы не можем рисовать разные стрелочки (символы) одним буфером. Каждый буфер данных, который выводится в виде символов, может рисоваться только одним символом. Теперь давайте внимательно посмотрим на код инициализации индикатора:

Обратите внимание, что теперь используется другая константа для типа вывода буфера данных — DRAW_ARROW:

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

SetIndexEmptyValue используется, чтобы указать «пустое» значение. То есть мы указываем, при каком значении не нужно ничего рисовать вообще. Это очень удобно в нашем случае, так как сигналы встречаются далеко не на каждом баре. Это работает следующим образом. Когда вам не нужно выводить стрелочку на текущем баре, вы присваиваете соответствующему элементу буфера данных «пустое» значение, в нашем случае 0. Первый аргумент функции — номер буфера данных. Второй — «пустое» значение:

Остальной код инициализации настраивает буферы аналогично «случайному» индикатору, который мы рассмотрели выше. Теперь давайте допишем код в функцию start():

Весь код до цикла повторяется из «случайного» индикатора. Вообще этот код является стандартным в любом индикаторе и повторяется с небольшими изменениями. Давайте детально разберем цикл:

Сначала мы объявляем переменную randomValue (случайное значение), которой присваиваем значение нашего «случайного» индикатора на текущем баре. Для этого мы используем функцию iCustom:

Если значение «случайного» индикатора больше верхнего уровня (800), то это сигнал на покупку:

Иначе, если сигнала на покупку нет, то:

Если же значение «случайного» индикатора меньше нижнего уровня (200), то это сигнал на продажу:

Иначе, если сигнал на продажу отсутствует, то:

Вот и весь цикл. Откомпилируйте индикатор и запустите его в терминале:

О стиле

Нет, не о том, как правильно подобрать галстук к костюму и рубашке, хотя всегда актуально. Стиль программирования очень важен, если вы не пишите код исключительно для себя. Дело в том, что у каждого программиста свой индивидуальный стиль. Каждый по-разному оформляет циклы, делает разные отступы (а некоторые вообще не делают), объявляет переменные и т.д. Вы должны выработать свой стиль программирования, которого вы будете придерживаться в дальнейшем. Я хочу дать вам пару советов, которые помогут сделать код более читабельным и приятным для восприятия:

  • не пишите много операций в одну строку через точку с запятой (;).
  • пишите названия переменных и функций на английском языке
  • в названиях переменных используйте заглавные буквы как разделители
  • не злоупотребляйте сокращениями, называя переменные и функции
  • делайте отступы строгой длины, чтобы блоки кода были выровнены
  • в каждом новом теле (цикла, условия) делайте дополнительный отступ
  • группируйте объявления однотипных переменных
  • хорошо комментируйте большие и сложные блоки кода
  • хорошо комментируйте написанные вами функции (их назначение, параметры)

Заключение

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

Индикаторы для Форекс, что это такое

Работать на Форекс — непросто, об этом известно, пожалуй, что всем новичкам. Однако многим из них невдомёк, что половину работы на рынке можно возложить на индикаторы. На портале опытных Форекс-трейдеров tlap.com можно выбрать индикаторы, советники и торговые стратегии, а также посмотреть обучающее видео, наглядно демонстрирующее, как всеми этими инструментами можно пользоваться.

Так что же такое «индикаторы»?

Если вкратце отвечать на этот вопрос, то индикаторами называются инструменты, дающие прогноз того, куда дальше будет двигаться ломаная линия валютного курса. Более того, некоторые индикаторы подают сигналы трейдерам, когда им следует открывать свои позиции, и когда их закрывать. Кажется, что с индикаторами работать на Форекс — проще простого и так оно и есть, но!

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

Кроме того, не стоит слепо доверять сигналам индикатора, а необходимо научится их правильно читать, понимать, интерпретировать. Да, это дело не из лёгких, но ведь никто и не говорил, что работать на Форекс просто.

Как выбрать индикатор?

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

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

Выбирая для себя тот или иной индикатор, разумно потренироваться работать с ним на демо-счёте и если вы с ним «сработались», то можно проверить его уж в деле.

Бесплатные индикаторы для Форекс – для чего они нужны трейдеру?

Форекс индикатор является эффективным инструментом прогнозирования курсов. Для его расчета нужно выполнить определенные математические операции с ценами и объемом.

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

Классификация платных и бесплатных индикаторов для Форекс (бесплатно скачать можно любой из них)

Существует пять основных групп таких индикаторов: трендовые индикаторы, осцилляторы, пользовательские индикаторы, индикаторы Билла Вильямса, индикаторы объема.

При помощи трендовых индикаторов находят тренды на рынке и определяют направление ценовых движений. Очевидно, что такой тип индикатора будет абсолютно неэффективным в случае флета – отсутствия тренда на рынке.

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

Направление движения рынка и моменты разворота покажут трейдеру пользовательские индикаторы.

Индикаторы Билла Вильямса будут эффективны в качестве составной части торговой системы Билла Вильямса.

Бесплатные индикаторы объема учитывают в своих расчетах объемы, которые в Форексе означают количество изменений цены за определенный промежуток времени.

Конечно, ни один из перечисленных выше индикаторов отдельно не может гарантировать прогноза точного на все 100%. Лучше всего использовать в комплексе несколько индикаторов Форекс. Скачать бесплатно их сейчас можно на многих ресурсах. В некоторые терминалы они, кстати, уже встроены автоматически. Скачать индикаторы Форекс бесплатно Вы также можете и на нашем сайте.

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

ПОЛЬЗОВАТЕЛЬСКИЕ ИНДИКАТОРЫ ФОРЕКС ДЛЯ ЧЕГО ОНИ

По принципам построения и использования все индикаторы объема можно разделить на две категории: повторяющие ценовой график с различными степенями сглаженности (OBV, A/D) и осцилляторы, представляющие в виде графика различные изменения в настроениях на рынке (осциллятор объема, индикатор Клингера, осциллятор Чайкина). Все перечисленные группы и конкретные индикаторы объема подобны и действуют согласно следующим простым правилам:

Трендовые индикаторы форекс – Xprofuter и Fourier Extrapolator

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

Индикатор форекс Гойлер

Индикатор «Форекс Goiler» является сигнальным инструментом технического анализа, имеющим определенную известность среди трейдеров и аналитиков. Он отличается достаточно точными сигналами, поэтому скачать индикатор форекс и протестировать применительно к своей торговле следует обязательно.

Принцип работы индикатора «Форекс Гойлер» основан на методике Ганна, которая позволяет раз в сутки получать торговые сигналы и наиболее удачные уровни тейк-профита и стопа для открываемой позиции.

Индикатор по волнам Вульфа — WolfWave nen-2

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

Индикатор новостей форекс

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

Супер индикатор форекс Traders Dynamic Index

Одной из задач трейдера во время проведения анализа является определение состояния рынка. При этом желательно выполнить это комплексно, учитывая силу и направления тренда, а также волатильность рынка. Другими словами трейдеру нужно провести всесторонний мониторинг. Для этого можно либо воспользоваться многочисленными инструментами теханализа, либо установить на свою торговую платформу всего один индикатор tdi (Traders Dynamic Index). Отметим, что данного инструмента нет в стандартном наборе MetaTrader4, поэтому его потребуется дополнительно подключать.

Графический индикатор форекс Глаз

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

Ранговая корреляция – коэффициент Спирмена

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

Самый лучший индикатор форекс для прогнозирования

Индикатор Xprofuter представляет собой инструмент технического анализа, позволяющий предсказать поведение цены в будущем. Он выделяется среди остальных индикаторов, работающих с торговой платформой MetaTrader4, тем, что разработчики не разглашают алгоритм его работы. Это привело к появлению неоднозначных отзывов. Одни утверждают, что Xprofuter чуть ли не самый лучший индикатор форекс, другие называют его очередной «уткой», предназначенной лишь для наживы создателей. Давайте же рассмотрим, какой же из теорий верить.

Трендовый индикатор SuperTrend

Трендовый индикатор SuperTrend основан на двух других инструментах теханализа. В его расчетах используются 5-периодный ATR (Average True Range) и 50-периодный CCI (Commodity Channel Index). На первом рисунке показаны графики всех трех индикаторов.

Индикаторы на Форекс: для чего они нужны?

Этот вопрос является одним среди множества тех, ответы на которые интересуют практически всех начинающих трейдеров. К огромному сожалению ответить на него кратко и лаконично не получиться, как минимум потому, что тот же самый индикатор osma позволяет решать целый ряд задач причём одновременно. Данный индикатор можно найти в стандартном пакете в группе осцилляторов, что используется Четвёртый и Пятый MetaTrader. Однако, и это очень странно в торговых стратегиях используется индикатор «OsMA» довольно редко, а некоторые трейдеры даже никогда о нём и не слышали.

Итак, для чего нужны индикаторы

Как уже упоминалось выше индикаторы призваны выполнять несколько задач и делать это одновременно. Сами же по себе индикаторы можно разделить на два основных вида на «технические» и на «информационные», каждая из этих групп заслуживает особого внимания и изучения. Но для того, чтобы разобраться с ними, трейдеру разумно пообщаться лично с экспертами Форекс.

В общем же и целом можно сказать, что техническая группа индикаторов отслеживает колебание соотношений ценой и объёмом «в» или «за» определённые промежутки времени. Информационные индикаторы в свою очередь собирают необходимую для трейдера информацию и оперативно выдают её в подходящее для этого время. Информационные индикаторы не используются как источники сигналов для открытия или закрытия позиции, однако их показания существенно влияет на принятие торговых решений.

О работе на Форекс

Современная экономическая ситуация в нашей стране, да и во всём мире на фоне коронавирусной пандемии и необходимости соблюдения требований социального дистанцирования, заставляет людей пересматривать своё отношение к организации рабочего процесса. Примечательно, что в данное время работа трейдером на рынке Форекс кажется буквально идеально вписывающейся в существующие реалии. Иными словами, если вы пребываете в поисках подработки или нового места работы вам стоит пристальнее присмотреться к работе трейдером, тем более что сегодня существует огромное количество стратегий, помощников, советников, индикаторов и так далее, которые существенно упрощают торговлю на Форекс.

Брокеры, дающие высокие бонусы:
ПОЛЬЗОВАТЕЛЬСКИЕ ИНДИКАТОРЫ ФОРЕКС ДЛЯ ЧЕГО ОНИ