Блог им. autotrade

Индикатор горизонтальной ширины канала за период

Ширина канала показана синим отрезком, канал строится за отрезок показанный зеленым цветом
по перегибам можно понять что тренд заканчивается
Индикатор горизонтальной ширины канала за период
Settings={
Name="Buy_osc_v01",
period=50,
delta=0,
lim=100.0,
line=                                     
                {  
					{  
                        Name = "cur1",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0, 0, 255)
                    },
					{  
                        Name = "cur2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0, 0, 0)
                    },
					{  
                        Name = "cur3",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 0)
                    },
					{  
                        Name = "cur4",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 0)
                    }

                }

}
--[[

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

назначение:
горизонтальная ширина канала 

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

--]]

function Init()
  
  return 2
end

function OnCalculate(index)
    
  sz = Size()
  n = Settings.period
  d = Settings.delta
  lim = Settings.lim
        	
   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
    
	 c1 = 0
	 c2 = 0
	 n1 = 0
	 n2 = 0
     for j=index-n+1-d, index-d do  
      y = a*j + b
	  if C(j) < y then
	    c1 = c1 + (y -C(j))
		n1 = n1 + 1
	  end
	  if C(j) > y then
	    c2 = c2 + (C(j) - y)
		n2 = n2 + 1
	  end	  
     end	
	 
	 if n1 ~= 0 then
	   c1 = c1/n1
	 end
	 if n2 ~= 0 then
	   c2 = c2/n2
	 end		 
	 
	 if a==0 then
	   y = 0
	 else
	   y = (c1+c2)/a	
	   if y > lim then 
	     y = lim 
	   else 
         if y < -lim then 
		   y = -lim
         end   		 
	   end 	 
	 end 

	 
    end 
   end 	
   
   return y,0 
  
end


495 | ★2
2 комментария
У вас взят определенный период из прошлого, а что скажите про будущее?
avatar
Это LUA? 
Подскажите, как им пользоваться?
avatar

Читайте на SMART-LAB:
Фото
Новый эмитент на рынке
ООО «Ломбард 888» — новый эмитент из индустрии ломбардного финансирования. Компания предоставляет займы под залог изделий из...
Фото
"Эксперт РА" ждет рост страхового рынка в 2026 году
Газета «Ведомости» опубликовала материал про страховой рынок. В 2026 г. сборы могут достичь 3,865 трлн руб. и вырасти на 4-6% год к году,...
Фото
Данные США «хороши», но EUR/USD не двигается: рынок уперся в реакцию ФРС
EUR/USD снова демонстрирует типичное поведение «усталого» рынка: свежие релизы по США формально позитивные, но пара застряла вокруг 1,1650....
Фото
Хэдхантер. Ситуация на рынке труда в декабре идет ко дну - хуже не было никогда
Вышла статистика рынка труда за декабрь 2025 года, которую Хедхантер публикует ежемесячно, что же там интересного: Динамика...

теги блога autotrade

....все тэги



UPDONW
Новый дизайн