Каталог файлов форума

Список вложений в сообщениях, оставленных на этой конференции.

Все файлы форума: 1245

Добавлено: evge » 02 ноя 2017, 07:43

Тема: Re: Несколько вопросов по разработке

Текст сообщения:

Способ есть.

Недокументированная возможность :)

Методом "научного тыка" у меня получилось сделать это.

В документации этого нет, но код создания уровня динамически в теле индикатора (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));   
   }


результат работы:

lvl-01.png
lvl-01.png (38.27 КБ) 20408 просмотров