Программное описание задание DRAW_BARS

 

Привет

В приведенных примера рисования индикатора в виде баров везде это задается установкой его свойств

#property indicator_type1 DRAW_BARS
#property indicator_color1 Gray

 как это сделать корректно программно ?

double O[];
double H[];
double L[];
double C[];

void OnInit()
{
==>PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_BARS);            // так ?
==>PlotIndexSetInteger(0,PLOT_LINE_COLOR,Color_USD);           // здесь уместно _LINE_ ?

   SetIndexBuffer(0, O, INDICATOR_DATA);
   SetIndexBuffer(1, H, INDICATOR_DATA);
   SetIndexBuffer(2, L, INDICATOR_DATA);
   SetIndexBuffer(3, C, INDICATOR_DATA);
}

Перебрал варианты - не рисует
М.б. есть ограничение на использование баров вместе с др. типами линий в одном индикаторе ?

Спасибо 

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Отображение графиков
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы графиков / Отображение графиков
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы графиков / Отображение графиков - Документация по MQL5
 

Даже вот так измененный пример работает не корректно

#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots 2
//#property indicator_type1 DRAW_BARS
#property indicator_color1 Gray

double O[], H[], L[], C[];

void OnInit()  {
   PlotIndexSetInteger(1,PLOT_DRAW_TYPE,DRAW_LINE);
   SetIndexBuffer(4, H, INDICATOR_DATA);

   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_BARS);

   SetIndexBuffer(0, O, INDICATOR_DATA);
   SetIndexBuffer(1, H, INDICATOR_DATA);
   SetIndexBuffer(2, L, INDICATOR_DATA);
   SetIndexBuffer(3, C, INDICATOR_DATA);

}

 не понятно как задать "связку" между индикатором и его бужерами

 

Уважаемый Nik107, что это за винегрет?

Чтобы научится правильно программировать индикаторы, нужно вначале изучить матчасть:

Как написать индикатор в MQL5

Стили рисования в MQL5 

А вот рабочий пример индикатора в виде баров:

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots   1

#property indicator_type1   DRAW_BARS
#property indicator_color1  clrBlue

//---- indicator buffers
double HighBuffer[];
double LowBuffer[];
double OpenBuffer[];
double CloseBuffer[];

//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- indicator buffers mapping
   SetIndexBuffer(0,OpenBuffer,INDICATOR_DATA);
   SetIndexBuffer(1,HighBuffer,INDICATOR_DATA);
   SetIndexBuffer(2,LowBuffer,INDICATOR_DATA);
   SetIndexBuffer(3,CloseBuffer,INDICATOR_DATA);

   return(0);
  }
//+------------------------------------------------------------------+
//| 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[])
  {

//--- economic indicator calculation
   int limit;
   if(prev_calculated>rates_total || prev_calculated<=0) limit=0;
   else limit=prev_calculated-1;

//--- main loop
   for(int i=limit; i<rates_total; i++)
   {
      OpenBuffer[i]=open[i];
      CloseBuffer[i]=close[i];
      HighBuffer[i]=high[i];
      LowBuffer[i]=low[i];
   }    

   return(rates_total);
  }

 

 
avoitenko:

Уважаемый Nik107, что это за винегрет?

Уважаемый avoitenko, прежде чем отвечать нужно сначала ВНИМАТЕЛЬНО прочитать вопрос

Формулирую еще раз 

Как написать индикатор рисующий:

  1. бары/свеч БЕЗ указания

#property indicator_type1 DRAW_BARS
#property indicator_color1 Gray

   2.  и линии в том же окне

Повторяю "на пальцах": Нужно чтобы в окне одно значение отображалось барами, другие линиями. Свойства отображения должны задаваться ТОЛЬКО ПРОГРАММНО.

Спасибо за ссылки 

 

 
Nik107:

Повторяю "на пальцах": Нужно чтобы в окне одно значение отображалось барами, другие линиями. Свойства отображения должны задаваться ТОЛЬКО ПРОГРАММНО.

Проперти все равно писать надо в любом случае, программно ли, не программно.

И почему у вас один буфер под двумя индексами?

 
TheXpert:

Проперти все равно писать надо в любом случае, программно ли, не программно.

И почему у вас один буфер под двумя индексами?

