Почему при типе отрисовки DRAW_SECTION отрисовывается линии вниз?

 

 Пишу индикатор. Условия ещё прописал не все. Пишу по частям. На данном этапе, замечено, все отрисовывается корректно, но до отрисовки последнего экстремума постоянно на последнем баре с экстремумом появляется вертикальная линия вниз. Если посотреть в "Окно данных" видно, что цена индикатора в этот момент равна цене экстремума т.е. хаю или лою бара.

На скрине видно окно данных в таймсерии именно на том месте красной свечи от которой отрисована вертикальная линия вниз:


Если всё-таки отрисовался экстремум вниз на этом баре, почему дальше отрисовка не прерывается? Ведь цена индикатора в тот момент равна хаю свечи, и соответственно, на том хаю непустое место т.е. экстремум. Почему после этого экстремума вертикальная линия вниз отрисована?

 
Обычно, такая картинка, когда значение последнего перелома равно нулю, вот индикатор и уходит в ноль.
Нужно инициализировать буфер пустым значением, если это ноль, то установить ноль как EMPTY_VALUE
 
Taras Slobodyanik:
Обычно, такая картинка, когда значение последнего перелома равно нулю, вот индикатор и уходит в ноль.
Нужно инициализировать буфер пустым значением, если это ноль, то установить ноль как EMPTY_VALUE

У меня пустые значения буфера цены (рисующего) всегда инициализируются как EMPTY_VALUE. Поэтому нулей и быть не может. Обрабатывается всегда лишь предыдущий бар (волновой анализ). Последний не обрабатывается т.к. цены закрытия бара ещё нет. Вот я и не понял, как это вообще так.

А как это можно проверить интересно?

У меня есть функция, которая возвращает первый рассчётный бар:

//==================================================================================================================================================================================
// Определение индекса бара, с которого необходимо производить перерасчет. =========================================================================================================
int recalcIndex(int barsTotal, int countedBars) {
  if (countedBars == 0 || barsTotal - countedBars > 1) {
    ArrayInitialize(extremum_price_buffer, EMPTY_VALUE);
    ArrayInitialize(trend_buffer, TREND_NONE);
    return barsTotal - 1;
  }
//---
  return 1;
}

Вызывается в OnCalculate() вот так:

  int limit = recalcIndex(rates_total, prev_calculated);    // Определим первый расчетный бар

Как видно, первый раз рисующий буфер extremum_price_buffer[] инициализируется пустым значением, а дальше уже я просчитываю лишь последний бар.. Вс красиво и компактно.

 
Я так понял ошибка была в том, что я инициализировал буфер лишь в начале, а потом когда рассчитываем 1-ый индекс не инициализировали именно 0-ой индекс.
 
Viktar Dzemikhau:
Я так понял ошибка была в том, что я инициализировал буфер лишь в начале, а потом когда рассчитываем 1-ый индекс не инициализировали именно 0-ой индекс.

Совершенно верно. Именно поэтому практически все индикаторы постоянно пересчитывают нулевой (на графике самый правый) бар. 

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