Пример:
Исходный текст:
Код: Выделить всё
function Initialize()
{
IndicatorName = "LinReg";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddSeries("LinReg", DrawAs.Line, Color.Red);
AddParameter("Period", 20);
AddParameter("Extr", 10);
AddGlobalVariable("ZN", Types.Double, 0.0);
AddGlobalVariable("t2", Types.Double, 0.0);
AddGlobalVariable("t4", Types.Double, 0.0);
}
function Evaluate()
{
// AlfaDirect. 2015. OX
// LinReg (Linear Regression) - Линейная регрессия
if (CurrentIndex == 0 )
{
// Расчет неизменных коэффициентов по времени
for (int i = 0; i < Period; i++)
{
t2 = t2 + i;
t4 = t4 + i * i;
}
ZN = ((double)Period * t4 - t2 * t2);
}
if (CurrentIndex < Period + Extr )
LinReg = Input[0];
else
{
// Вариант t = [0...N-1]
double a1 = 0.0;
double a3 = 0.0;
for (int i = 0; i < Period; i++)
{
a1 = a1 + i * Input[-(int)Period + 1 + i];
a3 = a3 + Input[-i];
}
var alfa = (Period * a1 - t2 * a3) / ZN;
var beta = (a3 - alfa * t2) / Period;
LinReg = alfa * ((double)Period-1.0 + Extr) + beta ;
}
}