Честно говоря, мне кажется, что заблудился в 3 соснах - т.е. не понятно как связать Массив_1 с 1-ой линией, Массивы_2-5 с барами, Массив_6 со второй линией и т.д.

Если возможно покажите кодом как в одном индикаторе отрисовать :
- линии  (одну или несколько) и
- бары и
- линии и
- бары и т.д.

При этом нужно еще задать цвет каждой из линий и барам тожежл
Если для линий все понятно, то для баров смущает наличие LINE в параметре PLOT_LINE_COLOR

Для простоты, пжл, покажите кодом как индикатор рисует:
- линию и
- бары
в одном окне.

Спасибо

PS: прикрепил пример индикатора рисующего бары.
В него нужно добавить:
рисование линии/-ий, например для простоты High и Low, чтобы не морочиться с исх. данными
- и еще одного ряда баров, например для простоты со сдвигом от первого ряда  баров

Файлы:
 
Nik107:

...

Повторяю "на пальцах": Нужно чтобы в окне одно значение отображалось барами, другие линиями. Свойства отображения должны задаваться ТОЛЬКО ПРОГРАММНО.

Спасибо за ссылки 

Так же как и в червёрке рисуют разноцветный буффер. Создаёте два буфера. Обоим указываете уровень нерисуемого значение.

PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,-EMPTY_VALUE);

и двумя чередующимися буферами отрисовываете. Как только какой-то из буферов не нужен, ему присваиваете значение указанное в PLOT_EMPTY_VALUE.

таким образом видимым в любой момент будет только один буффер.

(под буфером баров я подразумеваю объеденённые в одно понятие 5 или 4 массива данных)

 
Urain:

Так же как и в червёрке рисуют разноцветный буффер. Создаёте два буфера. Обоим указываете уровень нерисуемого значение.

и двумя чередующимися буферами отрисовываете. Как только какой-то из буферов не нужен, ему присваиваете значение указанное в PLOT_EMPTY_VALUE.

таким образом видимым в любой момент будет только один буффер.

(под буфером баров я подразумеваю объеденённые в одно понятие 5 или 4 массива данных)

Если можно, покажите как это в коде сделать (см. выше приложил файл)

 

 

Переделал :

DemoBufferPattern  

 

Подойдет ?

 

Файлы:
 
BoraBo:

Переделал :DemoBufferPattern  

Подойдет ?

Спасибо, то, что нужно

За исключением одного "но" - помогите выбраться из 3 сосен - осталось не понятно как именно (или какие именно) буферы связаны с данным рядом баров или линией ?

Например, если мы в индикатор введем параметр задающий "Рисовать бары или линию" для первого значения (ряда_баров/линии) индикатора, то что ?
при переключении с баров на линию произойдет смещение буферов по отношению к индексам ?

остался открытым вопрос "Как буфер "привязан" к конкретной линии/ряду_баров индикатора ?"

 
Nik107:

Спасибо, то, что нужно

За исключением одного "но" - помогите выбраться из 3 сосен - осталось не понятно как именно (или какие именно) буферы связаны с данным рядом баров или линией ?

Например, если мы в индикатор введем параметр задающий "Рисовать бары или линию" для первого значения (ряда_баров/линии) индикатора, то что ?
при переключении с баров на линию произойдет смещение буферов по отношению к индексам ?

остался открытым вопрос "Как буфер "привязан" к конкретной линии/ряду_баров индикатора ?"

//---  вот этот код указывает на 0 буфер
#property indicator_label1  "hl_equity"
#property indicator_type1   DRAW_COLOR_CANDLES
#property indicator_color1  C'192,192,192',C'128,128,128'
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1


SetIndexBuffer(0,hl_equityBuffer1,INDICATOR_DATA); вот тут идёт привязка номера буфера к имени.


//--- вот этот код указывает на 1 буфер
#property indicator_label2  "hl_equity"
#property indicator_type2   DRAW_COLOR_CANDLES
#property indicator_color2  C'192,192,192',C'128,128,128'
#property indicator_style2  STYLE_SOLID
#property indicator_width2  1


SetIndexBuffer(1,hl_equityBuffer1,INDICATOR_DATA); вот тут идёт привязка номера буфера к имени.


Отображение идёт от 0 до последнего указанного в значении

#property indicator_plots   3
Получается что отрисовка буферов будет такой что 0 график будет самым нижним при наложении значений.


Причина обращения: