autotrade
autotrade личный блог
03 декабря 2023, 00:51

Индикатор горизонтальные уровни

Индикатор горизонтальные уровни
канал с индикаторами
Индикатор горизонтальные уровни
--[[
вопросы к автору: https://t.me/autotrade_ru
параметры: 
Procent - процент зигзага 
--]]
Settings={
Name="ZIG_levels_Template_v4",
Procent=2,
mindelt=2,
    line=                                     
                {  
					{  
                        Name = "cur1",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 0)
                    },
					{  
                        Name = "cur2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 0)
                    }
                }
}

function Init()
  
  y1 = nil
  y2 = nil
  x1 = 1
  x2 = 1
  
  lvs = {}
  lvsval = {}
  lvsi = {}
       
  return 2
  
end

function getlevels(index)

  uplvs = nil
  dwlvs = nil

  for i = 3, #lvsval  do
    if lvsval[i] > O(index) and lvsval[i-1] < O(index) and lvsval[i] > lvsval[i-1]*(1 + Settings.mindelt/100) then
	  uplvs = lvsval[i]
	  dwlvs = lvsval[i-1]	 
	  uplvsi = lvsi[i]
	  dwlvsi = lvsi[i-1]	  
      if lvsval[i-2] > O(index) and lvsval[i-1] < O(index) and lvsval[i-2] < lvsval[i] and lvsval[i-2] > lvsval[i-1]*(1 + Settings.mindelt/100) then
	    uplvs = lvsval[i-2]
	    dwlvs = lvsval[i-1]	
	    uplvsi = lvsi[i-2]
	    dwlvsi = lvsi[i-1]		
      end 		  	  
	end	
    if lvsval[i] < O(index) and lvsval[i-1] > O(index) and lvsval[i-1] > lvsval[i]*(1 + Settings.mindelt/100) then
	  uplvs = lvsval[i-1]
	  dwlvs = lvsval[i]	 
	  uplvsi = lvsi[i-1]
	  dwlvsi = lvsi[i]		  
      if lvsval[i-2] < O(index) and lvsval[i-1] > O(index) and lvsval[i-2] > lvsval[i] and lvsval[i-1] > lvsval[i-2]*(1 + Settings.mindelt/100) then
	    uplvs = lvsval[i-1]
	    dwlvs = lvsval[i-2]	
	    uplvsi = lvsi[i-1]
	    dwlvsi = lvsi[i-2]			
      end 		  
	end	

    if lvsval[i-2] > O(index) and lvsval[i] < O(index) and lvsval[i] > lvsval[i-1] and lvsval[i-2] > lvsval[i]*(1 + Settings.mindelt/100) then
	  uplvs = lvsval[i-2]
	  dwlvs = lvsval[i]	 
	  uplvsi = lvsi[i-2]
	  dwlvsi = lvsi[i]	  	  	  
	end	
    if lvsval[i-2] < O(index) and lvsval[i] > O(index) and lvsval[i] < lvsval[i-1] and lvsval[i] > lvsval[i-2]*(1 + Settings.mindelt/100) then
	  uplvs = lvsval[i]
	  dwlvs = lvsval[i-2]	 
	  uplvsi = lvsi[i]
	  dwlvsi = lvsi[i-2]	  	  	  
	end	
	
    if lvsval[i-2] < O(index) and lvsval[i] > O(index) and lvsval[i] > lvsval[i-1] and lvsval[i] > lvsval[i-2]*(1 + Settings.mindelt/100) then
	  uplvs = lvsval[i]
	  dwlvs = lvsval[i-2]	 
	  uplvsi = lvsi[i]
	  dwlvsi = lvsi[i-2]	  	  	  
	end	
    if lvsval[i-2] > O(index) and lvsval[i] < O(index) and lvsval[i] < lvsval[i-1] and lvsval[i-2] > lvsval[i]*(1 + Settings.mindelt/100) then
	  uplvs = lvsval[i-2]
	  dwlvs = lvsval[i]	 
	  uplvsi = lvsi[i-2]
	  dwlvsi = lvsi[i]	  	  	  
	end		
	
  end  
  
  return uplvs, dwlvs, uplvsi, dwlvsi

end

function OnCalculate(index)

  de = Settings.Procent

  vl = O(index)
  if index == 1 then 
	y1 = vl
    y2 = vl
	lvs[index] = 0	
  else   
    lvs[index] = lvs[index-1]
	  if O(index) > y1*(1+de/100) and y1 < y2 then 
		x2 = x1
		y2 = y1	
		x1 = index 
		y1 = O(index)	
        lvs[index] = lvs[index]+1		
		lvsval[lvs[index]] = y2
		lvsi[lvs[index]] = x2
	  else 
		if O(index) > y1 and y1 >= y2 
		then 
		  x1 = index 
		  y1 = O(index)	  			  
		end 		
	  end 	

				
	  if O(index) < y1*(1-de/100) and y1 > y2 then 
		x2 = x1
		y2 = y1
		x1 = index 
		y1 = O(index)	
        lvs[index] = lvs[index]+1		
		lvsval[lvs[index]] = y2
		lvsi[lvs[index]] = x2
	  else 
		if O(index) < y1 and y1 <= y2 
		then 
		  x1 = index 
		  y1 = O(index)	  			  
		end 		
	  end 		
  end 	
  --[[
  if index == Size() then 
    uplvs, dwlvs, uplvsi, dwlvsi = getlevels(index)
    for i = 1, index  do	          
	  SetValue(i, 1, nil)
	  SetValue(i, 2, nil)
    end  	
    for i = uplvsi, index  do	          
	  SetValue(i, 1, uplvs)
    end  
    for i = dwlvsi, index  do	          
	  SetValue(i, 2, dwlvs)
    end    	
  end --]]
  
  uplvs, dwlvs, uplvsi, dwlvsi = getlevels(index)
  
  return uplvs, dwlvs
 
  
end
4 Комментария
  • NOT A HAMSTER
    03 декабря 2023, 01:19
    Вы бы назвали свой индикатор как-нибудь. Например: «сливастик» или «рубероид».
  • Replikant_mih
    03 декабря 2023, 14:41
    Сложно такие индикаторы без ООП писать?)

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

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