Кручу-верчу канал "Regression Channel"

 

Кручу-верчу канал "Regression Channel".  Казалось бы совсем простая задача. 

Надо узнать наклон Regression Channel. Вверх или вниз он направлен.

Никаких зацепок не вижу, чтобы программно зацепиться. Есть только время ни к чему не обязывающее.

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

Кто может предложить что то дельное?         Гугля не предлагать:) 

 
ULAD:

Кручу-верчу канал "Regression Channel".  Казалось бы совсем простая задача. 

Надо узнать наклон Regression Channel. Вверх или вниз он направлен.

Никаких зацепок не вижу, чтобы программно зацепиться. Есть только время ни к чему не обязывающее.

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

Кто может предложить что то дельное?         Гугля не предлагать:) 

Что значит "Есть только время..."? А значение индикатора что, уже неважно?

И чем определение наклона регрессии отличается от определения наклона той же МА, например?

 

ObjectGetValueByTime (работал  в мт4 только для центральной линии, но проверьте) справка в мт4 немного косая в плане количества параметров. 

 
ALXIMIKS:

ObjectGetValueByTime (работал  в мт4 только для центральной линии, но проверьте) справка в мт4 немного косая в плане количества параметров. 

Благодарю. Похоже то что надо. 
 

Проще рассчитывать показатели канала самому:

double GetLinearRegressionValues(int rightBar, int period, double &leftValue)
{
   int leftBar = rightBar + period - 1;
   if (period <= 0 || leftBar >= Bars || rightBar < 0)                                                                                     
      return 0;                                   
      
   double sumy = 0,                                                                                // Сумма значений функции
          sumx = 0.0,                                                                              // Сумма аргументов функции
          sumxy = 0.0,                                                                             // Сумма произведения аргументов и значений
          sumx2 = 0.0;                                                                             // Сумма квадратов аргументов функции

   for (int i = rightBar; i <= leftBar; i++)      
   {
      sumy += Close[i];                           
      sumxy += Close[i] * i;                        
      sumx += i;                                  
      sumx2 += i * i;                               
   }  
 
   // Вычисление коэффициентов К и В 
   double denominator = sumx2 * period - sumx * sumx;                                              // Знаменатель для нахождения коэф. К
   if (denominator == 0.0)                         
      return 0;                                   
      
   double kKoef = (sumxy * period - sumx * sumy) / denominator;
   double bKoef = (1.0 / period) * (sumy - kKoef * sumx);     

   // Расчет цен точек линии на крайних барах 
   leftValue = kKoef * leftBar + bKoef;                                                            // Цена левой точки линии 
   return kKoef * rightBar + bKoef;                                                                // Цена правой точки линии
}

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

 
ULAD: Гугля не предлагать:) 

а зря отказываетесь) Гдет тут на сайте подробно разбиралось.

Наклон Regression Channel можно определить по двум МА, простой и линейно-взвешенной.

Период обоих МА=длине Regression Channel.

LWMA>SMA наклон вверх

LWMA<SMA наклон вниз

 
Scriptong:
Прошу прощения у всех за оффтоп, но не смог не обратить внимание на наглядно расставленные комментарии в исходнике (справа). Как вам удается их расставлять так? Не по номеру же столбца находите позицию.
 
Scriptong:

Проще рассчитывать показатели канала самому:

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

Прекрасный вариант!

Канал уже  даже можно раскрасить программно, в зависимости от наклона. С уважением принимаю. Спасибо. 

 
lob32371:
Прошу прощения у всех за оффтоп, но не смог не обратить внимание на наглядно расставленные комментарии в исходнике (справа). Как вам удается их расставлять так? Не по номеру же столбца находите позицию.
Все вручную)). Правда, уже настолько привык, что это не вызывает никакого раздражения и вовсе не влияет на скорость работы с кодом. Перемещаюсь Tab'ом до позиции 100.
 
ULAD:

Прекрасный вариант!

Канал уже  даже можно раскрасить программно, в зависимости от наклона. С уважением принимаю. Спасибо. 

И Вам спасибо. Оказание реальной помощи другим доставляет не меньшее удовольствие, чем ее получение.
 
Scriptong:

Проще рассчитывать показатели канала самому:

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

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

https://www.mql5.com/ru/articles/270