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

 
Расскажите пожалуйста как и можно ли использовать канал линейной регрессии в написании советника.
 
Предполагаю, что можно. Эксперт устанавливает графический объект OBJ_REGRESSION куда надо, затем из его свойств берет значение ошибки OBJPROP_DEVIATION. Однако сам не пробовал, гарантии не даю. И еще интересно, будет ли это работать в тестере.
 
Сам объект устанавливать может и не придется, достаточно будет математики.
 
Сам объект устанавливать может и не придется, достаточно будет математики.

А не подскажете где об этой математике прочитать.Хотелось бы увидеть формулы по которым вычисляется канал.
 
На этом форуме уже несколько раз обсуждалось.
 
На этом форуме уже несколько раз обсуждалось.

Да действительно поискал- нашел много интересного
А нет ли советника в котором используется лин. регресия?
 
А нет ли советника в котором используется лин. регресия?

Вот на этом сайте описана целая стратегия, схожая с работой по линейной регрессии.
http://fxovereasy.50webs.com/TheSystem.html
А здесь выложены необходимые индикаторы к стратегии
http://fxovereasy.50webs.com/Indicators.html
Попробуй автоматизировать в эксперте индикатор Shi Channels.
Наверное какой-то положительный результат может и получится?
 
Вот нашел индикатор лин. регрессии
Каким образом затащить координату луча например нижней линии в советник?


//+------------------------------------------------------------------+
//|                                                      i_FD_LR.mq4 |
//|                                                          RealJin |
//|                                              much-love@yandex.ru |
//+------------------------------------------------------------------+
#property copyright "RealJin"
#property link      "much-love@yandex.ru"

extern int LR_Period=14;
extern bool Line_Ray=false;

#property indicator_chart_window
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int init()
  {
//---- indicators
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custor indicator deinitialization function                       |
//+------------------------------------------------------------------+
int deinit()
  {
//---- 
   
//----
   return(0);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int start()
  {
  
  int m_pos[2];
  m_pos[0]=0;
  m_pos[1]=LR_Period; 
  double m_value[2];  
   int n=m_pos[1]-m_pos[0]+1;
//---- calculate price values
   double value=Close[m_pos[0]];
   double a,b,c;
   double sumy=value;
   double sumx=0.0;
   double sumxy=0.0;
   double sumx2=0.0;
   for(int i=1; i<n; i++)
     {
      value=Close[m_pos[0]+i];
      sumy+=value;
      sumxy+=value*i;
      sumx+=i;
      sumx2+=i*i;
      
     }    
   c=sumx2*n-sumx*sumx;
   if(c==0.0) return;
   b=(sumxy*n-sumx*sumy)/c;
   a=(sumy-sumx*b)/n;
   m_value[0]=a;
   m_value[1]=a+b*n;

//---- maximal deviation
   double maxdev=0;
   double deviation=0;
   double dvalue=a;
   for(i=0; i<n; i++)
     {
      value=Close[m_pos[0]+i];
      dvalue+=b;
      deviation=MathAbs(value-dvalue);
      if(maxdev<=deviation) maxdev=deviation;
     }
//----lines
   if(ObjectFind("i_LR_C_Line")!=0){
      ObjectCreate("i_LR_C_Line",OBJ_TREND,0,Time[m_pos[1]],m_value[1],Time[m_pos[0]],m_value[0]);
   }
   ObjectSet("i_LR_C_Line",OBJPROP_TIME1,Time[m_pos[1]]);
   ObjectSet("i_LR_C_Line",OBJPROP_PRICE1,m_value[1]);      
   ObjectSet("i_LR_C_Line",OBJPROP_TIME2,Time[m_pos[0]]);
   ObjectSet("i_LR_C_Line",OBJPROP_PRICE2,m_value[0]); 
   ObjectSet("i_LR_C_Line",OBJPROP_RAY,Line_Ray);
   
   if(ObjectFind("i_LR_U_Line")!=0){
      ObjectCreate("i_LR_U_Line",OBJ_TREND,0,Time[m_pos[1]],m_value[1]+maxdev,Time[m_pos[0]],m_value[0]+maxdev);
   }
   ObjectSet("i_LR_U_Line",OBJPROP_TIME1,Time[m_pos[1]]);
   ObjectSet("i_LR_U_Line",OBJPROP_PRICE1,m_value[1]+maxdev);      
   ObjectSet("i_LR_U_Line",OBJPROP_TIME2,Time[m_pos[0]]);
   ObjectSet("i_LR_U_Line",OBJPROP_PRICE2,m_value[0]+maxdev); 
   ObjectSet("i_LR_U_Line",OBJPROP_RAY,Line_Ray);   
   
   if(ObjectFind("i_LR_L_Line")!=0){
      ObjectCreate("i_LR_L_Line",OBJ_TREND,0,Time[m_pos[1]],m_value[1]-maxdev,Time[m_pos[0]],m_value[0]-maxdev);
   }
   ObjectSet("i_LR_L_Line",OBJPROP_TIME1,Time[m_pos[1]]);
   ObjectSet("i_LR_L_Line",OBJPROP_PRICE1,m_value[1]-maxdev);      
   ObjectSet("i_LR_L_Line",OBJPROP_TIME2,Time[m_pos[0]]);
   ObjectSet("i_LR_L_Line",OBJPROP_PRICE2,m_value[0]-maxdev); 
   ObjectSet("i_LR_L_Line",OBJPROP_RAY,Line_Ray);    
   
   return(0);
  }
//+------------------------------------------------------------------+
 
Из этого индикатора никак, т.к. он не использует буферов. Но зато этот код можно почти полностью перенести в советник.
Причина обращения: