Блог им. autotrade

Индикатор трендовый на IMOEX сигналы и эквити

Индикатор трендовый на IMOEX сигналы и эквити
Обсуждать можно в телеграм
Индикатор трендовый на IMOEX сигналы и эквити

--[[
SMA_list_magic_template_v1
--]]
Settings=              
        {                          
            Name = "SMA_list_magic_template_v1",   -- indicator name
			sign=0,	
            prf=0,			
            ln1=10,               -- period		
			ln2=20,               -- period					
			ln3=30,               -- period		
            ln4=40,               -- period		
			ln5=50,               -- period					
			ln6=60,               -- period				
            line=                                     
                {                               
                    {  
                        Name = "SMA_TEMPL",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0,0)
                    },
                    {  
                        Name = "SMA_TEMPL",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(255,0,0)
                    },
					{  
                        Name = "cur3",
                        Type =TYPE_TRIANGLE_DOWN,
                        Width = 5,
                        Color = RGB(255, 0, 0)
                    },
					{  
                        Name = "cur4",
                        Type =TYPE_TRIANGLE_UP,
                        Width = 5,
                        Color = RGB(0, 0, 255)
                    }	
                }
       }


function Init()
  sma = {{},{}}
  sum = {{},{}}
  ln = {}
  n = {}
  sumln = 0
  m = {}
  prof = {}   
  return 4
end

function GetSMA(index, num)

  if index == 1 then 
    if num == 1 then 
      ln[num] = Settings.ln1 		
	end 
    if num == 2 then 	
      ln[num] = Settings.ln2
	end 
	if num == 3 then 
      ln[num] = Settings.ln3     
	end 
    if num == 4 then 
      ln[num] = Settings.ln4 
	end 
    if num == 5 then 	
      ln[num] = Settings.ln5
	end 
	if num == 6 then 
      ln[num] = Settings.ln6     
	end 		
	sumln = sumln + ln[num]
    
	sum[num] = {}
    sum[num][index] = O(index)
    n[num]=1
  else   
    if index > ln[num] then     
      sum[num][index] = sum[num][index-1] + O(index)
	  sum[num][index] = sum[num][index] - O(index-ln[num])
    else 
      sum[num][index] = sum[num][index-1] + O(index)
      n[num] = n[num] + 1	
    end 
  end 

  
  if n[num] ~= 0 then 
    if num == 1 then 
      sma[index] = {} 
	end   
    sma[index][num] = sum[num][index]/n[num]
  end  

  return sma[index][num]
  
end

function GetMagic(index, num)

  res = 0
  val = 0
  cnt = 3+num
  if index > ln[num] then 
    val = sma[index][num]
    for i = 1, cnt do  
	  val = val + (O(index) - O(index-ln[num]+i))/ln[num]
      if O(index) >= val or val >= sma[index][num] then 
        res = res + (ln[num]/sumln)*(i/cnt) 	  
	  end 
      if O(index) < val or val < sma[index][num] then 
        res = res - (ln[num]/sumln)*(i/cnt) 	  
	  end 	  
	end   
  end 
   
  return res
end

function OnCalculate(index)

  prof[index] = 0 
  
  GetSMA(index, 1)
  GetSMA(index, 2)
  GetSMA(index, 3)
  GetSMA(index, 4)
  GetSMA(index, 5)
  GetSMA(index, 6)  
  
  m[index] = GetMagic(index, 1)
  m[index] = m[index] + GetMagic(index, 2)
  m[index] = m[index] + GetMagic(index, 3)
  m[index] = m[index] + GetMagic(index, 4)
  m[index] = m[index] + GetMagic(index, 5)
  m[index] = m[index] + GetMagic(index, 6)
  
  if index > 7 then 
    m[index] = --(9*m[index]+8*m[index-1]+7*m[index-2]+6*m[index-3]+5*m[index-4]+4*m[index-5]+3*m[index-6]+2*m[index-7]+m[index-8])/45
	(3*m[index]+2*m[index-1]+m[index-2])/6
  end  
  
  if index == Size() then   
    if Settings.sign == 1 then 
      for i = 2, Size() do 
	    if m[i] ~= nil and m[i-1] ~= nil then 
	      if 0 < m[i] and 0 >= m[i-1] then
	        SetValue(i, 4, O(i))	
	      else	  
	       if 0 > m[i] and 0 <= m[i-1] then
	         SetValue(i, 3, O(i))		
	       else
	         SetValue(i, 3, nil)	
	         SetValue(i, 4, nil)	
	       end 	  
	      end 
	    end 
      end 
    end;
  end;  
  
  
  if Settings.prf==1 then
  
    if prof[index-1] ~= nil and m[index-1] ~= nil and O(index-1) ~= nil then 
      if 0 <= m[index-1] then 
        prof[index] = prof[index-1] +	O(index) - O(index-1)  
	  end 
      if 0 > m[index-1] then 
        prof[index] = prof[index-1] +	O(index-1) - O(index)  
	  end 	
    end  
    
	return prof[index], nil, nil, nil 
  else   
    if Settings.sign == 0 then   
      return 0, m[index], nil, nil
    end 
  end     
  
end

★1

теги блога autotrade

....все тэги



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