Здравствуйте! Начал делать индикатор, который будет отрисовать линий, между двумя пунктами по времени и цене, способ отрисовки лини примерна такой:
Все хорошо, но иногда время пунктов может быть и в одной свече, получается вертикальная линия. Я так понимаю SupportBuffer[w] не получится сделать вертикальным?
Если вместо линии использовать зигзаг, то получится.
Если вместо линии использовать зигзаг, то получится.
Спасибо, попробую разобрать ZigZag и понять принцип отрисовки лини.
Если вместо линии использовать зигзаг, то получится.
Сам ZigZag оказался довольно комплицированым, так просто разобрать не получилось. Но я подготовил простой пример... Можете добавить функцию, где на 3 баре от последнего бара будет линия между High и Low по вашему совету зигзаг? Мне бы понять принцип, дальше уже сам я смогу развивать.
#property indicator_chart_window #property indicator_buffers 1 #property indicator_plots 1 //--- plot Support #property indicator_label1 "Line" #property indicator_type1 DRAW_LINE #property indicator_color1 clrAqua #property indicator_style1 STYLE_SOLID #property indicator_width1 3 //--- indicator buffers double LineTest[]; double HighMapBuffer[]; // highs double LowMapBuffer[]; // lows //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { //--- indicator buffers mapping SetIndexBuffer(0,LineTest,INDICATOR_DATA); SetIndexBuffer(1,HighMapBuffer,INDICATOR_CALCULATIONS); SetIndexBuffer(2,LowMapBuffer,INDICATOR_CALCULATIONS); PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,EMPTY_VALUE); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { //--- int limit=prev_calculated; for(int i2=limit;i2<rates_total;i2++) // New bar recalculate { if(limit<rates_total-1)continue; // New bar recalculate for(int i=0;i<rates_total;i++) { //if(i<rates_total-3 && i>rates_total-15) // H Line 3-15 bar // LineTest[i]=high[rates_total-2]; // Price //else LineTest[i]=EMPTY_VALUE; HighMapBuffer[i]=high[rates_total-3]; LowMapBuffer[i]=low[rates_total-3]; LineTest[i]= // ??? } } return(rates_total); } //+------------------------------------------------------------------+
Сам ZigZag оказался довольно комплицированым, так просто разобрать не получилось. Но я подготовил простой пример... Можете добавить функцию, где на 3 баре от последнего бара будет линия между High и Low по вашему совету зигзаг? Мне бы понять принцип, дальше уже сам я смогу развивать.
https://www.mql5.com/ru/docs/customind/indicators_examples/draw_zigzag
- www.mql5.com
Спасибо, здесь уже какое-то описание и окозалос это стиль а не индикатор :), попробую разобраться.
Вертикальная линий получилось сделать, но я не пойму, как убрать связующую линию между вертикальным линиям. Может кто-то поправить мой пример чтобы связующая линия пропала?
#property indicator_chart_window #property indicator_buffers 2 #property indicator_plots 1 //--- plot ZigZag #property indicator_label1 "ZigZag" #property indicator_type1 DRAW_ZIGZAG #property indicator_color1 clrRed #property indicator_style1 STYLE_SOLID #property indicator_width1 10 //--- indicator buffers double ZigZagBuffer1[]; double ZigZagBuffer2[]; //+------------------------------------------------------------------+ //| Custom indicator initialization function | //+------------------------------------------------------------------+ int OnInit() { SetIndexBuffer(0,ZigZagBuffer1,INDICATOR_DATA); SetIndexBuffer(1,ZigZagBuffer2,INDICATOR_DATA); return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Custom indicator iteration function | //+------------------------------------------------------------------+ int OnCalculate(const int rates_total, const int prev_calculated, const datetime &time[], const double &open[], const double &high[], const double &low[], const double &close[], const long &tick_volume[], const long &volume[], const int &spread[]) { int limit=prev_calculated; if(prev_calculated==0)limit=rates_total-1; for(int i2=limit;i2<rates_total;i2++) // recalculate on new bar { for(int i=0;i<rates_total;i++) { if(i==rates_total-3 || i==rates_total-15) // should be VLine on 3th and 15th bar! { ZigZagBuffer1[i]=high[i]; } else { ZigZagBuffer1[i]=EMPTY_VALUE; } if(i==rates_total-3 || i==rates_total-15) // should be VLine on 3th and 15th bar ! { ZigZagBuffer2[i]=low[i]; } else { ZigZagBuffer2[i]=EMPTY_VALUE; } if(ZigZagBuffer1[i]!=EMPTY_VALUE )Print(" ZigZagBuffer1[",i,"]: ",ZigZagBuffer1[i]); if(ZigZagBuffer2[i]!=EMPTY_VALUE )Print(" ZigZagBuffer2[",i,"]: ",ZigZagBuffer2[i]); } } return(rates_total); } //+------------------------------------------------------------------+
Вертикальная линий получилось сделать, но я не пойму, как убрать связующую линию между вертикальным линиям. Может кто-то поправить мой пример чтобы связующая линия пропала?
Ну, тогда я был неправ. Не понял цель...
В этом случае нужно, да и проще, использовать графическое построение DRAW_HISTOGRAM2
- www.mql5.com
Ну, тогда я был неправ. Не понял цель...
В этом случае нужно, да и проще, использовать графическое построение DRAW_HISTOGRAM2
Спасибо, попробую!
Еще вопрос, DRAW_HISTOGRAM2 рисует только вертикально или сможет тоже наклонно (между двумя барамы)?Спасибо, попробую!
Еще вопрос, DRAW_HISTOGRAM2 рисует только вертикально или сможет тоже наклонно (между двумя барамы)?Вы уж определитесь как-то что вам надо...
Если надо смешано, только иногда убрать соединения между двумя вертикальными участками зигзага, то лучше взять цветной зигзаг и местами, по условию назначать отсутствие цвета.
Да и вообще не помешает прочесть весь раздел документации о графических построениях. Будет хоть какое-то представление что можно сделать...
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Все хорошо, но иногда время пунктов может быть и в одной свече, получается вертикальная линия. Я так понимаю SupportBuffer[w] не получится сделать вертикальным?