Блог им. autotrade

Сделал индикатор

Сделал индикатор на базе этой функции F: smart-lab.ru/blog/1089363.php
работает примерно так же как если бы выставил условие каждое по отдельности типа:
GAZP > MA(GAZP) and IMOEX2 > MAX(IMOEX2) and GAZP > MA(GAZP) and GAZP/IMOEX2 > MAX(GAZP/IMOEX2)
для лонга и наоборот для шорта.
Но функция F дает сигнал с большим шумом. Изначально была задача для выше приведенных условий придумать стоплосс.
Поэтому и пришлось придумать функцию F. Стоплосс как раз позволяет уменьшить шум сигнала. пока в нем стоплосса нет в следующей версии появится

--[[
вопросы к автору: https://t.me/autotradering
параметры: 
--]]
Settings={
Name="gazp_imoex2_2_v1",
prf=0, -- =1 - показать профит		
sign=0,	-- =1 - показать сигнал	
Len1=40, -- длина средней
Len2=30, -- длина средней
Len3=5, -- длина средней
SLP=1.0,	-- stop loss в %
line=                                     
                {  
                    {  
                        Name = "line1",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0,255)
                    },
                    {  
                        Name = "line2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0,255)
                    },					
					{  
                        Name = "TRIANGLE_DOWN",
                        Type =TYPE_TRIANGLE_DOWN,
                        Width = 5,
                        Color = RGB(255, 0, 0)
                    },
					{  
                        Name = "TRIANGLE_UP",
                        Type =TYPE_TRIANGLE_UP,
                        Width = 5,
                        Color = RGB(0, 0, 255)
                    },
					{  
                        Name = "cur5",
                        Type =TYPE_POINT,
                        Width = 5,
                        Color = RGB(255, 0, 255)
                    },
					{  
                        Name = "cur6",
                        Type =TYPE_POINT,
                        Width = 5,
                        Color = RGB(0, 0, 255)
                    }					
                }
}

function Init()
  prof = {}
  sl = {}    
  pos = {}   
  otn = {}
  return 6
  
end


function OnCalculate(index)

  Len1 = Settings.Len1  
  Len2 = Settings.Len2  
  Len3 = Settings.Len3     

if index == 1 then
  brs = Size()
	
  imoex2 = {}
  gazp = {}
  otn = {}  
end 

if index == 1 or brs ~= Size() then
  brs = Size()
  
  imoex2_id = "imoex2"
  number_of_candles_imoex2 = getNumCandles(imoex2_id)
  imoex2_from_graph, a, b = getCandlesByIndex(imoex2_id, 0, 0, number_of_candles_imoex2)  
  for i = 1, number_of_candles_imoex2 do
	imoex2[i] = imoex2_from_graph[i-1].open
	if i > 1 and imoex2[i] == 0 then 
		imoex2[i] = imoex2[i-1]
	end 
  end    
  
  gazp_id = "gazp"
  number_of_candles_gazp = getNumCandles(gazp_id)
  gazp_from_graph, a, b = getCandlesByIndex(gazp_id, 0, 0, number_of_candles_gazp)  
  for i = 1, number_of_candles_gazp do
	gazp[i] = gazp_from_graph[i-1].open
	if i > 1 and gazp[i] == 0 then 
		gazp[i] = gazp[i-1]
	end 
  end  

else

  imoex2[index] = imoex2_from_graph[index-1].open
	if index-2 >= 0 and imoex2[index] ~= nil then 
	  if imoex2[index] == 0 then 
	    if imoex2[index-1] ~= nil then 
          imoex2[index] = imoex2[index-1]
		end 
	  end 
	else  
      imoex2[index] = imoex2[index-1]	
	end 
	
  gazp[index] = gazp_from_graph[index-1].open
	if index-2 >= 0 and gazp[index] ~= nil then 
	  if gazp[index] == 0 then 
		if gazp[index-1] ~= nil then 
          gazp[index] = gazp[index-1]
		end 		
	  end 
	else  
      gazp[index] = gazp[index-1]	
	end 		

