Обсуждение статьи "Цветные индикаторы - создание и применение"

 

Опубликована статья Цветные индикаторы - создание и применение:

Речь в данной статье пойдет о возможностях для создания цветных индикаторов и раскрашивания индикаторов уже существующих. С переходом на MQL5 появилась возможность представлять информацию в удобном для глаза виде. Теперь не обязательно накидывать кучу графиков с разными индикаторами и с линейкой высматривать уровни RSI и Stochastic, можно просто раскрасить свечи в разные цвета в зависимости от показаний индикаторов.

RSI color

Автор: Дмитрий Александрович

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

Доброго времени суток!

Столкнулся с проблемой при использовании нескольких стилей рисования одновременно. К примеру надо нарисовать закрашенный канал типа болиндждера и в середине чтоб была центральная линия. Вот пример:

   SetIndexBuffer(0, Buf1, INDICATOR_DATA);
   SetIndexBuffer(1, Buf2, INDICATOR_DATA);

   SetIndexBuffer(2, Buf3, INDICATOR_DATA);

   PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_FILLING);

   PlotIndexSetInteger(2, PLOT_DRAW_TYPE, DRAW_LINE);

При таком построении отображается только закрашенный канал. Если поменять порядок - сначала использовать среднюю линию а потом закрашенный канал то все ок. Но нужен именно такой порядок, так как это только часть индикатора.

Если вместо  DRAW_FILLING использовать DRAW_LINE то тоже все ок - рисуется просто три линии - не закрашенный канал и линия в середине. 

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


 
Ruslan Piraliyev #:

Доброго времени суток!

Столкнулся с проблемой при использовании нескольких стилей рисования одновременно. К примеру надо нарисовать закрашенный канал типа болиндждера и в середине чтоб была центральная линия. Вот пример:

   SetIndexBuffer(0, Buf1, INDICATOR_DATA);
   SetIndexBuffer(1, Buf2, INDICATOR_DATA);

   SetIndexBuffer(2, Buf3, INDICATOR_DATA);

   PlotIndexSetInteger(0, PLOT_DRAW_TYPE, DRAW_FILLING);

   PlotIndexSetInteger(2, PLOT_DRAW_TYPE, DRAW_LINE);

При таком построении отображается только закрашенный канал. Если поменять порядок - сначала использовать среднюю линию а потом закрашенный канал то все ок. Но нужен именно такой порядок, так как это только часть индикатора.

Если вместо  DRAW_FILLING использовать DRAW_LINE то тоже все ок - рисуется просто три линии - не закрашенный канал и линия в середине. 

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


Индекс буфера не должен совпадать с индексом построения. У них своя индикация. Попробуйте  PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_LINE);

 
Alexey Viktorov #:

Индекс буфера не должен совпадать с индексом построения. У них своя индикация. Попробуйте  PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_LINE);

Благодарю!! Получилось и все сразу стало на свои места).

Вот не думал что у них разная индексация. Получается привязка буферов к точке рисования идет по мере ее появления.

 
Alexey Viktorov #:

Индекс буфера не должен совпадать с индексом построения. У них своя индикация. Попробуйте  PlotIndexSetInteger(1, PLOT_DRAW_TYPE, DRAW_LINE);

Подскажите плз еще такой момент, а можно как то менять порядок линий чтоб нужная была сверху? Или тут только порядком объявления буферов? К примеру хотелось чтоб 0-й буфер соответствовал самой главной линии, а канал заливки был в конце, но он всех перекрывает). Это удобно так как планируется использовать индикатор в советнике чтоб удобно было доставать данные.

 
Ruslan Piraliyev #:

Подскажите плз еще такой момент, а можно как то менять порядок линий чтоб нужная была сверху? Или тут только порядком объявления буферов? К примеру хотелось чтоб 0-й буфер соответствовал самой главной линии, а канал заливки был в конце, но он всех перекрывает). Это удобно так как планируется использовать индикатор в советнике чтоб удобно было доставать данные.

Ничего не понял. И какая разница какой номер буфера вытаскивать в советник?

 
Alexey Viktorov #:

Ничего не понял. И какая разница какой номер буфера вытаскивать в советник?

Это просто когда знаешь что нужен нулевой буфер и все тут), а так надо заглянуть в индюк и посмотреть какая по счету нужная. А так да никакой).

 
Ruslan Piraliyev #:

Это просто когда знаешь что нужен нулевой буфер и все тут), а так надо заглянуть в индюк и посмотреть какая по счету нужная. А так да никакой).

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

 
Alexey Viktorov #:

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

Да, все так. Еще раз спасибо что подсказали, а то за деревьями и леса не увидел)

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