+321 123 4567
info@test.com
My Account
Forex Lab
  • Главная
  • Софт
  • Стратегии
  • Брокер
  • Блог
  • Item A
    • Sub item A1
    • Sub item A2
  • Item B
    • Sub item B1
    • Sub item B2
  • Item C
    • Sub item C1
    • Sub item C2

Написание элементарного индикатора

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

Итак, открываем MetaEditor и создаём пользовательский индикатор «Growth», в окне графика. Видим такую картину:

Написание элементарного индикатора

У нас появились новые элементы:
#property indicator_chart_window – оператор, устанавливающий отображение индикатора в окне графика;

int init() – заголовок специальной функция init() c предопределенным именем «init». Это функция, вызывающаяся в процессе инициализации модуля, т.е. она исполняется один раз в момент прикрепления индикатора к графику, запуска терминала, смены инструмента, таймфрейма, входных параметров, счета; в отличии от функции start(), которая будет исполняться с приходом каждого тика.

int deinit() – заголовок специальной функция deinit() c предопределенным именем. Она вызывается в процессе деинициализации модуля, т.е. она исполняется один раз в момент снятия индикатора с графика, при завершении работы терминала, закрытии окна инструмента, перед сменой инструмента, таймфрейма, при смене входных параметров, счета. Время исполнения специальной функции deinit() ограничено периодом 2,5 секунды.

Обратите внимание – функции init(), deinit(), start() могут располагаться в любой последовательности (deinit, start, init), но только не внутри другой функции.

Теперь будем добавлять наш код.

Исправим #property indicator_chart_window на #property indicator_separate_window.
#property indicator_separate_window – оператор, устанавливающий отображение индикатора в отдельном окне;

В головной части программы (до первой функции) запишем:
#property indicator_buffers 2
Задаем количество буферов в программе, по числу отображаемых линий (2 шт.), максимально – 8.

#property indicator_color1 Blue
#property indicator_color2 Red
Задаем цвета для линия1 и линия2

double Buf_0[], Buf_1[];
Присваиваем тип значения double (действительные числа) и объявляем 2 буфера — Buf_0[] и Buf_1[]. Операцию заканчиваем «;».

В функцию init() добавим:
SetIndexBuffer(0,Buf_0);
SetIndexBuffer(1,Buf_1);
Связываем наши линии с буферами. Порядковый номер линии начинается с 0.

SetIndexStyle (0,DRAW_LINE,STYLE_SOLID,1);
SetIndexStyle (1,DRAW_LINE,STYLE_SOLID,1);
Устанавливаем стиль линий (порядковый номер, линия,  сплошная, ширина =1).

Функцию deinit() применять не будем, поэтому ее можно оставить без изменений или удалить.

В функции start():
int Counted_bars =IndicatorCounted();
Объявляем переменную counted_bars с типом int (целое число) и присваиваем ей значение, равное значению функции IndicatorCounted() – функция возвращает количество баров, не измененных после последнего вызова индикатора. Большинство подсчитанных баров не нуждается в пересчете. Это используется для оптимизации вычислений. Тут мы получаем количество просчитанных баров.

Добавляем:
int i=Bars-Counted_bars-1;
Объявляем переменную i и присваиваем значение, равное Bars (количество баров на текущем графике) минус Counted_bars (количество посчитанных баров) – минус 1 (т.к. текущий бар имеет номер 0). Здесь мы получаем количество баров, которые программе нужно пересчитать.

while(i>=0)
{
…
}
Организуем цикл с помощью составного оператора while. Пока выражение  i>=0 истинно, будут выполняться команды в фигурных скобках. Если выражение ложно – управление будет передано следующему оператору.
Внутри фигурных скобок разместим такой код:
Buf_0[i]= High[i]-Open[i];
Buf_1[i]= Open[i]-Low[i];
i—;
Здесь вычисляются значения буфера 0 и 1 для бара i, потом i уменьшается на 1 (i— равно i-1).
Таким образом, пока i>=0 , будет рассчитываться значение буфера для каждого бара с номером i.
High[], Open[], Low[] – предопределенные переменные, содержащие соответствующие цены каждого бара текущего графика.

return(0) – завершает работу функции старт до прихода следующего тика.

Ненужные комментарии можно удалить. Теперь скомпилируем программу, нажав кнопу «Компилировать».

Написание элементарного индикатора

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

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

Написание элементарного индикатора

Написание простого скрипта — https://forexlab.ru/mql-simple-script/

Предыдущая запись
Написание простого скрипта
Следующая запись
Написание советника для торговли

Свежие записи

  • Как работают биржи: классификация, виды, особенности
  • Moving Average: описание, настройка, стратегии
  • Что такое Non farm payrolls
  • HQBroker: мошенники или честный брокер
  • Торговля на бирже для начинающих: полный гайд

Рубрики

  • CFD (2)
  • FOREX (14)
  • Meta Trader 5 (6)
  • MetaTrader 4 (13)
  • Price Action (9)
  • QUIK (2)
  • Акции (9)
  • Бинарные опционы (11)
  • Биржи (1)
  • Брокеры (5)
  • Волновой анализ (7)
  • Графический анализ (28)
  • Индикаторный анализ (36)
  • Криптовалюты (2)
  • Методы управления капиталом (11)
  • Новости проекта Forex Lab (2)
  • Объемы (10)
  • Основы торговли (7)
  • Подкаст (7)
  • Полезное (3)
  • Программирование (20)
  • Психология трейдинга (25)
  • Свечной анализ (2)
  • Скальпинг (1)
  • Технический анализ (19)
  • Торговые платформы (26)
  • Торговые стратегии и системы (73)
  • Фибо (11)
  • Фондовый рынок (27)
  • Фракталы (4)
  • Фундаментальный анализ (19)
  • Фьючерсы (20)

Представленная информация не является индивидуальной инвестиционной рекомендацией, ни при каких условиях, в том числе при внешнем совпадении ее содержания с требованиями нормативно-правовых актов, предъявляемых к индивидуальной инвестиционной рекомендации. Любое сходство представленной информации с индивидуальной инвестиционной рекомендацией является случайным.
Какие либо из указанных финансовых инструментов или операций могут не соответствовать Вашему инвестиционному профилю.
Упомянутые в представленном сообщении операции и (или) финансовые инструменты ни при каких обстоятельствах не гарантируют доход, на который Вы возможно рассчитываете при условии использования предоставленной информации для принятия инвестиционных решений.
Информационный портал ForexLab не несет ответственности за возможные убытки инвестора в случае совершения операций, либо инвестирования в финансовые инструменты, упомянутые в представленной информации.
Во всех случаях определение соответствия финансового инструмента либо операции инвестиционным целям, инвестиционному горизонту и толерантности к риску является задачей инвестора.
Не является образовательной деятельностью. Не сопровождается выдачей документов об образовании и (или) квалификации. При полном или частичном использовании материалов сайта ссылка на https://forexlab.ru/ обязательна.

© 2008-2020 Forex Lab

  • Главная
  • Политика
  • Авторские права
  • Согласие
  • Риски
  • Оферта