Вопросы про DRAW_HISTOGRAM и DRAW_FILLING

 

OFF: отчего-то не могу найти в индикаторном разделе тему для вопросов от чайников..

ON: на картинке один и тот же индикатор, нарисованный гистограммой и цветными областями (DRAW_HISTOGRAM и DRAW_FILLING) с одинаковыми цветами в настройках.  У 1го не получается сделать ширину баров больше 2, у 2го - получить заданные цвета. Как порешить 1ю или 2ю, а лучше обе траблемы ??

 

Хочу сделать в индикаторе регулируемой толщину вертикальной линии. Индикатор строится с типом DRAW_FILLING.

Набросал простой тестовый индикатор. Подскажите, каким образом можно задавать ширину?


Код индикатора:

#property indicator_chart_window
#property indicator_buffers 4
#property indicator_plots   2 

//--- plot1
#property indicator_label1  "Bullish"
#property indicator_type1   DRAW_FILLING
#property indicator_style1  STYLE_SOLID
#property indicator_color1  clrBlue
#property indicator_width1  2

//--- plot2
#property indicator_label2  "Bearish"
#property indicator_type2   DRAW_FILLING
#property indicator_style2  STYLE_SOLID
#property indicator_color2  clrRed
#property indicator_width2  2

double BullUp[];
double BullDn[];

double BearUp[];
double BearDn[];

//+-------------------------------------------------------------------------------------------------------------------+
//|                                                                                                                   |
//+-------------------------------------------------------------------------------------------------------------------+
void OnInit()
{
  SetIndexBuffer(0, BullUp, INDICATOR_DATA);
  SetIndexBuffer(1, BullDn, INDICATOR_DATA);
  SetIndexBuffer(2, BearUp, INDICATOR_DATA);
  SetIndexBuffer(3, BearDn, INDICATOR_DATA);
  
  ArraySetAsSeries(BullUp, true);
  ArraySetAsSeries(BullDn, true);
  ArraySetAsSeries(BearUp, true);
  ArraySetAsSeries(BearDn, true);
}


//+-------------------------------------------------------------------------------------------------------------------+
//|                                                                                                                   |
//+-------------------------------------------------------------------------------------------------------------------+
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[])
{
  ArraySetAsSeries(open, true);
  ArraySetAsSeries(close, true);
  ArraySetAsSeries(high, true);
  ArraySetAsSeries(low, true);
  
  int needForCount = rates_total - prev_calculated;       
  if(prev_calculated == 0 ) needForCount = rates_total - 1;   
  
  for(int i = needForCount; i >= 0; --i)
  {
    BullUp[i] = (open[i] < close[i]) ? high[i] : 0;
    BullDn[i] = (open[i] < close[i]) ? low[i] : 0;
  
    BearUp[i] = (open[i] > close[i]) ? high[i] : 0;
    BearDn[i] = (open[i] > close[i]) ? low[i] : 0;
  }
  
  return rates_total;
}
Файлы:
 
Vasiliy Pushkaryov:

Хочу сделать в индикаторе регулируемой толщину вертикальной линии. Индикатор строится с типом DRAW_FILLING.

Набросал простой тестовый индикатор. Подскажите, каким образом можно задавать ширину?


Код индикатора:

Начните со чтения справки https://www.mql5.com/ru/docs/customind/indicators_examples/draw_filling

Стиль DRAW_FILLING рисует цветную область между значениями двух индикаторных буферов. Фактически этот стиль рисует две линии и закрашивает пространство между ними одним из двух заданных цветов. Предназначен для создания индикаторов, рисующих каналы. Ни один из буферов не может содержать только пустые значения, так как в этом случае отрисовка не происходит.


Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_FILLING
Документация по MQL5: Пользовательские индикаторы / Стили индикаторов в примерах / DRAW_FILLING
  • www.mql5.com
DRAW_FILLING - Стили индикаторов в примерах - Пользовательские индикаторы - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Rashid Umarov:

Начните со чтения справки https://www.mql5.com/ru/docs/customind/indicators_examples/draw_filling

рисует цветную область между значениями двух индикаторных буферов. Два индикаторных буфера  - насколько я понял, один верхний и один нижний. Получается, что это ширина по вертикали, отдельно для верхнего массива, отдельно для нижнего. Теперь сообразил.

Мне нужны прямоугольные области, которые могут закрашивать один или несколько баров в ширину. Подумал, что этот тип отрисовки то, что нужно. А какой-то тип индикатора так умеет, чтобы регулировалась ширина вправо/влево на протяжении одного бара и захватывать несколько баров? Или придется добавлять графические объекты?

 
Vasiliy Pushkaryov:

рисует цветную область между значениями двух индикаторных буферов. Два индикаторных буфера  - насколько я понял, один верхний и один нижний. Получается, что это ширина по вертикали, отдельно для верхнего массива, отдельно для нижнего. Теперь сообразил.

Мне нужны прямоугольные области, которые могут закрашивать один или несколько баров в ширину. Подумал, что этот тип отрисовки то, что нужно. А какой-то тип индикатора так умеет, чтобы регулировалась ширина вправо/влево на протяжении одного бара и захватывать несколько баров? Или придется добавлять графические объекты?

В справке есть картинка:

draw_filling_without_drawing

Можно хоть два бара, хоть десять закрашивать в прямоугольники...

 
Vladimir Karputov:

В справке есть картинка:


Можно хоть два бара, хоть десять закрашивать в прямоугольники...

Мне нужны прямоугольные области, которые могут закрашивать один или несколько баров в ширину. Подумал, что этот тип отрисовки то, что нужно. А какой-то тип индикатора так умеет, чтобы регулировалась ширина вправо/влево на протяжении одного бара и захватывать несколько баров? Или придется добавлять графические объекты?

С несколькими - понятно. Мне нужно, чтобы при этом и на одном тоже можно было бы регулировать вширь. Как у гистограмм.

 
Vasiliy Pushkaryov:

С несколькими - понятно. Мне нужно, чтобы при этом и на одном тоже можно было бы регулировать вширь. Как у гистограмм.

В смысле "на одном"? Это будет вертикальная линия (если вообще будет)

 
Vladimir Karputov:

В смысле "на одном"? Это будет вертикальная линия (если вообще будет)

Вертикальные линии есть, в посте #1 на рисунке красные и синие линии на одном баре отображаются. У гистограммы - тоже вертикальные линии. Пытаюсь выяснить, можно ли как это у гистограмм регулируется ширина вертикальных линий, точно такого же добиться и с индикаторами на главном чарте, не используя наложения отдельных графических объектов.
 
Vladimir Karputov:

В смысле "на одном"? Это будет вертикальная линия (если вообще будет)

Хочу сделать индикатор, чтобы визуально выглядел как на рис.2 в этой статье. Без подвального окна, только заливка на главном графике. Но потом нужны будут Open/Close ренко-баров в советнике. Поэтому нужно, чтобы расчеты попадали в буферы. Иногда такой цветной ренко-бар может проходить через один стандартный бар. Тонкая линия - визуально плохо выделяет.

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