Отрисовка вертикальных линий на экстремумах.

 
Друзья, приветствую вас.

Подскажите, пожалуйста, как написать индикатор, делающий следующее:

на заданной глубине истории (например, 1000 - 2000 баров) индикатор ищет экстремумы, и на этих экстремумах расставляет вертикальные прямые разного цвета ( в зависимости от того, является экстремум максимумом или минимумом)

Графическое изображение такое:


синяя вертикальная линия ставится на найденном минимуме;
красная - на максимуме.

Буду очень признателен любым советам.
Заранее вам спасибо за ответ.
 
За основу зигзаг можно взять.
 

Илья, обратите внимание: вам пришло в голову отрисовывать вертикальные линии на экстремумах, но не пришло в голову отрисовывать горизонтальные. Не вы один. При пересечении этих линий образуются прямоугольники. Я сам не занимался таким анализом, просто это такой подход: делать то, что не делает большинство.
За основу действительно лучше взять зиг-заг. Поищите, были тут коды с массивами по зиг-загу.

 
спасибо, что откликнулись, коллеги.

Просто провожу небольшое стат исследование рыночное.

ZigZag приемлемо максимумы/минимумы ищет.
Просто я столкнулся с проблемой, как сменить отрисовку с Arrow на вертикальные линии.
При установке стиля SetIndexStyle(0,DRAW_ARROW) в ЗигЗаге у меня нет варианта, похожего на OBJ_VLINE.
 
Можно использовать DRAW_LINE, но не заполняя пустые значения.
 
Не совсем так....

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

если мы просто напишем SetIndexStyle(0, DRAW_LINE), то ничего прорисовываться не будет...

во вложении - код ЗигЗага...

Голову ломаю, как вертикальные линии сюда вставить...
Файлы:
zigzag.txt  7 kb
 

#property indicator_chart_window
#property indicator_buffers 3
#property indicator_color1 Yellow
#property indicator_color2 Blue
#property indicator_color3 Red
double A[];
double B[];
double C[];
int init()
  {
   SetIndexBuffer(0,A);
   SetIndexBuffer(1,B);
   SetIndexBuffer(2,C);
   SetIndexStyle(0,DRAW_LINE);
   SetIndexStyle(1,DRAW_LINE);
   SetIndexStyle(2,DRAW_LINE);
   return(0);
  }
int deinit()
  {
   return(0);
  }
int start()
  {
  int counted_bars=IndicatorCounted();
       
 for(int i=0;i<Bars;i++)
   {
   A[i]=iCustom(NULL,0,"zigzag",12,5,3,0,i);
   B[i]=iCustom(NULL,0,"zigzag",12,5,3,1,i);
   //C[i]=iCustom(NULL,0,"zigzag",12,5,3,2,i)*100;
   }
   return(0);
 }
 

Вот старая разработка..

Файлы:
 
Друзья, огромное вам спасибо.
выручили по-настоящему!
я чего-то про iCustom забыл совсем...
 


Все украдено до нас)))))))

автор cmillion https://www.mql5.com/ru/code
Файлы:
Причина обращения: