основы построение DRAW_COLOR_LINE & DRAW_SECTION

 

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

1. при построении индикатора с типом DRAW_COLOR_LINE:

#property indicator_buffers 2
#property indicator_plots 1
#property indicator_chart_window
double indbuff[];
double indbuffcolor[];

#property indicator_type1 DRAW_COLOR_LINE
#property indicator_style1 STYLE_SOLID
#property indicator_color1 clrYellow

void OnInit()
{
        SetIndexBuffer(0,indbuff,INDICATOR_DATA);
        SetIndexBuffer(1,indbuffcolor,INDICATOR_COLOR_INDEX);
}

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 first;
   
   if (prev_calculated == 0)
        first = 1;
   else
        first = prev_calculated;
   
   for (int bar = first;bar<rates_total;bar++)
        {
        indbuff[bar] = close[bar];
        if (indbuff[bar] < 1.38710)
                indbuffcolor[bar] = clrRed;
        else
                indbuffcolor[bar] = clrYellow; 
        }
   
   return(rates_total);
  }

 хотелось бы чтобы цвет линии менялся, если цена тика < 1.38710 на красный, в остальных случаях оставался желтым.

2.  при построении индикатора с типом DRAW_SECTION:

#property indicator_buffers 1
#property indicator_plots 1
#property indicator_chart_window
double indbuff[];

#property indicator_type1 DRAW_SECTION
#property indicator_style1 STYLE_SOLID
#property indicator_color1 clrRed
#property indicator_width1 2

int OnInit()
  {
   SetIndexBuffer(0,indbuff,INDICATOR_DATA);
   return(0);
  }

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[])
  {

   if(rates_total<period)
      return 0;

   int first;

   if(prev_calculated==0)
      first=period-1;
   else
      first=prev_calculated;

   for(int bar=first;bar<rates_total;bar+=5)
     {
      indbuff[ArrayMaximum(high,bar,5)] = high[ArrayMaximum(high,bar,5)];
     }

   return(rates_total);
  }

 Насколько я понимаю - секция отличается от линии тем, что ее построение можно строить не по каждому тику, а через промежутки, после чего эти точки соединяются... 

Написанный индикатор задумывался как проверка соединения максимальных точек на каждые 5 барров.

 

Очень большая просьба - напишите, чего именно нехватает или что я использую не так, для того чтобы эти индюки заработали...  

 
есть варианты?
 
По п.1 - Вы не правильно цвет многоцветной линии задаете. Рекомендуется прочитать соответствующий раздел справки.

 
Прочитал, если вы имеете ввиду PlotIndexSetInteger - пробовал... Написал такой способ, так как считал его более логичным - это же все таки буфер цвета =)
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
 
BESSONoff:
Прочитал, если вы имеете ввиду PlotIndexSetInteger - пробовал... Написал такой способ, так как считал его более логичным - это же все таки буфер цвета =)
Вот тут как раз и есть заблуждение. В слове цвет))
 
C первым вопросом разобрался - но на фоне новых знаний возник новый вопрос - можно ли при создании цветной линии DRAW_COLOR_LINE указать цвета не через #property indicator_color1 clrYellow, clrRed, а создать для них некий буфер "color colors[] = {clrYelow, clrRed}" и использовать его? (проблема в том, что при установке цвета в буфере необходим индекс цвета указанного  #property indicator_color1 clrYellow, clrRed, а хотелось бы создать массив цветов и, каким нибудь образом, использоваться их - то есть задать им индексы).
 
BESSONoff:
C первым вопросом разобрался - но на фоне новых знаний возник новый вопрос - можно ли при создании цветной линии DRAW_COLOR_LINE указать цвета не через #property indicator_color1 clrYellow, clrRed, а создать для них некий буфер "color colors[] = {clrYelow, clrRed}" и использовать его? (проблема в том, что при установке цвета в буфере необходим индекс цвета указанного  #property indicator_color1 clrYellow, clrRed, а хотелось бы создать массив цветов и, каким нибудь образом, использоваться их - то есть задать им индексы).
Из справки:


Можно задать до 64 цветов в строке #property indicator_colorN.

Если в принципе вам хватает, но хочется использовать свои цветовые схемы (с меньшим кол-вом цветов в каждой), - можно сделать двойную индексацию. 

Разжёвывать надо?

int MyColorSchemas[8][8] = {
  {...........},  // BlackAndWhite scheme
  {...........},  // Metallic  scheme
.....
....
  {...........}   // PermanentHoliday scheme
 };

   // Usage
   ColorBuf[i] = MyColorSchemas[MyCurrentScheme][LeftHookColor];
;)
 
MetaDriver:
Из справки:


Можно задать до 64 цветов в строке #property indicator_colorN.

Если в принципе вам хватает, но хочется использовать свои цветовые схемы (с меньшим кол-вом цветов в каждой), - можно сделать двойную индексацию. 

Разжёвывать надо?

;)
Драйвер, разжуй =) весть если я создам целочисленный массив то он и будет хранить int, как к значениям привязать цвета?
 
BESSONoff:
Драйвер, разжуй =) весть если я создам целочисленный массив то он и будет хранить int, как к значениям привязать цвета?
Всё уже разжёвано. Просто замени int на double.
 
MetaDriver:
Всё уже разжёвано. Просто замени int на double.
Мы с тобой походу о разном говорим =) Расшифруй мне свое послание) Драйвер)
 
BESSONoff:
Мы с тобой походу о разном говорим =) Расшифруй мне свое послание) Драйвер)
Хорошо, завтра.
Причина обращения: