Отклонение считается как максимальное разница цен и базовой регрессии, строится по ценам закрытия.
Параметры
Period - период
Delay - период запаздывания
Автор
AlfaDirect 2016. OX
Пример
Код: Выделить всё
function Initialize()
{
IndicatorName = "LinRegChannel";
PriceStudy = true;
AddInput("Input", Inputs.Price);
AddSeries("LineUp", DrawAs.Line, Color.Red);
AddSeries("LineDn", DrawAs.Line, Color.Red);
AddSeries("LineU2", DrawAs.Line, Color.Gray);
AddSeries("LineD2", DrawAs.Line, Color.Gray);
AddParameter("Period", 100, 1);
AddParameter("Delay", 5);
}
function Evaluate()
{
// AlfaDirect 2016. OX
// Канал линейной регрессии за период (Period) с запаздыванием (Delay)
// Отклоенение считается как максимальное разница цен и базовой регрессии, строится по ценам закрытия.
if (CurrentIndex == MaxIndex)
{
double a1 = 0.0;
double a2 = 0.0;
double a3 = 0.0;
double a4 = 0.0;
if (CurrentIndex >= Period+Delay )
{
double N = Period;
for (var i = 0; i < N; i++)
{
a1 = a1 + i * Input[-(int)N + 1 + i -Delay];
a2 = a2 + i;
a3 = a3 + Input[-i -Delay];
a4 = a4 + i * i;
}
var alfa = (Period * a1 - a2 * a3) / (N * a4 - a2 * a2);
var beta = (a3 - alfa * a2) / N;
double Sigma1 = 0.0;
double Sigma2 = 0.0;
for (var i = 0; i < N; i++)
{
// Расчет отклонения 1
double a = ((alfa * (i) + beta) - Input[-Period+i+1 -Delay]);
if ( a > Sigma1 )
Sigma1 = a;
// Расчет отклонения 2
a = -((alfa * (i) + beta) - Input[-Period+i+1 -Delay]);
if ( a > Sigma2 )
Sigma2 = a;
}
for (var i = 0; i < N+Delay; i++)
{
LineUp[-Period+i+1 -Delay] = alfa * (i) + beta + Sigma1;
LineU2[-Period+i+1 -Delay] = alfa * (i) + beta + Sigma2;
LineDn[-Period+i+1 -Delay] = alfa * (i) + beta - Sigma1;
LineD2[-Period+i+1 -Delay] = alfa * (i) + beta - Sigma2;
}
}
}
}
Скачать исходный текст