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

по

Получение котировок и других параметров нашего рынка в google spreadsheets

Для смартлабовца иногда важно вести какие-либо вычисления по бумагам в режиме лайв.
Да, есть DDE в Квике, но у меня например нет такой возможности на работе. А в гуглспредшитс можно заглянуть прямо с телефона. Гораздо мобильнее получается.

Про функцию GOOGLEFINANCE слышали многие, там можно например получить курсы валют или какие-то основные акции. Но например цены и прочие параметры облигаций там не получить.

Итак, у нас есть открытые данные Мосбиржи в виде древовидной структуры, которые лежат по адресу https://iss.moex.com/iss/engines/

Если тыркнуть по ссылке, увидим список основных площадок.

Как с этим работать

Допустим, нам нужны котировки какой-нибудь ОФЗ, например 26222.
Облигации — это у нас фондовый рынок или stock 
Открываем ссылку https://iss.moex.com/iss/engines/stock/markets/ там мы увидим все субрынки фондового рынка. Нам нужны bonds
Идем по адресу https://iss.moex.com/iss/engines/stock/markets/bonds, видим список площадок с различными режимами 

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

Скачиваем исторические данные с tradingview

Так как у tradingview нет API для получения свечей и его разработка не планируется, то приходится изобретать собственные велосипеды. После непродолжительных поисков в гугле был найден сайт, который за 3$ предлагает скачать нужные данные. Для получения свечей требуется всего лишь указать ссылку на торговую идею tradingview, а значит свечи с этой страницы можно распарсить самостоятельно и не платить всяким проходимцам 3 бакса (Это ведь целый месяц новой депозитарной комиссии в Октрытии!!!).

Алгоритм следующий:
1) Заходим в график tradingview, выбираем инструмент и таймфрейм
2) Нажимаем опубликовать, заполняем обязательные поля
3) Нажимаем на замочек в нижнем правом углу, чтобы идея стала приватной и публикуем
4) Получаем ссылку вида https://ru.tradingview.com/chart/VIX/veShLNLq-vix/
5) Вставляем эту ссылку в php скрипт, который можно скачать здесь https://gist.github.com/AphelionDH/ef168f9bcff907245907db07d92004b0
6) Запускаем скрипт
7) ???
8) Profit

Как же отразить сумму переходящего убытка в новой форме декларации 3-НДФЛ?

Всем доброго дня!

Давно не писала ничего, сейчас (как мы знаем) идет горячая пора по декларированию доходов за 2018 год. Срочные консультации – пишите сразу на почту (адрес указан в моем аккаунте).

Итак, один из самых главных вопросов, который волнует сейчас налогоплательщиков – это как же увидеть и отразить переходящий убыток, если форма декларации изменилась и теперь его не видно?

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

Давайте на примере: у вас в 2018 году была получена прибыль по «1530» акции = 620 000 рублей и с нее удержали налог 80 600 рублей. По второму российскому брокеру у вас был получен убыток в 2018 году по коду «1532» (пусть это будут опционы на акции) в размере 850 000 рублей.  И пускай еще был получен убыток за 2016 год по акциям 20 000 рублей.



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

3-Ндфл не могу учесть убыток прошлого года .

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

        Ситуация такая срочный рынок, в 2018 получена прибыль, брокер начислил налог 22000 рублей и удержал. Мне надо учесть убыток 2017 года чтобы налог вернули. Мои действия таковы: взял у брокера справку о доходах и суммах налога  . В доходную часть декларации  вношу сумму дохода по коду дохода,  и там же вношу вычеты также по имеющемуся коду вычета для этого дохода, но потом появляется пустая графа без дохода с вычетом 209, и куда его вносить непонятно. Графа 209 я так понял относится к предыдущему доходу, у которого два вычета 206 и 209 но в декларационном поле только один вычет 206 так куда же писать 209? Также есть графа сумма удержанного налога и я ее заполнил 22000р. Далее вхожу в раздел вычеты, инвестиционные убытки по ЦБ, в разделе Убытки прошлых лет, убытки по операциям с ПФИ. Из другой справки за 2017г. от брокера у меня убыток 52000.Заношу ее туда и получается, что я еще должен. А если в эту графу внести суммированный вычет 209, то все получается в 0 т.е. нет возврата.

         В общем 2 вопроса: куда вписывать вычет 209 и куда вписывать убытки прошлых лет.


