Недокументированная возможность
Методом "научного тыка" у меня получилось сделать это.
В документации этого нет, но код создания уровня динамически в теле индикатора (function Evaluate() {...}) такой:
Код: Выделить всё
Levels.Add(new AdsLevel(Уровень, Цвет, Стиль линии, Ширина));
Пример:
Код: Выделить всё
Levels.Add(new AdsLevel(100, Color.Red, LineStyles.Solid, 5));
Создали новый уровень с значением 100, красным цветом, сплошной линией, ширина линии 5.
Обращаться к нему можно будет, как обычно, Levels[0].Level = xxx; так же и к другим свойствам линии. Можно их так же менять, считывать.
Создавая следующий уровень, мы получим уровень с номером индекса в массиве Levels равным 1 и так далее.
Сколько всего уровней создано можно узнать через Levels.Count
Например это может понадобится, если надо будет обойти их все циклом
Код: Выделить всё
for (int x = 0; x < Levels.Count; x++)
{
Levels[x].Level = x * 100; //...
}
Пример для инструмента SRZ7. Хотя не важно для какого, просто пример строит заданное количество уровней в параметре Num, от 19500 с шагом 100.
Код: Выделить всё
function Initialize()
{
IndicatorName = "LVL_test";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddSeries("A", DrawAs.Line, Color.Red);
AddParameter("Num", 5);
}
function Evaluate()
{
for (int x = 0; x < Num; x++)
{
Levels.Add(new AdsLevel(0, Color.Red));
Levels[x].Level = 19500 + x * 100;
Levels[x].Color = Color.Red;
Levels[x].Style = LineStyles.Solid;
Levels[x].Width = 1;
}
}
Вот этот код
Код: Выделить всё
Levels[x].Level = 19500 + x * 100;
Levels[x].Color = Color.Red;
Levels[x].Style = LineStyles.Solid;
Levels[x].Width = 1;
Это как пример изменения уже созданного уровня.
Его можно было в цикле и не прописывать и сразу прописать в конструкторе new AdsLevel(...) требуемые параметры уровня при его создании.
Параметры такие же как у и функции AddLevel() в инициализации:
AddLevel (Value, Color, LineStyle, LineWidth, SeriesName)
– создание уровня. Может быть несколько уровней.
Параметры:
• Value – значение по умолчанию
• Color – цвет уровня (значения стандартные для MicroSoft)
• LineStyle – стиль линии
• LineWidth – толщина линии
• SeriesName – имя ряда, к которому привязана линия (требуется для определения области, где будет размещена линия)
код создания Num уровней мог быть такой
Код: Выделить всё
for (int x = 0; x < Num; x++)
{
Levels.Add(new AdsLevel(19500 + x * 100, Color.Red, LineStyles.Solid, 1));
}
результат работы: