Канал линейной регрессия

 

Вопрос к опытным программистам-трейдерам , ну, или , кто сможет ответить ))

Вопрос, возможно не совсем корректен. Заранее извиняюсь ))

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

Спасибо !!!

 

Примерно так:

int fLR_Array_ABC(   int         i0,            // Правый индекс (элемент с которого располагаются данные для расчета)
                     int         aPeriod,       // Период (количество элементов массива по которым делать расчет)
                     double   &  aArray[],      // Массив данных
                     double   &  aVal_0,        // Значение на правом индексе - результат расчета
                     double   &  aVal_1,        // Значение на левом индексе - результат расчета
                     double   &  aB             // Коэффициент наклона - результат расчета, если вдруг понадобится
                     ){                           
   static int sLastPeriod=0;
   static double SumX=0.0;
   static double SumXPow=0.0;      
   int i;   
      if(sLastPeriod!=aPeriod){
         sLastPeriod=aPeriod;
         SumX=0.0;
         SumXPow=0.0;           
            for(i=0;i<aPeriod;i++){
               SumX+=i;
               SumXPow+=MathPow(i,2);  
            }           
      }
   double SumY=0.0;
   double SumXY=0.0;
   double SumYPow=0.0;
   int i2;   
      for(i=0,i2=i0;i<aPeriod;i++,i2++){
         double y=aArray[i2];
         SumY+=y;
         SumYPow+=MathPow(y,2);  
         SumXY+=y*i;         
      } 
   double SumXPow2=MathPow(SumX,2);  
   double SumYPow2=MathPow(SumY,2);      
   double Div1=SumXPow*aPeriod-SumXPow2;
   if(Div1==0)return(-1);   
   aB=(SumXY*aPeriod-SumX*SumY)/Div1;
   aVal_0=(SumY-SumX*aB)/aPeriod;
   aVal_1=aVal_0+aB*(aPeriod-1);   
}   
 
Dmitry Fedoseev:

Примерно так:

Спасибо за отклик на мой вопрос.

Хотелось бы кое-что уточнить.

массив данных aArray[] - это что ?

 
karakurt123:

Спасибо за отклик на мой вопрос.

Хотелось бы кое-что уточнить.

массив данных aArray[] - это что ?


Массив с ценами.

 

Извиняюсь за назойливость.

Я, наверно, неправильно задал вопрос.))


Создаю объект Канал на линейной прогрессии

   datetime time1=D'2017.08.04 17:20:00';
   datetime time2=D'2017.08.04 19:30:00';

  ObjectCreate(0,"ilinRegr",OBJ_REGRESSION,0,time1,0,time2,0);

Как получить начальное и конечное значение цены на этом объекте ( средняя линия).

Пробовал так :

double lRegr0=ObjectGetValueByTime(0,"ilinRegr",time1,0);

double rRegr0=ObjectGetValueByTime(0,"ilinRegr",time2,0);

Получаю цифры, которые не совпадают с тем, что я вижу на графике

 
Dmitry Fedoseev:

Массив с ценами.

Извиняюсь за назойливость.

Я, наверно, неправильно задал вопрос.))


Создаю объект Канал на линейной прогрессии

   datetime time1=D'2017.08.04 17:20:00';
   datetime time2=D'2017.08.04 19:30:00';

  ObjectCreate(0,"ilinRegr",OBJ_REGRESSION,0,time1,0,time2,0);

Как получить начальное и конечное значение цены на этом объекте ( средняя линия).

Пробовал так :

double lRegr0=ObjectGetValueByTime(0,"ilinRegr",time1,0);

double rRegr0=ObjectGetValueByTime(0,"ilinRegr",time2,0);

Получаю цифры, которые не совпадают с тем, что я вижу на графике
 
karakurt123:
 

Как программно получить начальное и конечное значение цены по средней линии канала линейной регрессии за определенное количество баров ?

Лично я - вычисляю эту самую линию канала регрессии, и использую ее уравнение, чтобы получить данные в любой точке.

Функции типа ObjectCreate() вобще, на мой взгляд, самим советникам не нужны, и использоваться могут только при отображении на графике объектов для пользователя. Если же эти данные нужны советнику - то разумнее не создавать объекты, а прямо вычислять необходимые значения, и напрямую их использовать.

 
George Merts:

Лично я - вычисляю эту самую линию канала регрессии, и использую ее уравнение, чтобы получить данные в любой точке.

Функции типа ObjectCreate() вобще, на мой взгляд, самим советникам не нужны, и использоваться могут только при отображении на графике объектов для пользователя. Если же эти данные нужны советнику - то разумнее не создавать объекты, а прямо вычислять необходимые значения, и напрямую их использовать.

Спасибо за ответ. Вопрос по ObjectCreate() был чисто теоретический.  я новичок, поэтому выискиваю оптимальную "тропу"  в  MQL. Ваше предложение более практично.
Причина обращения: