autotrade
autotrade личный блог
18 октября 2019, 11:29

Индикатор наклонного канала

сам тренд это такая линия сумма квадратов расстояний до которой от каждой цены закрытия бара минимальны (метод наименьших квадратов)
дайте мне тимофейчиков
:)
Индикатор наклонного канала
 
 

Settings={
Name="MNKHL",
period=200,
delta=0,
line=                                     
                {  
					{  
                        Name = "cur1",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 0)
                    },
					{  
                        Name = "cur2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,255, 0)
                    },
					{  
                        Name = "cur3",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(255,0, 0)
                    },
					{  
                        Name = "cur4",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(255,0, 0)
                    },
					{  
                        Name = "cur5",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,255, 0)
                    }

                }

}
--[[

описание свойств:
period - период, за каротрый делается расчет
delta - смещение назад 

назначение:
построение тенденции

использовался:
метод наименьших квадратов (аппроксимация линией)

--]]

function Init()
  
  return 5
end

function OnCalculate(index)
    
  sz = Size()
  n = Settings.period
  d = Settings.delta
       
  if (index ~= sz) then
    return nil, nil, nil, nil, nil
  else  	   
   y = nil  
   if index-n-d > 0 then
    a1 = 0
	a2 = 0
	a3 = 0
	a4 = 0
    for i=index-n+1-d, index-d do  

	  a1 = a1+i*C(i)
	  a2 = a2+i
	  a3 = a3+C(i)
	  a4 = a4+i*i
	
    end  
	
	if((n*a4 - a2*a2) ~= 0) then
	 a = (n*a1 - a2*a3)/(n*a4 - a2*a2)
	 b = (a3 - a*a2)/n
    
	 j = index-n+1-d
	 mh1 = H(j)
	 ml1 = L(j)
	 mh2 = H(j)
	 ml2 = L(j)
	 dmh1 = 0
	 dml1 = 0
	 dmh2 = 0
	 dml2 = 0
     for j=index-n+1-d, index-d do  
      y = a*j + b
      SetValue(j, 1, y) 
	  if H(j) < y and y - H(j) > dmh1 then
	    mh1 = H(j)
		dmh1 = y - H(j)
	  end
	  if L(j) < y and y - L(j) > dml1 then
	    ml1 = L(j)
		dml1 = y - L(j)
	  end
	  if H(j) > y and H(j) - y > dmh2 then
	    mh2 = H(j)
		dmh2 = H(j) - y
	  end
	  if L(j) > y and L(j) - y > dml2 then
	    ml2 = L(j)
		dml2 = L(j) - y
	  end
     end	
	 
     for j=index-n+1-d, index-d do  
      y = a*j + b
      SetValue(j, 2, y-dmh1) 
	  SetValue(j, 3, y-dml1) 
      SetValue(j, 4, y+dmh2) 
	  SetValue(j, 5, y+dml2) 	  
     end		 
	 
    end 
   end 	
   return y
  end
 
  
end
9 Комментариев
  • Ajax
    18 октября 2019, 11:30
    Отлично!!!
    • Aleksandr II
      18 октября 2019, 12:15
      Ajax, Согласен. Жаль мало трейдеров о нем узнают(
  • Андрей Кольцов
    18 октября 2019, 17:44
    Не знаю как Вас, а меня учили, что по двум нижним фракталам (и 1 верхнему) строится восходящий канал, а не нисходящий…
  • Лёва Соловейчик
    19 октября 2019, 01:23
    Когда я вижу, сколько смартлабовцев сохраняет это к себе в избранное, то вопрос, почему и сколько народу сливает, отпадает сам собой-)
  • Евгений Гуревич
    19 октября 2019, 08:16
    Спасибо, конечно, за индикатор, но вся беда в том, что он показывает тренд, когда тот закончился (заканчивается) ((
  • Weddy
    21 октября 2019, 06:37
    1) Почему на Вашем скрине нижняя красная линия проходит по 2-м нижним экстремумам, а у меня эту линию рисует ниже?
    2) Было б здорово, если бы Ваш индикатор мог рисовать верхнюю границу как в нарисованном вручную желтой пунктирной линией (при условии, что нижнюю границу он бы рисовал по нижним экстремумам)

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн