Блог им. autotrade

Идея построения индикатора для торговой системы. Продолжение

Предыдущее обсуждение: Идея для торговой системы
Сделал пока на одном зигзаге и двум плечам — тише едешь дальше будешь
Идея построения индикатора для торговой системы. Продолжение

Реализация:
--[[
вопросы к автору: https://smart-lab.ru/profile/autotrade/
Zigzag + 2 MA
параметры: 
prc - процент зигзага 
--]]
Settings={
Name="MMZ_v1",
prc=2,
frm=200,
    line=                                     
                {  
					{  
                        Name = "cur1",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0,0)
                    },
					{  
                        Name = "cur2",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0,255)
                    },
					{  
                        Name = "cur3",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0,0)
                    }
                }
}

function Init()
  
      
  return 3
  
end

function OnCalculate(index)

  de = Settings.prc

  vl = O(index)
  if index == 1 then 
	y1 = vl 
    y2 = vl
    y3 = vl
    y4 = vl	
    x1 = 1
    x2 = 1	
    x3 = 1
    x4 = 1	
	ch = {}
	ch[index] = 0
  else   
    ch[index] = ch[index-1] 
	  if O(index) > y1*(1+de/100) and y1 < y2 then 
	    x4 = x3
	    y4 = y3		  
	    x3 = x2
	    y3 = y2		  
	    x2 = x1
	    y2 = y1	
	    x1 = index 
	    y1 = O(index)		
		ch[index] = ch[index-1] + 1
      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 
	    x4 = x3
	    y4 = y3		  
	    x3 = x2
	    y3 = y2		  
	    x2 = x1
	    y2 = y1
	    x1 = index 
	    y1 = O(index)	
        ch[index] = ch[index-1] + 1		
      else 
	    if O(index) < y1 and y1 <= y2 
		then 
	      x1 = index 
	      y1 = O(index)	  			  
	    end 		
	  end 	
	  	  		
	end 	
  
 --[[
  if x1 ~= index then 
    curfrom = x1
	curto = index
  else 
    curfrom = x2
	curto = x1
  end 

  if curto ~= curfrom and curfrom ~= nil and curto ~= nil then 
    if O(curto) ~= nil and O(curfrom) ~= nil then 
      k = (O(curto)- O(curfrom))/(curto- curfrom)  
      for i = curfrom, index  do
        curv = i*k + O(curto) - curto*k  		          
	    SetValue(i, 1, curv)
      end   	
	end 
  end 
--]]
 
 
  if index == 1 then 
    sma = {}
	sma[index] = O(index)
	per1 = {}
	per2 = {}
	per1[index] = 8
	per2[index] = 2
  else 
    sma[index] = sma[index-1] + O(index)
	per1[index] = per1[index-1]
	per2[index] = per2[index-1]
	
	if ch[index] ~= ch[index-1]  then 	 	 
     for i = Settings.frm, 5, -2  do
	 --[[
	  cros0 = 0
	  for k = x2, x1 do      	  	  
	   if k-2 > Settings.frm then 
	    j = math.ceil(i/4) 
        sma1 = (sma[k] - sma[k-i])/i  
	    sma2 = (sma[k] - sma[k-j])/j  
        sma1_0 = (sma[k-1] - sma[k-i-1])/i  
	    sma2_0 = (sma[k-1] - sma[k-j-1])/j  	   
	    if 
	     sma1 > sma2 and sma1_0 <= sma2_0 and y2 > y3 or 
		 sma1 < sma2 and sma1_0 >= sma2_0 and y2 < y3
	    then
	     cros0 = cros0 + 1
		 per1_0 = i
	     per2_0 = j
		 pr0 = O(k)
	    end 	 
	   end 
      end  -- for k   
      --]]	  
	 
	  cros = 0
	  for k = x3, x2 do      	  	  
	   if k-2 > Settings.frm then 
	    j = math.ceil(i/4) 
        sma1 = (sma[k] - sma[k-i])/i  
	    sma2 = (sma[k] - sma[k-j])/j  
        sma1_0 = (sma[k-1] - sma[k-i-1])/i  
	    sma2_0 = (sma[k-1] - sma[k-j-1])/j  	   
	    if 
	     sma1 > sma2 and sma1_0 <= sma2_0 and y2 > y3 or 
		 sma1 < sma2 and sma1_0 >= sma2_0 and y2 < y3
	    then
	     cros = cros + 1
		 per1_1 = i
	     per2_1 = j
		 pr1 = O(k)
	    end 	 
	   end 
      end  -- for k   
	  
	  cros2 = 0
	  for k = x4, x3 do      	  	  
	   if k-2 > Settings.frm then 
	    j = math.ceil(i/4) 
        sma1 = (sma[k] - sma[k-i])/i  
	    sma2 = (sma[k] - sma[k-j])/j  
        sma1_0 = (sma[k-1] - sma[k-i-1])/i  
	    sma2_0 = (sma[k-1] - sma[k-j-1])/j  	   
	    if 
	     sma1 > sma2 and sma1_0 <= sma2_0 and y3 > y4 or 
		 sma1 < sma2 and sma1_0 >= sma2_0 and y3 < y4
	    then
	     cros2 = cros2 + 1
		 per1_2 = i
	     per2_2 = j
		 pr2 = O(k)
	    end 	 
	   end 
      end  -- for k   	  
	  
	  if cros == 1 and cros2 == 1 and ( y2 > y3 and pr1 < pr2 or y2 < y3 and pr1 > pr2 ) then
	    if per1_1 < per1_2 then 
 		  per1[index] = per1_1
	      per2[index] = per2_1
		else
		  per1[index] = per1_2
	      per2[index] = per2_2		
        end 		
	  end 
     end -- for i    	 
	end 
	
	if index-2 > Settings.frm  then       	  
      sma1 = (sma[index] - sma[index-per1[index]])/per1[index]  
	  sma2 = (sma[index] - sma[index-per2[index]])/per2[index]
	end    
	
  end 
 
  
  return nil, sma1, sma2
  --return nil, per1[index], per2[index]
 
  
end
305
1 комментарий
Хм… Навскидку — ничем не отличается от двух скользяшек, быстрой и медленной…

Читайте на SMART-LAB:
Фото
«Селигдар» увеличил объем запасов золота до 295 тонн
Фактический прирост запасов по результатам геолого-разведочных работ за 2025 год составил 21,6 тонны. В течение прошлого года...
Пролив на цену не влияет
Продолжаем репортаж с прошедшего Биржевого форума, где вице-президент Норникеля Антон Берлин рассказал о влиянии текущей геополитической ситуации в...
Фото
100 акций МГКЛ — для новых инвесторов
Напоминаем, что до 30 апреля действует акция в Т-Инвестициях. Можно получить 100 акций при выполнении условий: — покупка от 100 акций...
Фото
ММК: результаты в 2026 году продолжат ухудшаться. Актуализация взгляда на акции компании.
Здравствуйте! Продолжаю серию публикаций с актуализацией взгляда на российские металлургические компании и состояние рыночной конъюнктуры в...

теги блога autotrade

....все тэги



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