MQL для чайников, программирование на MQL4, MQL5
8 Мар
Недавно мне пришло письмо: Уважаемый Александр Парнюк! если вас не затруднит подскажите пожалуйста как написать индикатор на основе 4х цен свечного графика? Визуально это должно выглядеть как обычный свечной или баровский график только свечи не показывают тренд а выровнены по цене открытия по нулевой оси, т.е. бычьи свечи будут над осью Х а медвежьи под ней но цена открытия всегда на ней и главное тени (весь обьем взятого интервела времени) можно конечно представить как макд только в столбце тело свечи отображено одним цветом а тени другим чтоб явно читались четыре цены.
Подобного урока по индикаторам форекс у меня нет. Поэтому сегодня я решил показать как пишутся такие индикаторы. Для начала запускаем мастер создания советников forex:
Выбираем «Пользовательский индикатор». В следующем окне указываем название Нашего индикатора форекс. Так как входные параметры нам не нужны — оставим их не заполненными:
На следующем окне указываем что индикатор будет выводиться в отдельном окне, указываем цвета Нашего индикатора и тип вывода (линия, гистограмма, стрелки):
Мы выбрали тип рисования — гистограмма для отображения значений в виде вертикальных линий. После нажатия кнопочки «Готово» будет сгенерирован код индикатора форекс для MT4:
//±-----------------------------------------------------------------+
//| Cand.mq4 |
//| Copyright © 2010. |
//| http://mql4you.ru |
//±-----------------------------------------------------------------+
#property copyright "Copyright © 2010."
#property link "http://mql4you.ru"
#property indicator_separate_window
#property indicator_buffers 2
#property indicator_color1 Green
#property indicator_color2 Red
double ExtMapBuffer1[];
double ExtMapBuffer2[];
//±-----------------------------------------------------------------+
int init()
{SetIndexStyle(0,DRAW_HISTOGRAM);
SetIndexBuffer(0,ExtMapBuffer1);
SetIndexStyle(1,DRAW_HISTOGRAM);
SetIndexBuffer(1,ExtMapBuffer2);
return(0);}
//±-----------------------------------------------------------------+
int deinit() {return(0);}
//±-----------------------------------------------------------------+
int start()
{int counted_bars=IndicatorCounted();
return(0);}
//±-----------------------------------------------------------------+
Для начала нам необходимо увеличить ширину линий, которыми рисуются свечи. Что бы визуально свечи отличались от теней не только цветом. Для этого зададим ширину линий по умолчанию:
#property indicator_width1 2
#property indicator_width2 1
Для линий первого буфера (свечей) мы задали ширину в 2 пиксела, а для линий второго буфера (теней) мы задали ширину в 1 пиксель.
Осталось заполнить буферы значениями по свечам. Для этого пробежимся в цикле по свечам и занесем в первый буфер высоту свечи (Close[]-Open[]), а во второй высоту тени (High[]-Low[]). Так как свечи бывают бычьи (Close>Open) и медвежьи (Close<Open), а высота тени всегда High>Low, то необходимо еще определить знак. В итоге код нашего цикла получиться:
int limit;
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars-- ;
limit=Bars-counted_bars;
for(int i=0; i<limit; i++)
{ExtMapBuffer1[i]=Close[i]-Open[i];
int zn=1;
if(Close[i]<Open[i]) zn=-1;
ExtMapBuffer2[i]=(High[i]-Low[i])*zn;
}
Вот что у нас получилось в итоге:
Скачать: индикатор Сand.mq4
Если Вы хотите изучать язык MQL или вам понравилась данная публикация - Вы можете подписаться на получение новых материалов сайта mql4you.ru по |
10 комментариев на «Язык MQL — Урок 12 «Индикатор в отдельном окне MT4»»
Здравствуйте! Хотел спросить а можно ли сделать советник который бы работал на индикаторе?
А будут ещё публиковаться уроки или нет???
Владислав
Информации на сайте достаточно для начального изучения языка MQL. Если будут интересные вопросы я конечно сделаю уроки по ним.
Амир
Конечно можно. Вот примеры Работа с индикаторами и Работа с внешними индикаторами.
скажите пожалуйста есть ли такой индикатор или скрипт или эксперт который мог бы экспортировать значения (историю) любого индикатора в текстовый файл или эксель?
Александр, с сентября прошлого года читаю ваш блог. Благодаря Вашему блогу и еще кое-каким статьям в интернете запрограммировал и проверил почти все свои торговые стратегии и убедился в их никчемности. Сэкономил на этом свое время и деньги. Спасибо!
Здравствуйте!!скажите,будет ли урок на тему:зависимость размера позиций от волатильности рынка?спасибо за уроки
Здравствуйте!
Начало урока я понял, а конец не понятен вот с этого места:
«В итоге код нашего цикла получиться:» и дальше Вы написали коды без разъяснений.
Александр, пожалуста, растолкуйте, что означают эти коды:
int limit;
int counted_bars=IndicatorCounted();
if(counted_bars>0) counted_bars-- ;
limit=Bars-counted_bars;
for(int i=0; i<limit; i++)
{ExtMapBuffer1[i]=Close[i]-Open[i];
int zn=1;
if(Close[i]<Open[i]) zn=-1;
ExtMapBuffer2[i]=(High[i]-Low[i])*zn;
}
Добрый день! Подскажите пожалуйста как изменить индикатор, что бы он ставился на график непосредственно а не в доп. окно. К примеру индикатор Макди ,возможно поставить не в отдельное окно а на график?
Ратмир значит просто ты никчемный трейдер