Рекомендуемый ДЦ - Forex4you !

Недавно мне пришло письмо: Уважаемый Александр Парнюк! если вас не затруднит подскажите пожалуйста как написать индикатор на основе 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