Двигаться уровни будут кратно Dell, что сделано через Math.Ceiling()...
Всё пляшет от текущей цены (последний отображаемый на графике бар) с шагом Dell.
Dell должно быть >= 1
Индикатор рассчитывается только для текущего бара и отображает уровни и задает серии (если понадобится его использовать в стратегиях, т.к. уровни недоступны). Это позволит двигая график в истории получать значения именно для последнего отображаемого бара.
делается это через условие:
Код: Выделить всё
if (CurrentIndex != MaxIndex) return;
Код: Выделить всё
function Initialize()
{
IndicatorName = "Level_ABC";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddSeries("A", DrawAs.Line, Color.Gray);
AddSeries("B", DrawAs.Line, Color.Gray);
AddSeries("C", DrawAs.Line, Color.Gray);
AddSeries("D", DrawAs.Line, Color.Gray);
AddSeries("E", DrawAs.Line, Color.Gray);
AddSeries("St_bay_A", DrawAs.Line, Color.Blue);
AddSeries("St_sell_A", DrawAs.Line, Color.Blue);
AddSeries("St_bay_B", DrawAs.Line, Color.Blue);
AddSeries("St_sell_B", DrawAs.Line, Color.Blue);
AddSeries("St_bay_C", DrawAs.Line, Color.Blue);
AddSeries("St_sell_C", DrawAs.Line, Color.Blue);
AddSeries("St_bay_D", DrawAs.Line, Color.Blue);
AddSeries("St_sell_D", DrawAs.Line, Color.Blue);
AddSeries("St_bay_E", DrawAs.Line, Color.Blue);
AddSeries("St_sell_E", DrawAs.Line, Color.Blue);
AddLevel(0, Color.Blue, "X");
AddLevel(0, Color.Blue, "X");
AddLevel(0, Color.Blue, "X");
AddLevel(0, Color.Blue, "X");
AddLevel(0, Color.Blue, "X");
AddLevel(0, Color.Blue, "X");
AddLevel(0, Color.Blue, "X");
AddLevel(0, Color.Blue, "X");
AddLevel(0, Color.Blue, "X");
AddLevel(0, Color.Blue, "X");
AddParameter("Dell", 1.5, 0);
}
function Evaluate()
{
// Область расчета значения индикатора
if (CurrentIndex != MaxIndex) return;
A = Math.Ceiling(Input.Close[0] / Dell) * Dell - Dell * 2;
St_bay_A = A - 0.25*Dell;
St_sell_A = A + 0.25*Dell;
Levels[0].Level = St_bay_A;
Levels[1].Level = St_sell_A;
B = A + Dell;
St_bay_B = B - 0.25*Dell;
St_sell_B = B + 0.25*Dell;
Levels[2].Level = St_bay_B;
Levels[3].Level = St_sell_B;
C = B + Dell;
St_bay_C = C - 0.25*Dell;
St_sell_C = C + 0.25*Dell;
Levels[4].Level = St_bay_C;
Levels[5].Level = St_sell_C;
D = C + Dell;
St_bay_D = D - 0.25*Dell;
St_sell_D = D + 0.25*Dell;
Levels[6].Level = St_bay_D;
Levels[7].Level = St_sell_D;
E = D + Dell;
St_bay_E = E - 0.25*Dell;
St_sell_E = E + 0.25*Dell;
Levels[8].Level = St_bay_E;
Levels[9].Level = St_sell_E;
}