Избранное трейдера Андрей из Сибири

по

Индикатор наклонных уровней

сигналом к покупке является пересечение ценой кривой снизу вверх, а на продажу — наоборот.
вход по цене закрытия бара, пересекшего индикатор или цена открытия следующего бара.
в дальнейшем немного поменяю логику

Индикатор наклонных уровней

--[[
параметры: 
Procent - процент зигзага 
--]]
Settings={
Name="ZIGZAGPROF",
Procent=1,
    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)
                    }							
                }
}

function Init()
  
  y1 = nil
  y2 = nil
  x1 = 1
  x2 = 1
    
  return 1
  
end

function OnCalculate(index)

  de = Settings.Procent
  
  delt = 0.01

  vl = C(index)
  if index == 1 then 
	y1 = vl
    y2 = vl
  else   
	  if C(index) > y1*(1+de/100) and y1 < y2 then 
	    x2 = x1
	    y2 = y1	
	    x1 = index 
	    y1 = C(index)	        
	  end 	
	  if C(index) > y1 and C(index) > y2 then 
	    x1 = index 
	    y1 = C(index)	  			  
	  end 
	  	  		
	  if C(index) < y1*(1-de/100) and y1 > y2 then 
	    x2 = x1
	    y2 = y1
	    x1 = index 
	    y1 = C(index)  		
	  end 	
	  if C(index) < y1 and C(index) < y2 then 
	    x1 = index 
	    y1 = C(index)	  			  
	  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 C(curto) ~= nil and C(curfrom) ~= nil then 
      k = (C(curto)- C(curfrom))/(curto- curfrom)  
      for i = curfrom, index  do
        curv = i*k + C(curto) - curto*k  		          
	    SetValue(i, 1, curv)
      end   	
	end 
  end
--]]
    
    lev = nil
	if x1 ~= x2 then  
     
	
	k = (C(x1)- C(x2))/(x1- x2)    
	maxd = 0
    for i = x2, x1  do
      
	  lev = i*k + C(x1) - x1*k  		
	  
	  if  C(x2) > C(x1) and lev <= H(i) 
	  then 
	    if maxd < H(i) - lev  then 
          maxd = H(i) - lev 
		end
        --maxd = 0.5		
      end 
	  
      if  C(x2) < C(x1) and lev >= L(i) 
	  then 
	    if maxd > L(i) - lev  then 
          maxd = L(i) - lev
		end 
		--maxd = -0.5
      end 	  
	  
    end   	
      
    lev = nil 
    --[[if x1 < index 
	  and 
	  (
	  C(x2) > C(x1) and C(x1) < C(index) 
      or 
      C(x2) < C(x1) and C(x1) > C(index) 	  
	 )
	then --]]
      lev = 
	    index*k + C(x1) - x1*k + 
		maxd
	--end   
    
	  
	  
	--[[  
	
	map = 10
	lev = 0
	if index-map+1 > 0 then 
      for i = index-map+1, index  do
        lev = lev + C(i)
      end   		
	  lev = lev/map
	  ma = lev
	end
	
	map = 30
	lev2 = 0
	if index-map+1 > 0 then 
      for i = index-map+1, index  do
        lev2 = lev2 + C(i)
      end   		
	  lev2 = lev2/map
	  ma2 = lev2
	end	

	
	if 
	  C(x2) > C(x1) and C(x1) < C(index) and C(index) > lev and C(index) - C(x1) > C(index)*delt
	  or 
	  C(x2) > C(x1) and C(x1) < C(index) and C(index) > lev2 
	then 
	  lev = C(x1)--*(1-delt)
	  prev = lev        
	else  	
	  if 
	    C(x2) < C(x1) and C(x1) > C(index) and C(index) < lev and C(x1) - C(index) > C(index)*delt
	    or
	    C(x2) < C(x1) and C(x1) > C(index) and C(index) < lev2 
	  then 
	    lev = C(x1)--*(1+delt)
	    prev = lev
	  else
        lev = lev2  
	  end		
    end	

	if 
	  C(x1) > C(x2) and ( lev < C(index) or prev == C(x2) )
	then 
	  lev = C(x2)--*(1+delt)
	  prev = lev
	end
	
	if
	  C(x1) < C(x2) and ( lev > C(index) or prev == C(x2) )
	then 
	  lev = C(x2)--*(1-delt)
	  prev = lev
	end	
	
    if C(x1) < C(x2) and ( lev < C(index) or prev == C(x1) )
	then         	  
	  lev = C(x1)
	  prev = lev
    end
	  
    if C(x1) > C(x2) and ( lev > C(index) or prev == C(x1) ) 
	then         	  
	  lev = C(x1)
	  prev = lev       		
	end
	 --]] 

	
  end   
  
  return  lev
 
  