end 

  if imoex2[index]~= 0 then 
    otn[index] = gazp[index]/imoex2[index]
  else 
    otn[index] = 0
  end 

  if imoex2[index]~= nil and gazp[index]~= nil then

    
	  -- SMA1
	  if index == 1 then 
        sum1 = {}
		sma1 = {}  	
		n1 = {}				
		sum1[index] = imoex2[index]
		n1[index]=1	
	  else		
		sum1[index] = imoex2[index] + sum1[index-1]
		n1[index]= n1[index-1] + 1			
		if index > Len1 then 
		  sum1[index] = sum1[index-1] + imoex2[index]
		  sum1[index] = sum1[index] - imoex2[index-Len1]
		  n1[index] = n1[index-1]
        end    		
	  end 
	  
	  -- SMA2
	  if index == 1 then 
        sum2 = {}
		sma2 = {}  	
		n2 = {}				
		sum2[index] = gazp[index]
		n2[index]=1	
	  else		
		sum2[index] = gazp[index] + sum2[index-1]
		n2[index]= n2[index-1] + 1			
		if index > Len2 then 
		  sum2[index] = sum2[index-1] + gazp[index]
		  sum2[index] = sum2[index] - gazp[index-Len2]
		  n2[index] = n2[index-1]
        end    		
	  end 	    

	 
	  -- SMA3
	  if index == 1 then 
        sum3 = {}
		sma3 = {}  	
		n3 = {}				
		sum3[index] = otn[index]
		n3[index]=1	
	  else		
	    if sum3[index-1] == nil then 
		  sum3[index] = 0
		  n3[index] = 1
		else
		sum3[index] = otn[index] + sum3[index-1]
		n3[index]= n3[index-1] + 1			
		if index > Len3 then 
		  sum3[index] = sum3[index-1] + otn[index]
		  sum3[index] = sum3[index] - otn[index-Len3]
		  n3[index] = n3[index-1]
        end  
        end   		
	  end 	 	  
	  
	  
	  if n1[index] ~= nil then 
		if n1[index] ~= 0 then 
		  sma1[index] = sum1[index]/n1[index]
		end  
	  end 
	  
	  if n2[index] ~= nil then 
		if n2[index] ~= 0 then 
		  sma2[index] = sum2[index]/n2[index]
		end  
	  end 	

     
	  if n3[index] ~= nil then 
		if n3[index] ~= 0 then 
		  sma3[index] = sum3[index]/n3[index]
		end  
	  end 
	  

  end

	  	  
      --[[ --]]
   
 --  return otn[index], sma3[index]
 
   if index == 1 then
    prof = {}
	pos = {}
	f = {}
	prof[index] = 0  
	pos[index] = 0  
	f[index] = 0
  else 	
	prof[index] = prof[index-1] 
	pos[index] = pos[index-1]
	f[index] = f[index-1]
  end 	  
  
  if gazp[index] ~= nil and imoex2[index]  ~= nil and
     gazp[index-1]  ~= nil and imoex2[index-1]  ~= nil and
     sma1[index]  ~= nil and sma2[index]  ~= nil and
     sma1[index-1]  ~= nil and sma2[index-1]  ~= nil  
  then 
  
    kf2 = imoex2[index]/gazp[index]
	kf3 = imoex2[index]/otn[index]
  
    f[index] = (imoex2[index] - sma1[index]) +
	    kf2*(gazp[index] - sma2[index]) +
		kf3*(otn[index] - sma3[index])
  
	  if (
	    f[index] > 0 	
        ) and 
		pos[index] ~= 1
	  then -- long 
		pos[index] = 1
	  else   
		if 
	      f[index] < 0 	and 
		  pos[index] ~= -1    
		  --otn[index-1] > sma3[ind1[index-1] ] 
		then -- short
		  pos[index] = -1    
		end 
	  end   
  
  end   
 

  
  -- signals
  if index == Size() then 
   if Settings.sign == 1 then   
    for i = 2, Size() do 
	  if pos[i] ~= nil and pos[i-1] ~= nil then 
	    if pos[i-1] ~= 1 and pos[i] == 1 then
	      SetValue(i, 4, gazp[i])	
	    else	  
	     if pos[i-1] ~= -1 and pos[i] == -1 then
	       SetValue(i, 3, gazp[i])		
	     else
	       SetValue(i, 3, nil)	
	       SetValue(i, 4, nil)	
	     end 
         if pos[i] ~= pos[i-1] and pos[i] == 0 then
		   if pos[i-1] == 1 then 
	         SetValue(i, 5, gazp[i])
           else 	
             SetValue(i, 6, gazp[i])				 
           end 			 
         end  
	    end 
	  end 
    end 
   end	
  end   
  
  -- profit 
  if Settings.prf==1 then  
  
    if pos[index-1] ~= nil then 
      if pos[index-1] == 1 then 
        prof[index] = prof[index-1] +	gazp[index] - gazp[index-1]  
	  end 
      if pos[index-1] == -1 then 
        prof[index] = prof[index-1] +	gazp[index-1] - gazp[index]
	  end 	
	  if pos[index-1] == 0 then 
	    prof[index] = prof[index-1]
	  end 
    end  
    
	return prof[index]
  else   
    if Settings.sign == 1 then   
      return nil 
	else   
	  return imoex2[index]
	end 
  end    
  
  
 

  
end
978 | ★6
11 комментариев
Здравствуйте!.. Посоветуйте пожалуйста какую нибудь литературу чтобы всё это понимать и разбираться во всем этом
Оля «Hare»… (заяц)..., интернет — самая лучшая литература
avatar
Ураааааааааааааааааааааааааааааааааааааааааааааааа!!!!!!!!!!!!!!!!!!!!!!!!!!!!11111 НУ наконец то!!! МЫ заждались!!!
Мультитрендовый, жизнь удалась
avatar
 Теперь нам всем ничего не остаётся как стать богатымии!!! Отмазок больше нет!!!
 Пойду в честь этого посмотрю серию Дюны! Уже 3 дня собирался начать смотреть!
Мультитрендовый, почему именно Дюну?
на базе этой функции F: smart-lab.ru/blog/1089363.php
А все-таки жаль, что нам так и не удалось заслушать начальника транспортного цеха. ©
avatar
3Qu, он в отпуске
avatar
Надо будет комиссии добавить да завтра проверить, но выглядит очень интересно)
avatar

Читайте на SMART-LAB:
Фото
USD/CAD: геополитический кульбит придал силы канадцу
Канадский доллар достиг минимума за несколько месяцев, после чего начал разворачиваться, отыграв часть предыдущих потерь. Пара росла на фоне роста...
ДОМ.РФ выходит на двузначную дивидендную доходность
Наблюдательный совет ДОМ.РФ рекомендовал выплатить дивиденд в размере 246,88 руб. на акцию по итогам 2025 года. Для рынка это сильный сигнал, так...
Фото
Ближайшие события. Как к ним подготовиться инвестору
Предлагаем инвесторам обратить внимание на важные события в России и мире, которые произойдут в ближайшие недели. Есть способы заработать на...
Фото
Основные инвест идеи с выступления Mozgovik в Калининграде + презентации с выступления
Доброго дня! В субботу мы ездили в Калининград, выступали перед годовыми подписчиками, обсуждали стратегию и идеи на рынке акций. Спасибо всем, кто...

теги блога autotrade

....все тэги



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