Судак-Тудак (робот)

Алгоритм данной торговли был описан уважаемым Гном  (https://smart-lab.ru/blog/499606.php) и, поскольку я являюсь любителем различных теорий Мартингейла и усреднения, написал робота по этой стратегии.

Подробно на алгоритме останавливаться не буду — читайте по ссылке у Гнома, там очень хорошо всё расписано.

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

Если полетит против нас вертикально, мы хотя бы не будет бессмысленно открывать кучу сделок на мгновенной длинной вертикальной палке.

Итак, представляю: «Судак-Тудак» Универсальный (одновременно для акций и фьючерсов).

Судак-Тудак (робот)

Если хотите добавить инструменты (а они добавляются в массив aTickerList), не забудьте вписать их данные в массивы:



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

Инструкция: Подаем налог по зарубежному счету

На выходных заполнял декларацию и решил заодно написать инструкцию как подавать 3-НДФЛ по зарубежному счету.

В отличие от российских счетов, где брокеры выступают налоговыми агентами, по зарубежному счету инвестор обязан подавать налог самостоятельно, заполняя 3-НДФЛ и подавая ее в налоговую до 30 апреля.

В дополнение к инструкции написал немного про то, как следует выбирать зарубежного брокера и привел несколько лайфхаков/своих файлов, которые помогут вам сэкономить на подаче декларации.

Как выбрать зарубежного брокера?

1) Смотрите на комиссии и покрытие зарубежных рынков (в идеале не только США, но и LSE/Азию, где обращаются некоторые российские компании). Помните про комиссию вашего банка за перевод за рубеж.

2) Обязательно — наличие лицензии SIPC. (это вещь как российское АСВ, я бы не понес деньги в банк, который не участвует в системе страхование вкладов)

3) Обратите внимание чтобы у брокера не было «банковского функционала», тогда вам не надо уведомлять об открытии такого счета налоговую и отчитываться особым образом.



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

Доработал zigzag5

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

Доработал zigzag5
код индикатора:
Settings=              
        {                          
            Name = "Zigzag5",   -- название индикатора
            delta=2,                  -- параметр индикатора                          
            deltaY=1,                  -- параметр индикатора   			
            linedeltaY=0.75,                  -- параметр индикатора   				
            line=                                     
                {                               
                    {  
                        Name = "zigzagline3",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,255, 0)
                    },
                    {  
                        Name = "upline",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
                    {  
                        Name = "lowline",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 255)
                    },
                    {  
                        Name = "declineline",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
                    {  
                        Name = "upline2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(255,0, 0)
                    },
                    {  
                        Name = "lowline2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 255)
                    },
                    {  
                        Name = "declineline2",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(255,0, 0)
                    }				
                }
       }
	
	
function getradius(x, y)
  return math.sqrt(Settings.deltaY*y*y+x*x)
end

function koef(val)
  return 1 - 1/(1-1/val)
end


function Init()

  vMin = 0
  vMax = 0
  vMinindex = 0
  vMaxindex = 0
  voldMinindex = 0
  voldMaxindex = 0
  upval = 0
  lowval = 0
  upindex = 1
  lowindex = 1  
  veu = nil
  vel = nil
  curfrom = 1
  curto = 1

  return 7
end