end



Python: поиск поддержки и сопротивления

Написал тут питонячью библиотечку небольшую для поиска поддержки/сопротивления.

Там пара алгоритмов для поиска уровней, один алгоритм для скоринга и возможность отрисовать уровни на чарте.

Общая концепция такая:
1. Ищем разворотные точки
2. Обучаем Agglomerative Clustering, собираем уровни из точек

Находит оно примерно следующее:
Python: поиск поддержки и сопротивления


Юзайте в общем. Работает на Python 3.6+

Когда не лень выкладываю что-то по трейдингу в телегу

Правила работы с банками.

Тут в личку спрашивают, как мы работаем с банками. Возможно кому то еще пригодится. Речь ниже с позиции вкладов.


Получается  на ознакомление весь комплект документов указанных в договоре, обычно это правила, тарифы, условия и сам договор. Все эти документы нужно внимательно изучить, по всем не понятным моментам (или имеющих двойную трактовку с юр точки зрения) пишеться заявление в банк с перечислением пунктов договора и просьбой разьяснить что имеется ввиду. Договор при этом подписывать не обязательно.

Так как обычно договоры составляют юристы под коксом, таких моментов будет достаточно. Мы лично, если их набирается более 5 пунктов, просто заносим банк в черный список. Нужно привыкнуть к тому,  все что говорится устно должно быть зафиксированно на бумаге. Не верьте на слово сотруднику. Это специфика.

В правилах банки обычно пишут, что могут их поменять в любой момент в одностороннем порядке. Это противоречит судебной практики и законодательству (ст 450 ГК РФ), банк обязан в письменном виде донести до клиента информацию об изменении от тарифов до условии, т.к согласно

( Читать дальше )

последняя версия индикатора vcur

последняя версия индикатора vcur

Settings={
Name="VCUR",
period=50,
periodma=15,
weighted=1,
weightedma=1,
proportional=1,
    line=                                     
                {                               
                    {  
                        Name = "cur1",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(155,0, 0)
                    },	
                    {  
                        Name = "cur2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0,155)
                    },						
                    {  
                        Name = "cur3",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 0)
                    }					
                }
}
--[[

-- кривая объемов
описание свойств:

period: сколько баров берутся в подсчет
weighted: =0 - обычная, =1 - взвешанная
proportional: =1- считается: volume*(close-open)/(hight-low), =0 - считается: volume*sign(close-open)

--]]

function Init()
    
  mas={}	
  return 2
  
end

function OnCalculate(index)
  	
	sumv = 0
	
	wsum = 0
	if index >= Settings.period then 
	  for i=index-Settings.period+1, index do    
        if sumv == nil then
	      sumv = 0
        end	  
	    if C(i-1) ~= nil then
		  wsum = wsum + i-(index-Settings.period)
	      if C(i-1) > O(i-1) then
		    if Settings.proportional == 0 then
		      prop = 1
			else
			  if (H(i-1)-L(i-1)) == 0 then
			    prop = 0
			  else
			    prop = (C(i-1)-O(i-1))/(H(i-1)-L(i-1))
			  end
			end
		    if Settings.weighted == 0 then
              sumv = sumv + prop*V(i-1)
			else
			  sumv = sumv + prop*V(i-1)*(i-(index-Settings.period))--/Settings.period
			end
	      else
            if Settings.proportional == 0 then
		      prop = 1
			else
              if (H(i-1)-L(i-1)) == 0 then
			    prop = 0
			  else			
			    prop = (O(i-1)-C(i-1))/(H(i-1)-L(i-1))
			  end
			end	  
		    if Settings.weighted == 0 then
              sumv = sumv - prop*V(i-1)
			else
			  sumv = sumv - prop*V(i-1)*(i-(index-Settings.period))--/Settings.period
			end
	      end
        end 
	  end 
	else
	  sumv = nil
	end	
	if Settings.weighted ~= 0 then
      if sumv ~= nil then
	    sum =sumv/wsum
	  end
	end	
    mas[index]=sumv
	
	ma = 0
	wsum = 0
	if index >= Settings.periodma then 
	  for i=index-Settings.periodma+1, index do    
	    if mas[i] ~= nil then		  
		    wsum = wsum + i-(index-Settings.periodma)
		    if Settings.weightedma == 0 then
              ma = ma + mas[i]
			else
			  ma = ma + mas[i]*(i-(index-Settings.periodma))--/Settings.periodma
			end
			
		end 
	  end
	end  
	if Settings.weightedma == 0 then
	  if ma ~= nil then
	    ma = ma/Settings.periodma	
	  end
	else	
	  ma = ma/wsum	
	end
     
  return sumv, ma--, 0


