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

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

Итак, открываем 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) – завершает работу функции старт до прихода следующего тика.

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

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

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

Подготовлено: Bobs

Обсудить интересующую тему и получить новые знания, можно на Форуме

Содержание курса по программированию на языке MQL4

Публикация от: : Валерий
Имеет вредную привычку – не может сидеть без дела или просто смотреть телевизор. Поэтому все свободное время что-то делает и изучает. Валерий говорит: Трейдинг - это риск и в тоже время свобода, здесь нет начальника над тобой и ты никому ничего не должен, только ты и монитор. Но сидеть постоянно перед монитором это пустая трата времени. Это время можно использовать с большей пользой, а за рынком пусть следит программа, заодно будут сэкономлены деньги на успокоительных средствах. Тестирование торговых стратегий и систем с помощью «экспертов» экономит ему уйму времени. Торгует с помощью «Советников», и это экономит ему не только время но и нервы.

RSSКомментариев (0)

Оставить комментарий



Если вы хотите аватар, получите его в сервисе Gravatar.

  • О портале — Форекс Лаборатория

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

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

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