Раскраска индикатора

 

Может я что то не понимаю но вот в справке есть пример

Для задания стиля рисования линии и вида отрисовки используется функция PlotIndexSetInteger().
Для расширений Фибоначчи указать толщину и стиль отрисовки уровней можно функцией ObjectSetInteger().

Пример:

#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//--- indicator buffers
double         MABuffer[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
void OnInit()
  {
//--- привязка массива к индикаторному буферу с индексом 0
   SetIndexBuffer(0,MABuffer,INDICATOR_DATA);
//--- задать рисование линии
   PlotIndexSetInteger(0,PLOT_DRAW_TYPE,DRAW_LINE);
//--- задание стиля для рисования линии
   PlotIndexSetInteger(0,PLOT_LINE_STYLE,STYLE_DOT);
//--- задание цвета линии
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,Red);
//--- задание толщины линии
   PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);
//--- задание метки для линии
   PlotIndexSetString(0,PLOT_LABEL,"Moving Average");
//---
  }
//+------------------------------------------------------------------+
//| 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[])
  {
//--- 
   for(int i=prev_calculated;i<rates_total;i++)
     {
      MABuffer[i]=close[i];
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }

 По идее этот пример должен был нарисовать МА(1) красного цвета а на самом деле получается цвета Silver

тоесть код

//--- задание цвета линии   
PlotIndexSetInteger(0,PLOT_LINE_COLOR,Red);

видимо не отрабатывает ?

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

Надо в заголовке прописать базовые параметры:

#property indicator_type1   DRAW_LINE
#property indicator_color1  Red
#property indicator_style1  STYLE_SOLID
#property indicator_width1  1

и тогда цвета нормально выбираются.


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



 
Renat:

Надо в заголовке прописать базовые параметры:

и тогда цвета нормально выбираются.


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


Да я знаю что так можно, но у меня в задумке раскраска индикатора в зависимости от валюты, на график которой он прицеплен. А это лучше делать в функции init. Хотя можно через многоиндексовые цветные буферы. Но этот вариант по моим предположениям будет задействовать больше памяти и возможно ресурсов компьютера при расчетах.
 
olyakish:
Да я знаю что так можно, но у меня в задумке раскраска индикатора в зависимости от валюты, на график которой он прицеплен. А это лучше делать в функции init. Хотя можно через многоиндексовые цветные буферы. Но этот вариант по моим предположениям будет задействовать больше памяти и возможно ресурсов компьютера при расчетах.

Если не используете #property для перечисления цветов линии, то используйте свойство PLOT_COLOR_INDEXES (позволяет указать количество цветов для данной линии).

//--- задание цвета линии
   PlotIndexSetInteger(0,PLOT_COLOR_INDEXES,1);
   PlotIndexSetInteger(0,PLOT_LINE_COLOR,Red);


В следующем билде количество будет автоматически выставляться в 1 при установке цвета через PLOT_LINE_COLOR.