"EMA =" равнозначно "EMA[0] ="
EMA[1] == EMA[-1], т.е. на Ваше усмотрение, как удобно. Но любое значение отличное от 0, неважно положительное или отрицательное это индекс смещения влево от бара.
Если вы хотите индикатор без перерисовки, то просто не используйте данные из текущей (последней) свечи / ряда.
Для расчета используйте данные начиная от [1] и далее [..n]. Тогда перерисовки не будет и Ваш индикатор будет рисовать значения только на основании уже сформированных баров (рядов).
если простейший пример то вот:
SMA с перерисовкой, учитывая последний бар
Код: Выделить всё
function Initialize()
{
IndicatorName = "SMA_demo_1";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddSeries("A", DrawAs.Line, Color.Red);
// Дополнительные параметры:
AddParameter("Period", 20);
}
function Evaluate()
{
A = 0.0;
for (var x = 0; x < Period; x++)
A = A + Input[x];
A = A / Period;
}
SMA БЕЗ перерисовки, последний бар не учитывается (данные для расчета сдвинуты на 1 бар)
Код: Выделить всё
function Initialize()
{
IndicatorName = "SMA_demo_2";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddSeries("A", DrawAs.Line, Color.Red);
// Дополнительные параметры:
AddParameter("Period", 20);
}
function Evaluate()
{
A = 0.0;
for (var x = 1; x <= Period; x++)
A = A + Input[x];
A = A / Period;
}
Обратите внимание на разницу
и