Индикатор "Линейная регрессия"

 
Здравствуйте!
Помогите найти индикатор "Линейная регрессия" для МТ4.
Или если может кто-нибудь напишет - я формулу вычисления дам.
Спасибо!
 
http://www.metatrader4.com/ru/forum/search/?search=%F0%E5%E3%F0%E5%F1%F1%E8%FF&x=0&y=0
 
Rosh:
https://www.metatrader4.com/ru/forum/search/?search=%F0%E5%E3%F0%E5%F1%F1%E8%FF&x=0&y=0

Меня интересует не канал линейной регрессии а индикатор линейной регрессии (одна линия).
Вот правило:

При линейной регрессии используют метод наименьших квадратов для того, чтобы вписать линию в набор данных. Наилучшая линия находится путем минимизации расстояния от точек данных до этой линии.

 
Tango писал (а):
Здравствуйте!
Помогите найти индикатор "Линейная регрессия" для МТ4.
Или если может кто-нибудь напишет - я формулу вычисления дам.
Спасибо!

Чуть подожди, в codebase появится после проверки.
 

На всякий случай дам код MQL II - может кто переделает...

/*[[
    Name := linreg
    Author := Copyright © 2005, MetaQuotes Software Corp.
    Link := https://www.metaquotes.net//
    Separate Window := No
    First Color := Blue
    First Draw Type := Line
    First Symbol := 217
    Use Second Data := No
    Second Color := Red
    Second Draw Type := Line
    Second Symbol := 218
]]*/
Inputs : RPeriod(20);
Variables : shift(0),cnt(0),loopbegin(0),first(True),prevbars(0);
Variables : sum(0),length(0),i(0),mt(0),WT(0),vWT2(0),value(0);
 
SetLoopCount(0);
//initial chekings
If RPeriod<1 Then Exit;
length=RPeriod;
loopbegin=206-length-1;
For shift=loopbegin Downto 0 Begin
sum=0;
For i=length Downto 1 Begin
sum=sum+(i-(length+1)/3)*Close[length-i+shift];
End;
WT = sum*6/(length*(length+1));
 
// loop from first bar to current bar (with shift=0)
 
    SetIndexValue(shift, WT);
End;
 
double regressionEquation(double X[],double Y[],int size,double& B0,double& B1){
int i;
double averageXY=0;
double averageX=0;
double averageY=0;
double sumXY=0;
double sumXX=0;
double sumYY=0;
double SXX=0;
double SYY=0;
double SXY=0;
for (i=0;i<size;i++)
   {
   sumXY+=(X[i]*Y[i]); 
   sumXX+=(X[i]*X[i]);
   sumYY+=(Y[i]*Y[i]);
   
   averageY+=Y[i];   
   averageX+=X[i];   
   } 
   averageX/=size;
   averageY/=size;
 
   SXY=sumXY-size*averageY*averageX; 
   SXX=sumXX-size*averageX*averageX; 
   SYY=sumYY-size*averageY*averageY; 
   
   if (SXX==0) SXX=100;
   if (SYY==0) SYY=100;
   
   B1=SXY/SXX;
   B0=averageY-B1*averageX;
   
double Rxy=SXY/(MathSqrt(MathAbs(SXX*SYY)));
 
return (Rxy);
}
Вообщем так, функция возвращает коэфицент пирсона,так это вроде по русски (в учился не в России поэтому точно не знаю как все это научно по русски называется)
тоесть чем ближе к 1,тем лучше уравнение регрессии.. а само уравнение это Y'=B0+B1*X, В0 и В1 функция возвращает тоже,надо только передать в функцию 2 массива со значениями и количество значений для рассчета. А потом имея В0 и В1 можно подставить в уравнение Х "из будущего" в нашем случае время и "предугадать" У,то есть цену.

Надеюсь кому-то поможет.... :)
 

Формула верна и выглядит следующим образом:
у = а + bx, где:
у - цена закрытия;
х - положение текущего периода времени в базе данных;
а - 1/п (Ey - bEх);
b - (nExy - EхEу)/nEх2 - (Ex)2;
п - число временных периодов при суммировании;
E - сумма за n периодов.

Спасибо за функцию - но проблема в том - как теперь ее вставить в индикатор?

 

Вот это

'LRMA BB'

не оно?

 
alexjou писал (а):

Вот это

'LRMA BB'

не оно?


Нет - это не оно. Индикатор Линейной регрессии - это линия типа индикатора Зигзаг (она прямая)
 
Tango писал (а):
alexjou писал (а):

Вот это

'LRMA BB'

не оно?


Нет - это не оно. Индикатор Линейной регрессии - это линия типа индикатора Зигзаг (она прямая)

С чего ты взял, что она прямая? Этот индикатор, как и тот, который я разместил в codebase рисует последнюю точку линии регресси, только в отличие от моего полосы рассчитываются по стандартной девиации, а в моем по стандартной ошибке.
 
Скорее всего, Tango имел в виду индикатор канала ЛР. Он действительно имеет зигзагообразный вид и состоит из трех линий. Где-то я видел его график. Ссылка, к сожалению,  у меня не сохранилась.
Причина обращения: