Почему возникают разрывы линии индикатора при смене цвета?

 

Здравствуйте!

Пытаюсь сделать так, чтобы линия индикатора меняла цвет.

Менять-то она меняет, но получается довольно много разрывов вообще без цвета.

Разрывы в индикаторной линии

В начале я писал вот так:

         if(NewValue > oldValue ) {
            BufferUp[shift]= NewValue; 
            BufferDown[shift] = EMPTY_VALUE;
         }
         else {
            BufferUp[shift]= EMPTY_VALUE; 
            BufferDown[shift] = NewValue;
         }
         oldValue = NewValue;

Потом подумал, что, вероятно на графике не хотят рисоваться одиночные точки, и добавил ещё кода:

         if(BufferUp[shift-2] == EMPTY_VALUE && BufferUp[shift-1] != EMPTY_VALUE) { BufferUp[shift] = NewValue; continue; }
         if(BufferDown[shift-2] == EMPTY_VALUE && BufferDown[shift-1] != EMPTY_VALUE) { BufferDown[shift] = NewValue; continue; }

Получилось в итоге:

         if(BufferUp[shift-2] == EMPTY_VALUE && BufferUp[shift-1] != EMPTY_VALUE) { BufferUp[shift] = NewValue; continue; }
         if(BufferDown[shift-2] == EMPTY_VALUE && BufferDown[shift-1] != EMPTY_VALUE) { BufferDown[shift] = NewValue; continue; }
         if(NewValue > oldValue ) {
            BufferUp[shift]= NewValue; 
            BufferDown[shift] = EMPTY_VALUE;
         }
         else {
            BufferUp[shift]= EMPTY_VALUE; 
            BufferDown[shift] = NewValue;
         }
         oldValue = NewValue;

Но картинка, как видите, всё ещё с разрывами.

Подскажите, что ещё надо сделать, чтобы линия просто меняла цвет не прерываясь?

 
Eugene1:

Здравствуйте!

Пытаюсь сделать так, чтобы линия индикатора меняла цвет.

Менять-то она меняет, но получается довольно много разрывов вообще без цвета.

В начале я писал вот так:

Потом подумал, что, вероятно на графике не хотят рисоваться одиночные точки, и добавил ещё кода:

Получилось в итоге:

Но картинка, как видите, всё ещё с разрывами.

Подскажите, что ещё надо сделать, чтобы линия просто меняла цвет не прерываясь?


Подсмотрите в других индикаторах, как избегают разрывов при смене буфера!

Попробуйте тут чуток подправить:

         if(NewValue >= oldValue) {
            BufferUp[shift]= NewValue; 
            BufferDown[shift] = EMPTY_VALUE;
         }
         else if(NewValue <= oldValue) {
            BufferUp[shift]= EMPTY_VALUE; 
            BufferDown[shift] = NewValue;
         }
        // oldValue = NewValue;// Может, это лишнее?!


 Поэкспериментируйте и потом решите, как лучше!

 

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

https://www.mql5.com/ru/articles/1569 

 
ALXIMIKS:

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

https://www.mql5.com/ru/articles/1569 


Отличная работа!
 
Eugene1:

...

Подскажите, что ещё надо сделать, чтобы линия просто меняла цвет не прерываясь?


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

Стоит добавить еще один буфер под низ, тогда все будет боле-менее прилично выглядеть.  Еще в начале линии одного цвета ставить точку.

Все остальные способы раскраски от лукавого. 

 
borilunad:


Подсмотрите в других индикаторах, как избегают разрывов при смене буфера!

Попробуйте тут чуток подправить:


 Поэкспериментируйте и потом решите, как лучше!

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

С вашими поправками тоже остаются разрывы.

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

Другая линия ляжет поверх первой и перекрасит её ПОЧТИ где нужно.

Но только почти...

 
Integer:


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

Стоит добавить еще один буфер под низ, тогда все будет боле-менее прилично выглядеть.  Еще в начале линии одного цвета ставить точку.

Все остальные способы раскраски от лукавого. 


Спасибо, подложив жёлтую линию под красную и зелёную, получил приличный вид.

Но так и не понял: почему возникали разрывы?

 
Eugene1:

Спасибо, подложив жёлтую линию под красную и зелёную, получил приличный вид.

Но так и не понял: почему возникали разрывы?



Нет значения, поэтому ничего не рисуется. На каждом баре как бы точка (но невидимая). Соединяются отрезками две соседних точки. Если на каком-то баре нет значения, значит не соединяется.

 
Integer:


Нет значения, поэтому ничего не рисуется. На каждом баре как бы точка (но невидимая). Соединяются отрезками две соседних точки. Если на каком-то баре нет значения, значит не соединяется.

 


Спасибо!

Скорее всего при смене цвета у моего индикатора перемежаются точки разного цвета, как вы и пишете.

А что вы имеете в виду под "поставить точку" в начале каждого цвета. Вроде такого объекта: "точка" нет.

Или я что-то упустил?

 
Eugene1:

Спасибо!

1. Скорее всего при смене цвета у моего индикатора перемежаются точки разного цвета, как вы и пишете.

2. А что вы имеете в виду под "поставить точку" в начале каждого цвета. Вроде такого объекта: "точка" нет.

Или я что-то упустил?



1. Да.

2. Еще один буфер в индикаторе сделать с типом рисования DRAW_ARROW и использовать код стрелки 158 или 159.

 
Integer:


1. Да.

2. Еще один буфер в индикаторе сделать с типом рисования DRAW_ARROW и использовать код стрелки 158 или 159.


Спасибо!
Причина обращения: