Индикаторы: DRAW_FILLING

 

DRAW_FILLING:

Стиль DRAW_FILLING рисует цветную область между значениями двух индикаторных буферов. Фактически этот стиль рисует две линии и закрашивает пространство между ними одним из двух заданных цветов. Цвета меняются случайным образом каждые N тиков. Параметр N вынесен во внешние параметры индикатора для возможности ручной установки (закладка "Параметры" в окне свойств индикатора).

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

См. также статью Стили рисования в MQL5.

Автор: MetaQuotes

DRAW_FILLING

 

Я попытался с помощью опубликованного кода написать свой индикатор используя свойство отрисовки DRAW_FILLING.

Но у меня возникли проблемы залипания соседних рисуемых участков разделённых пустыми значениями.

Те если в одном окне появляется две рисуемые секции то не взирая на то что они разделены участком индикатора со значением EMPTY_VALUE, этот пустой участок всё равно отрисовывается со значениями соседних секций.


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

Вот накидал заготовку.

Файлы:
Session.mq5  4 kb
 

Могу предложить только такой вариант



Файлы:
Session.mq5  4 kb
 
Rosh:

Могу предложить только такой вариант


Спасибо но немного не пойдёт, остановлюсь пожалуй на граф объектах.



 
Urain:

Спасибо но немного не пойдёт, остановлюсь пожалуй на граф объектах.

Так как отрисовка в стиле DRAW_FILLING делается полигонами, то получить красивые прямоугольники не получится, к сожалению.
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы индикаторов / Стили рисования - Документация по MQL5
 
Rosh:
Так как отрисовка в стиле DRAW_FILLING делается полигонами, то получить красивые прямоугольники не получится, к сожалению.
Ну что же, этот метод для данной цели не подходит, что не делает его плохим для других целей.
 

Столкнулся с той же проблемой (залипания на участках пустых значений). Хотя вроде выше сказано, что получить прямоугольники не получится, но поскольку есть пример таки рисующий эти самые прямоугольники (индикатор торговых сессий), решил тему поковырять.

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

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

...
//---   
   for ( int bar = startBar; bar < rates_total && !IsStopped(); bar++ ) {
      if ( prev_calculated != rates_total && bar == rates_total - 1 ) {
         _up = up;
      }
      if ( bar % 4 == 0 ) {
         if ( up ) {
            draw(bar, high[bar], low[bar]);
            up = false;
         } else {
            draw(bar, low[bar], high[bar]);
            up = true;
         }
      }
   }
//--- return value of prev_calculated for next call
   return(rates_total);
}
//+------------------------------------------------------------------+
void draw(int bar, double price1, double price2) {
//---
   int start = bar-2;
   
   for ( int i = start; i <= bar; i++ ) {
      FillingBuffer1[i] = price1;
      FillingBuffer2[i] = price2;
   }
//---
}

даёт такой результат:

Filling Sample


Казалось бы проблема решена. Написал индикатор, ежедневно выделяющий указанные пользователем временные интервалы, и новый сюрприз:

TimeZone

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

Отсюда, собственно, вопросы:

  • почему в индикаторе торговых сессий (ссылка в начале поста) не возникает проблемы залипания на участках пустых значений?
  • почему в одних случаях прямоугольники рисуются нормально, а в других получаем побочные явления? Коды прилагаю в конце поста. (Да, если бы такие явления возникали всегда, согласился бы с утверждением о полигонах)

Повторюсь: буду благодарен за все пояснения.

P.S.1 Как мне видится, решение проблемы прямоугольников, является хорошей альтернативой объектам (которые как-то не очень хочется использовать). Ведь это и то же выделение временных интервалов, и линейный разворот, и области Дарваса, и выделение различных паттернов и т.д. и т.п.

P.S.2 Индикатор TimeZone думал и в базу кодов выложить, но стОит ли (с этими "левыми" полосками)?

Файлы:
 
Ошибка отрисовки "левых" полосок исправлена.