Ошибка в функции SetLevelValue ().

 
При изменениях количества линий с помощью функции SetLevelValue() удаляются и перестраиваются только линии с положительными значениями уровней.
Отрицательные уровни только добавляются.
Это индикатор. Попробуйте менять шаг внешней переменной "Step".
//+------------------------------------------------------------------+
//|                                          CheckHorizontalLine.mq4 |
//|                                               Copyright © Zhunko |
//|                                                   zhunko@mail.ru |
//+------------------------------------------------------------------+
#property copyright "Copyright © Zhunko"
#property link      "zhunko@mail.ru"
 
#property indicator_separate_window
//----
extern int Step = 1;
//----
double Buf0[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
 {
  SetIndexBuffer (0, Buf0);
  SetIndexStyle (0, DRAW_NONE, EMPTY, EMPTY, CLR_NONE);
  SetIndexEmptyValue (0, EMPTY_VALUE);
  return(0);
 }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
 {
  Buf0[0] = 10;
  Buf0[1] = -10; 
  int i, j = 0;
  for (i = 10; i >= -10; i--, j += Step) SetLevelValue (j, i);
  SetLevelStyle (STYLE_SOLID, 2, Red);
  return(0);
 }
//+------------------------------------------------------------------+
Файлы:
 
Функция SetLevelValue() не устанавливает количество горизонтальных линий в окне:

Устанавливает значение для указанного горизонтального уровня индикатора, выводимого в отдельное окно.
Параметры:
level - Номер уровня (0-31).
value - Значение для указанного уровня.
Пример:
   SetLevelValue(1,3.14);
 
Так он и выводит для всех, как и положено.
Но уровни с отрицательными значениями не перерисовывает. Старые оставляет и на них рисует новые.
С положительными уровнями всё в порядке.
Запустите индикатор. Там всё наглядно.
 
Кажется понял. Сейчас цикл перевернул. С отрицательных до положительных значений. И всё тоже самое, но наоборот.
Что тогда делать с оставшимися линиями? Функции для их удаления нет.
===
Правда можно принудительно оставшиеся линии притягивать к одному новому уровню.
 

Совершенно непонятно, что Вы хотите сказать этим кодом.

Давайте цифры, что было и что должно быть после изменения переменной step.

 
Функции для удаления уровней действительно нет (только вручную через свойства), так как предполагается использование постоянного количества уровней.
 
stringo:
Функции для удаления уровней действительно нет (только вручную через свойства), так как предполагается использование постоянного количества уровней.

Есть задача динамического нанесения уровней. Как в основном окне. В этом случае количество уровней меняется.
Было бы здорово если бы при переинициализации индикатора уровни удалялись. И вообще при запуске функции SetLevelValue() сначала удалять все уровни.
Ведь они и так после запуска этой функции устанавливаются в нужном количестве.
Ещё было бы замечательно изменять свойства каждого уровня в отдельности.
Это наверно из несбыточных мечтаний.
 
Оказывается, что один и тот же индикатор, загруженный из разных шаблонов с разным количеством линий, не может управлять линиями из прежнего шаблона!!!
Он их не видет!!!
И не только из шаблона. У меня есть индикатор, в котором при переключении режимов изменяется количество линий.
Так вот, новый режим не может управлять линиями созданными в старом режиме.
Почему?
Код переделал. Теперь задействованы все линии и не нужные линии имеют одинаковый уровень.
Такое впечатление, что эти линии сами по себе. Имеют не контролируемую идентификацию.
Может я чего-то не понимаю?