Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 1129

 
Alexey Viktorov:

А зачем так над собой издеваться? В чём проблема назначить сначала отображаемые буферы, а потом вспомогательные?

Особенность алгоритма, вспомогательных буферов всегда фиксированное количество, а отображаемых разное количество. Пожалуйста ответьте на вопрос из предыдущего сообщения о том, как правильно это всё указывается?


Alexey Viktorov:

Для DRAW_HISTOGRAМ2 задаётся 3 буфера и обязательная последовательность, сначала 2 буфера значений и следом за ними буфер цвета. Но между DRAW_HISTOGRAМ и DRAW_HISTOGRAМ2 существует такая разница, что DRAW_HISTOGRAМ рисуется от нуля до значения в буфере, а DRAW_HISTOGRAМ2 рисуется от значения одного буфера до значения другого буфера.

Из описания DRAW_HISTOGRAМ2 по ссылке https://www.mql5.com/ru/docs/customind/indicators_examples/draw_histogram2 :

"Количество требуемых буферов для построения DRAW_HISTOGRAM2 — 2."

Откуда тогда взяться третьему буферу? И в примере по той же ссылке всего два буфера, но не указано, можно ли чередовать цвета так же, как с обычным DRAW_HISTOGRAМ?
 
The_Sheikh:

Особенность алгоритма, вспомогательных буферов всегда фиксированное количество, а отображаемых разное количество. Пожалуйста ответьте на вопрос из предыдущего сообщения о том, как правильно это всё указывается?


Из описания DRAW_HISTOGRAМ2 по ссылке https://www.mql5.com/ru/docs/customind/indicators_examples/draw_histogram2 :

"Количество требуемых буферов для построения DRAW_HISTOGRAM2 — 2."

Откуда тогда взяться третьему буферу? И в примере по той же ссылке всего два буфера, но не указано, можно ли чередовать цвета так же, как с обычным DRAW_HISTOGRAМ?

Да, извините за недостаточную внимательность. Я имел ввиду DRAW_COLOR_HISTOGRAM2 и DRAW_COLOR_HISTOGRAM

 
The_Sheikh:

Особенность алгоритма, вспомогательных буферов всегда фиксированное количество, а отображаемых разное количество. Пожалуйста ответьте на вопрос из предыдущего сообщения о том, как правильно это всё указывается?

Я никогда так над собой не издевался. Если есть желание, экспериментируйте.

 
Комментарии, не относящиеся к этой теме, были перенесены в "Вопросы от начинающих MQL4 MT4 MetaTrader 4".
 

Как правильно задавать цвета функцией PlotIndexSetInteger() ?

Когда указываю

#property indicator_color3 clrRed,clrGreen

то цвета задаются нормально, а когда задаю через функцию

PlotIndexSetInteger(2,PLOT_LINE_COLOR,0,clrRed);

PlotIndexSetInteger(2,PLOT_LINE_COLOR,1,clrGreen);

то первый цвет линии красный, а второй (и последующие) почему-то чёрный (по умолчанию) вместо зелёного.

 
The_Sheikh:

Как правильно задавать цвета функцией PlotIndexSetInteger() ?

Когда указываю

#property indicator_color3 clrRed,clrGreen

то цвета задаются нормально, а когда задаю через функцию

PlotIndexSetInteger(2,PLOT_LINE_COLOR,0,clrRed);

PlotIndexSetInteger(2,PLOT_LINE_COLOR,1,clrGreen);

то первый цвет линии красный, а второй почему-то чёрный (по умолчанию) вместо зелёного.

А зачем модификатор туда вставили?

 
Alexey Viktorov:

А зачем модификатор туда вставили?

Какой, куда? Я посмотрел пример в документации MQL5 и сделал также. Напишите, как правильно?

 
The_Sheikh:

Какой, куда? Я посмотрел пример в документации MQL5 и сделал также. Напишите, как правильно?

Покажите весь код инициализации индикаторных буферов.
 
The_Sheikh:

Какой, куда? Я посмотрел пример в документации MQL5 и сделал также. Напишите, как правильно?

Посмотрел это

bool  PlotIndexSetInteger( 
   int  plot_index,        // индекс графического стиля 
   int  prop_id,           // идентификатор свойства 
   int  prop_value         // устанавливаемое значение 
   );

исделал так

bool  PlotIndexSetInteger( 
   int  2,                 // индекс графического стиля 
   int  PLOT_LINE_COLOR,   // идентификатор свойства 
   int  0,                 // модификатор свойства 
   int  clrGreen           // устанавливаемое значение 
   )

А там, в документации сказано

[in]  Модификатор указанного свойства. Только свойства индексов цветов требуют модификатора.


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

Как-то так

#property indicator_chart_window
//#property indicator_separate_window
#property indicator_buffers 4
#property indicator_plots 2

#define GreenC 0x00FF00
#define RedC 0x0000FF
#property indicator_type1 DRAW_NONE
#property indicator_type2 DRAW_COLOR_HISTOGRAM2
//#property indicator_color2 GreenC,RedC

double
Arr11[],
Arr21[],
Arr22[],
Arr23[];

void OnInit()
{
SetIndexBuffer(0,Arr11,INDICATOR_CALCULATIONS);
SetIndexBuffer(1,Arr21,INDICATOR_DATA);
SetIndexBuffer(2,Arr22,INDICATOR_DATA);
SetIndexBuffer(3,Arr23,INDICATOR_COLOR_INDEX);
IndicatorSetInteger(INDICATOR_DIGITS,Digits());
PlotIndexSetInteger(1,PLOT_LINE_WIDTH,4);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,0,GreenC);
PlotIndexSetInteger(1,PLOT_LINE_COLOR,1,RedC);
//PlotIndexSetDouble(1,PLOT_EMPTY_VALUE,0.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[]
)
{
ArraySetAsSeries(open,0);
ArraySetAsSeries(close,0);
ArraySetAsSeries(low,0);
ArraySetAsSeries(high,0);
ArrayInitialize(Arr11,0.0);
ArrayInitialize(Arr21,0.0);
ArrayInitialize(Arr22,0.0);
ArrayInitialize(Arr23,0.0);

for (int I=0;I<rates_total;I++)
{
Arr22[I]=low[I];
Arr23[I]=0.0;
//Arr23[I]=1.0;
}

return(rates_total);
}

Alexey Viktorov:

Посмотрел это

исделал так

А там, в документации сказано

Это означает, что модификатор должен быть если назначаются разные цвета уровней подвального индикатора, уровней фибо и чего-то подобного

Как раз мой случай.

Вот кусок из примера для DRAW_COLOR_HISTOGRAM2 в справочнике:

/--- для каждого цветового индекса зададим новый цвет случайным образом
   for(int plot_color_ind=0;plot_color_ind<plot_colors;plot_color_ind++)
     {
      //--- получим случайное число
      int number=MathRand();
      //--- получим индекс в массиве col[] как остаток от целочисленного деления
      int i=number%size;
      //--- установим цвет для каждого индекса как свойство PLOT_LINE_COLOR
      PlotIndexSetInteger(0,                    //  номер графического стиля
                          PLOT_LINE_COLOR,      //  идентификатор свойства
                          plot_color_ind,       //  индекс цвета, куда запишем цвет
                          cols[i]);             //  новый цвет

Здесь plot_colors = 8, cols[] - массив с разными цветами. Но терминал никакие цвета кроме первого не воспринимает.