Блог им. autotrade

Индикатор с границами

пример использования:
два индикатора с разными периодами совместно дают более точный сигнал
Индикатор с границами


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

}
--[[

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

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

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

--]]

function Init()
 	
  return 1
end

function OnCalculate(index)
    
  sz = Size()
  n = Settings.period
  d = Settings.delta  
  
  if index == 1 then 
    a1_0 = 0
	a2_0 = 0
	a3_0 = 0
	a4_0 = 0  
    a1_1 = 0
	a2_1 = 0
	a3_1 = 0
	a4_1 = 0 
	HiLo_0 = 0
	HiLo_1 = 0
	prevk = 0
  end  
       

   i = index
   a1_1 = a1_1+i*C(i)
   a2_1 = a2_1+i
   a3_1 = a3_1+C(i)
   a4_1 = a4_1+i*i  
   HiLo_1 = HiLo_1+H(i)-L(i)
   y = nil
   
   if index-n > 0 then
        
    i = index-n
	a1_0 = a1_0+i*C(i)
	a2_0 = a2_0+i
	a3_0 = a3_0+C(i)
	a4_0 = a4_0+i*i
	HiLo_0 = HiLo_0+H(i)-L(i)
	
	a1 = a1_1-a1_0
	a2 = a2_1-a2_0
	a3 = a3_1-a3_0
	a4 = a4_1-a4_0
	HiLo = (HiLo_1-HiLo_0)/n
	
	if((n*a4 - a2*a2) ~= 0) then
	  
	  a = (n*a1 - a2*a3)/(n*a4 - a2*a2)
	  b = (a3 - a*a2)/n
       
      y = a*index + b 
	  
	  y1 = y - HiLo*d
	  y2 = y + HiLo*d
	  
	  if O(index) < y1 then
	    y = y2
		prevk = 1
	  else
	   if O(index) > y2 then
	    y = y1
		prevk = 2
       else 
	    if prevk == 1 then
		  y = y2
		end 
	    if prevk == 2 then
		  y = y1
		end 		
	   end
	  end 
    end 
	
   end 
 
   return y
 
  
endЬЛ


    495 | ★5
    2 комментария
    а зачем вообще нужна там аппроксимация? там же все цены уже известны

    я понимаю если нужно посчитать интеграл или что-то в этом духе, но здесь то зачем?
    avatar
    meat, тренд выстраивается
    avatar

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

    теги блога autotrade

    ....все тэги



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