function OnCalculate(index)
  local printz = 0
  vsize = Size()	  

  ve = nil
  veu = nil
  vel = nil 
  curv = nil 
  veu2 = nil
  vel2 = nil 
  curv2 = nil  
  
  if index == 1 then
    vMin = C(index)
    vMax = C(index)
    vMinindex = index
    vMaxindex = index
    voldMinindex = index
    voldMaxindex = index
    ve = C(index)  
	  
  else
         
    if voldMaxindex >= voldMinindex then
        
       
	  if C(index) > (1 + Settings.delta/100)*vMin then
         
        vMin = C(index)  
        vMax = C(index) 
        vMaxindex = index
        voldMinindex = vMinindex 
        vFrom = voldMaxindex  
        vTo = vMinindex
        printz = 1		
		
        if (C(vMinindex) > C(vsize)) and (upval > koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))) then
		  upval = koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))
		  upindex = vMinindex
		end
        if (C(vMinindex) < C(vsize)) and (lowval > koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))) then
		  lowval = koef(getradius(vsize - vMinindex, C(vMinindex) - C(vsize)))
		  lowindex = vMinindex
	   end	
	   
	    curfrom = voldMaxindex
	    curto = voldMinindex	  	   
	      	    
      else      
	  
        if vMin > C(index) then
          vMin = C(index)
          vMinindex = index
          vFrom = voldMaxindex      
          vTo = index
          printz = 0
		  curto = index		
        else
          vFrom = vMinindex 
          vTo = index
          printz = 0
        end 		
	  
	    curfrom = voldMaxindex	
		
      end
	 
 	 
    else
     
    if voldMaxindex <= voldMinindex then
	  
      if C(index) < (1 - Settings.delta/100)*vMax then
	     	  
        vMax = C(index) 
        vMin = C(index)  
        vMinindex = index
        voldMaxindex = vMaxindex
        vFrom = voldMinindex
        vTo = vMaxindex
        printz = 1
	
        if (C(vMaxindex) > C(vsize)) and (upval > koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))) then
		  upval = koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))
		  upindex = vMaxindex
		end                   
        if (C(vMaxindex) < C(vsize)) and (lowval > koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))) then
		  lowval = koef(getradius(vsize - vMaxindex, C(vMaxindex) - C(vsize)))
		  lowindex = vMaxindex
		end		
		
	    curfrom = voldMinindex		
	    curto = voldMaxindex
		
      else 
	    	    
        if vMax < C(index) then
          vMax = C(index)
          vMaxindex = index
          vFrom = voldMinindex    
          vTo = index
          printz = 0
		  curto = index		
        else  
          vFrom = vMaxindex  
          vTo = index        
          printz = 0
        end
		
	    curfrom = voldMinindex
		
      end  

	
    end
    end
 
    if (printz == 1) or (Size() == index) then
      for i = vFrom, vTo do
        k = (C(vTo)- C(vFrom))/(vTo- vFrom)
        v = i*k + C(vTo) - vTo*k
        SetValue(i, 1, v)
        ve = v
      end   
      if (Size() == index) then
        ve = C(index)
        if voldMaxindex >= voldMinindex then
          vFrom = voldMaxindex 
          vTo = vMinindex
        end 
        if voldMaxindex <= voldMinindex then  
          vFrom = voldMinindex
          vTo = vMaxindex
        end 
        for i = vFrom, vTo do
          k = (C(vTo)- C(vFrom))/(vTo- vFrom)
          v = i*k + C(vTo) - vTo*k
          SetValue(i, 1, v)
        end  
           
        -- up level line 
        if upindex ~= nil then
		  if C(upindex) > C(index) then		
            for i = upindex, index do
              SetValue(i, 2, C(upindex))
              SetValue(i, 5, C(upindex)-Settings.linedeltaY*C(vsize)/100)			  
            end  	
            veu = C(upindex)	
          end 		  
		end
		
		-- low level line 
		if lowindex ~= nil then
		  if C(lowindex) < C(index) then
            for i = lowindex, index do
              SetValue(i, 3, C(lowindex))
              SetValue(i, 6, C(lowindex)+Settings.linedeltaY*C(vsize)/100)				  
            end  			
            vel = C(lowindex)
         end
       end		
        
       if voldMaxindex >= voldMinindex then     
	    vsign = -1
		if curfrom == voldMinindex then
		  vsign = -1
		end
		if curfrom == voldMaxindex then
		  vsign = 1
		end		

        -- inclined line
	    if curto- curfrom > 0 then
	     maxcurv = 0
	     k = (C(curto)- C(curfrom))/(curto- curfrom)
         for i = curfrom, curto  do        
          curv = i*k + C(curto) - curto*k	
          if vsign == -1 then  		  
 		    if L(i) < curv then
		      if maxcurv < curv - L(i) then
		        maxcurv = curv - L(i)
              end
            end
		  else
 		    if H(i) > curv then
		      if maxcurv < H(i) - curv then
		        maxcurv = H(i) - curv
              end
            end		  
		  end
         end   		
         for i = curfrom, index  do
          curv = i*k + C(curto) - curto*k + vsign*maxcurv	  
          SetValue(i, 4,curv)
		  curv2 = curv+ vsign*Settings.linedeltaY*C(vsize)/100
		  SetValue(i, 7,curv2)		  
         end   		
	    end
	    curv = nil	
	   end 
	  
       if voldMaxindex <= voldMinindex then
	    vsign = -1
		if curfrom == voldMaxindex then
		  vsign = 1
		end		
		if curfrom == voldMinindex then
		  vsign = -1
		end			
  
        -- inclined line
        if curto- curfrom > 0 then
         maxcurv = 0
         k = (C(curto)- C(curfrom))/(curto- curfrom)
         for i = curfrom, curto  do        
          curv = i*k + C(curto) - curto*k		  
          if vsign == -1 then  		  
 		    if L(i) < curv then
		      if maxcurv < curv - L(i) then
		        maxcurv = curv - L(i)
              end
            end
		  else
 		    if H(i) > curv then
		      if maxcurv < H(i) - curv then
		        maxcurv = H(i) - curv
              end
            end		  
		  end
         end   		
         for i = curfrom, index  do
          k = (C(curto)- C(curfrom))/(curto- curfrom)
          curv = i*k + C(curto) - curto*k + vsign*maxcurv	  		
          SetValue(i, 4,curv)
		  curv2 = curv+ vsign*Settings.linedeltaY*C(vsize)/100
		  SetValue(i, 7,curv2)
         end   		     
        end
	    curv = nil		
       end	  
	          
      end
    end

  end  
  
  return ve, veu, vel, curv, veu2, vel2, curv2  
  
end



  • обсудить на форуме:
  • Quik Lua

zigzag5 переработал алгоритм горизонтальных уровней

zigzag5 модернизировал чтоб горизонтальные уровни рисовались более интеллектуально

zigzag5 переработал алгоритм горизонтальных уровней
zigzag5 переработал алгоритм горизонтальных уровней

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

Индикатор ожидаемого движения для опционной торговли (Часть 2 устройство индикатора)

    • 05 апреля 2019, 11:25
    • |
    • FZF
  • Еще

В первой части мы рассмотрели «теорему о средней волатильности» где,  обозначили такое свойство:волатильности могут на разных таймфреймах значительно отличаться друг от друга. Но они всегда будут со временем сходится к одному  значению.

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

Price Channel (PC) или ценовой канал. Индикатор представляет из себя две линии, которые ограничивают канал колебаний цены. Верхняя граница канала обозначает уровень локального максимума за прошедшие N периодов, а нижняя граница – уровень локального минимума за тот же промежуток времени. Таким образом, цена ограничивается максимальными точками колебаний – экстремумами за N периодов.
Индикатор ожидаемого движения для опционной торговли (Часть 2 устройство индикатора)



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

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