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

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

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

Добавлено: evge » 07 фев 2016, 10:21

Тема: LinReg (Linear Regression) – линейная регрессия

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

Линейная регрессия (LinReg) – это индикатор, который отображает в каждый момент последнюю точку текущей линейной модели ценового движения за указанный период, посчитанную на основании метода наименьших квадратов.

Пример:

LinReg-00.png
LinReg-00.png (26.98 КБ) 31269 просмотров


Исходный текст:

Код: Выделить всё

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 ;
  }
}