end



Горизонтальные объемы

ввел новые свойства в индикатор:
xshift — сдвиг по горизонтали
count — количество черточек по вертикали
period- сколько баров берутся в подсчет
maxline — количество баров для максимальной черточки
width — толщина черточки


т.о. можно на одном графике выставить несколько вертикальных объемов с разными смещениями:

Горизонтальные объемы


Горизонтальные объемы


( Читать дальше )

Инфографика для визуализации данных

Здравствуйте, коллеги!

На глаза попалась интересная статья для визуализации разнообразной информации и данных:
How To Think Visually Using Visual Analogies – Infographic

Привожу основные скрины, в статье описание каждого графика.

Инфографика для визуализации данных
Инфографика для визуализации данных



( Читать дальше )

ИИС типа А. Не всё так просто с возвратом.

Хотелось бы поделиться своим опытом по поводу возврата уплаченного НДФЛ на ИИС типа А (13% от внесенной суммы). Надеюсь, что пост будет полезным. Так же пишу от части для себя, чтоб не забыть как и что делать в 2020 году. :)

ИИС я открыл в 2017 году. Не знаю почему, но возвратом за 2017 год я поленился заниматься в 2018 году(просто собрал документы, но не оформлял). Решил заняться сразу двумя возвратами за 2017 и 2018 уже в 2019. Мы живем в век высоких технологий, поэтому я решил оформлять возврат через личный кабинет на сайте nalog.ru

Итак. Для возврата НДФЛ нам потребуется:
1) Справка 2-НДФЛ за тот год, за который мы хотим оформить возврат.
2) Отчет брокера за год
3) Договор на ведение ИИС
4) Платежные поручения на зачисление денежных средств
5) Аккаунт на госуслугах для входа на сайт nalog.ru.

Несколько комментариев.

1) Справка 2-НДФЛ на моей работе за предыдущий год появляется не раньше конца февраля следующего года. Возможно она появляется только после того, как предприятие подаст декларацию в налоговую (но это не точно). И если справка за 2017 год у меня была на руках, то я с удивлением обнаружил, что справка за 2018 год есть в моём личном кабинете на сайте nalog.ru Поэтому при оформлении возврата за 2018, справку 2-НДФЛ я на работе не заказывал.

( Читать дальше )
  • обсудить на форуме:
  • ИИС

Про дивы

Большинство российских компаний платят дивиденды раз в год. Из-за этого некоторые акции целый год держать неинтересно, особенно, если вы купили их чисто ради дивидендов. Но в то же время часть компаний делится с акционерами прибылью раз в полгода или даже раз в квартал, как принято на западном фондовом рынке. В обзоре ниже – компании, которые стабильно выплачивают ежемесячные дивиденды – квартальные или полугодовые.

Компании, которые выплачивают квартальные дивиденды

Северсталь

НЛМК

ММК

Фосагро

Татнефть

Тинькофф

QIWI

Компании, выплачивающие дивиденды дважды в год

Акрон

ВСМПО-АВИСМА

Газпром нефть

Лукойл

Роснефть

Новатэк

Распадская

Магнит

Алроса

Норникель

Мосбиржа

МТС

Русагро

VEON

Планируют перейти на промежуточные дивиденды

ТМК

Сбербанк

Россети 

Компании, которые выплачивают квартальные дивиденды



( Читать дальше )

....все тэги
UPDONW
Новый дизайн