Формирую "levelsList" из "High" и "Low". Если значений в "levelsList" больше чем параметр "MaxLevels" то удаляю лишние с КОНЦА "levelsList".
И всё работает. Пример ниже.
Код: Выделить всё
function Initialize()
{
// Область определения параметров индикатора
// Обязательные параметры:
IndicatorName = "GHI"; // Задайте название индикатора и сохраните с данным именем
PriceStudy = true; // Рисовать в области цены (true – да, false – нет)
AddInput("Input", Inputs.Candle); // Input - входной ряд (Inputs.Price) или свечи
AddSeries("A", DrawAs.Line, Color.Red, false); // Задаем вид линии индикатора A
// Дополнительные параметры:
AddParameter("History", 600, 10); //Грузим историю
AddParameter("MaxLevels", 10); //Максимальное количество уровней
AddGlobalVariable("levelsList", Types.DoubleList);
AddLevel(0, Color.Red, "A");
AddLevel(1, Color.Red, "A");
AddLevel(2, Color.Red, "A");
AddLevel(3, Color.Red, "A");
AddLevel(4, Color.Red, "A");
AddLevel(5, Color.Red, "A");
AddLevel(6, Color.Red, "A");
AddLevel(7, Color.Red, "A");
AddLevel(8, Color.Red, "A");
AddLevel(9, Color.Red, "A");
}
function Evaluate()
{
levelsList.Insert(0, Input.High[0]);
levelsList.Insert(0, Input.Low[0]);
LogData(String.Format("{0}; {1}; {2}; {3};", "Первые два уровня добавлены. High: " + Input.High[0], " Low: " + Input.Low[0], " Бар индекс: " + CurrentIndex, " в массиве: " + levelsList.Count), IndicatorName);
if (levelsList.Count > (int)MaxLevels)
{
var tmp = levelsList[levelsList.Count-1];
levelsList.RemoveAt(levelsList.Count-1);
LogData(String.Format("{0}; {1};", "Уровень " + tmp + " удалён", " Бар индекс: " + CurrentIndex), IndicatorName);
tmp = levelsList[levelsList.Count-1];
levelsList.RemoveAt(levelsList.Count-1);
LogData(String.Format("{0}; {1};", "Уровень " + tmp + " удалён", " Бар индекс: " + CurrentIndex), IndicatorName);
}
for(var z = 0; z < levelsList.Count; z++)
{
if((int)MaxLevels > z) Levels[z].Level = levelsList[z];
}
A = 0.0;
}
Теперь если начать удалять не с конца "levelsList" а с начала вот так:
Код: Выделить всё
var tmp = levelsList[0];
levelsList.RemoveAt(0);
LogData(String.Format("{0}; {1};", "Уровень " + tmp + " удалён", " Бар индекс: " + CurrentIndex), IndicatorName);
tmp = levelsList[0];
levelsList.RemoveAt(0);
LogData(String.Format("{0}; {1};", "Уровень " + tmp + " удалён", " Бар индекс: " + CurrentIndex), IndicatorName);
У меня происходит зависание всего Альфа директового хозяйства и уровни не рисуются.
А удалять мне нужно и в конце и в начале и в середине. SOS!