Избранное трейдера klimvv

по

Тем, кто думает, что деревья растут до небес.

    • 05 сентября 2021, 09:53
    • |
    • master1
      Smart-lab премиум
  • Еще
Очень полезно побывать в огромном неработающем заводском цеху. Запускать то нерентабельно.
Посетить здание заводоуправления с обвалившейся после зимы штукатуркой. Денег то топить не было. Да и людей перевели в другое здание.

И просто в обычном работающем цеху не вредно побывать.

Служба в армии тоже помогает. Порядки одинаковые.

Шагая по новой московской плитке этого не видно.

Были в цеху?

Доллар УПАДЁТ до какого уровня?

Доллар УПАДЁТ до какого уровня?

Чооооо????!!!!!!!
72₽
71₽
70₽
69₽
68₽
67₽
66₽
65₽
64₽
63₽
62₽
61₽
60₽
Всего проголосовало: 754
Судя по предыдущему опросу, примерно треть участников в такой сценарий не верит. 
А если вы верите в обвал доллара, то укажите предполагаемый уровень. 
Я думаю, что ниже 60₽ не упадёт.



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

Тинькофф банк никогда не будет для меня банком

На днях решил приобщиться к @Тинькофф 

Несколько лет порывался это сделать, но каждый раз стечение обстоятельств отводило от этого действия, и не зря.

Из опыта когда что-то не получается с первого раза или какие то туманные сомнения возникают — всегда это того не стоит.
Так и вышло с этим банком. ОНО ТОГО НЕ СТОИТ!!!

Так вот, заполнил онлайн форму на получение дебетовой карты.  Что за карта? Вот её описание

Тинькофф банк никогда не будет для меня банком
Перейдя по «оформить карту» заполнил форму, где конкретно было указано, что заказывается ДЕБЕТОВАЯ КАРТА.

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

Подписал анкету-заявление на получение этой дебетовой карты. Пообщался с курьером, который под разным сосусом пытался втюхать мне брокерский договор. Но мне это было не надо, о чем ему четко было сказано НЕ НУЖЕН! Еще предлагал сотовую связь.Удивлен, что этот договор мне не подсунул — видимо понимал что придется симкарту передать, и хоть все в спешке делал, но это я бы уж точно заметил.



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

Улучшаем доходность ОФЗ

    • 02 сентября 2021, 16:11
    • |
    • А. Г.
      Проверенный аккаунт
  • Еще

Эта задача встала передо мной случайно. Ко мне обратились хорошие знакомые с вопросом: «Можно ли на ближайший год разместить 0,5 млн. руб. под ставку 6%?».  Их собственное исследование ставок депозитов в Сбербанке, ВТБ и Тинькоффе не привело к результату больше 4,5% годовых, а менее крупные банки они рассматривать не хотят по причине рисков.

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

В принципе задача несложная: у ОФЗ 26209 (321 день до погашения)   сегодня доходность к погашению ~6,7% годовых. Правда с учетом нынешних налогов на купоны получится меньше, но все же больше 6% годовых.

Но мы все помним, что даже короткие ОФЗ могут просаживаться на повышении ставок (цифры будут ниже), а тут мы имеем дело с людьми, которые привыкли как в банках: в любой момент можно снять вклад, потеряв только  проценты. Что делать?

Ну первая идея пришла в голову сразу, так как она мною используется давно при построении облигационного бенчмарка:



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

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


Подкорректировал индикатор

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


--[[
индикатор: 
канал на последнем зигзаге
индикатор строит канал по зигзагу, показывает слом тренда при выходе цены за границы канала
параметры:
  Procent - величина зигзага в %
  k - коэффизиент ширины канала
  Ext - =0-канал стоится по средним =1-канал стоится по экстремуму
--]]
Settings=              
        {                          
            Name = "Zigzag_channel_fast",   -- название индикатора
            Procent=5,               -- величина зигзага в % 
            k=2,			         -- коэффизиент ширины канала
            Ext=1, -- =0-канал стоится по средним =1-канал стоится по экстремуму
            shif=0,			
            line=                                     
                {                               
                    {  
                        Name = "zigzagline",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(120,90, 140)
                    },
					{  
                        Name = "cur1",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 0)
                    },
					{  
                        Name = "cur2",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,200, 200)
                    },
					{  
                        Name = "cur3",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(200,200, 0)
                    },
					{  
                        Name = "cur4",
                        Type =TYPE_LINE,
                        Width = 1,
                        Color = RGB(0,0, 0)
                    },
					{  
                        Name = "cur5",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(0,0, 255)
                    },
					{  
                        Name = "cur6",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
					{  
                        Name = "cur7",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
					{  
                        Name = "cur8",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
					{  
                        Name = "cur9",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
					{  
                        Name = "cur10",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    },
					{  
                        Name = "cur11",
                        Type =TYPE_LINE,
                        Width = 2,
                        Color = RGB(255,0, 0)
                    }
                }
       }


function Init()

  y1 = nil
  y2 = nil
  y3 = nil  
  x1 = 1
  x2 = 1
  x3 = 1
  
  oldindex = 1
  
  a_01 = 0
  b_01 = 0
  a_02 = 0
  b_02 = 0
  
  vminus_01 = 0
  vplus_01 = 0  
  vminus_02 = 0
  vplus_02 = 0  
  vFrom_01 = 1
  vTo_01 = 1
  vFrom_02 = 1
  vTo_02 = 1
  
  vminus = 0
  vplus = 0
  vminus_n = 0
  vplus_n = 0  
  
  ret = 0
  
  last_ind = 1

  v1=nil
  v2=nil
  v3=nil
  v4=nil
  v5=nil
  v6=nil
  v7=nil
  v8=nil
  v9=nil
  v10=nil
  
  return 10
end

function recalcline(num, index, rec)

 if index == Size()-sh and rec == 0 then
   for i = 1, index do
     if m == 1 then 		
	   SetValue(i, 3, nil)
	   SetValue(i, 4, nil)
	 end
     if m == 2 then 		
	   SetValue(i, 6, nil)
	   SetValue(i, 7, nil)
	 end 	 
   end 
 end 

 if index == Size()-sh or rec == 1 then
	
  if num == 1 then 
	  vFrom = 0 --[[ --]] 
	  vTo = 0
	if x3 < x2 then 
	    vFrom = x3
	    vTo = x2
	  else
	    vFrom = x2
	    vTo = x3
	  end 
  end
  if num == 2 then 
	  vFrom = 0
	  vTo = 0
	  if x1 < x2 then 
	    vFrom = x1
	    vTo = x2
	  else
	    vFrom = x2
	    vTo = x1
	  end 
  end    
  
      if vFrom < 1 then
	    vFrom = 1
	  end 	
  
	  a1 = 0
	  a2 = 0
	  a3 = 0
	  a4 = 0
	  n = 0
	  a = 0
	  b = 0
      for i = vFrom, vTo do
        n=n+1	  
	    a1 = a1+i*C(i)
	    a2 = a2+i
	    a3 = a3+C(i)
	    a4 = a4+i*i	
	  end
	  if((n*a4 - a2*a2) ~= 0) then	  
	  
	  -- if oldindex ~= Size() then
	   a = (n*a1 - a2*a3)/(n*a4 - a2*a2)
	   b = (a3 - a*a2)/n

	   vminus = 0
	   vplus = 0
	   vminus_n = 0
	   vplus_n = 0
       for i = vFrom, index do
        y = a*i + b		
		if i>0  then 
		if C(i) < y and i <= vTo then
		  if ex == 0 then 
	        vminus = vminus + y - C(i)
            vminus_n = vminus_n + 1	
		  else 
		    if i == vFrom then 
			  vminus = 0
			end
            if y-C(i) > vminus then
              vminus = y-C(i) 			
            end				
		  end 
        end	
        end		
		if i>0  then 
		if C(i) > y and i <= vTo then
		  if ex == 0 then 
	        vplus = vplus + C(i) - y
	        vplus_n = vplus_n + 1
		  else 
		    if i == vFrom then 
			  vplus = 0
			end		  
            if C(i)-y > vplus then
              vplus = C(i)-y 			
            end			
		  end 
		end 
		end  
        m = 0
        if C(vTo) >	C(vFrom) and y < C(vTo)+0.1*(C(vTo)-C(vFrom)) and y > C(vFrom)-0.1*(C(vTo)-C(vFrom)) then
          m = 1
		end 	
        if C(vTo) <	C(vFrom) and y < C(vFrom)+0.1*(C(vFrom)-C(vTo)) and y > C(vTo)-0.1*(C(vFrom)-C(vTo)) then
          m = 1
		end 
        if m == 1 then 		
	      --SetValue(i, 2, y)
        end 		
	   end
	   --end
	  
	   if ex == 0 then  
	    if vminus_n ~= 0 then
	     vminus = kk*vminus/vminus_n          
	    end 
	    if vplus_n ~= 0 then
	     vplus = kk*vplus/vplus_n          
	    end 
	   end 	  
      end

  if num == 1 then 
    a_01 = a
    b_01 = b 
    vminus_01 = vminus
    vplus_01 = vplus
	vFrom_01 = vFrom
    vTo_01 = vTo
  end
  if num == 2 then 
    a_02 = a
    b_02 = b  
    vminus_02 = vminus
    vplus_02 = vplus
	vFrom_02 = vFrom
    vTo_02 = vTo	
  end  
  return 1 
 end
 
 return 0
end 

function levels(x, y, num, index)

  if y ~= nil and x ~= 1 then 
  
    for i = 1, index do	
	  if i > x then 
	    SetValue(i, num, y)
      else 		
	    SetValue(i, num, nil)
	  end 
    end
	
  end 

end


function OnCalculate(index)
  
  de = Settings.Procent
  kk = Settings.k 
  ex = Settings.Ext
  sh = Settings.shif
  
  v1=nil
  v2=nil
  v3=nil
  v4=nil
  v5=nil
  v6=nil
  v7=nil  
  v8=nil
  v9=nil
  v10=nil  
  
  if index > Size()-sh then  
    --return nil, nil, nil, nil, nil, nil, nil 	 
    return v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 
  end 
  
  vl = C(index)
  if vl~=nil then 
   if index == 1 then 
	y1 = vl
    y2 = vl
   else   
	  if C(index) > y1*(1+de/100) and y1 < y2 then 
	    x3 = x2
	    x2 = x1
		y3 = y2
	    y2 = y1	
	    x1 = index 
	    y1 = C(index)	
        ret = recalcline(1, index, 0)
        ret = recalcline(2, index, 0)   
        levels(x1, y1, 8, index)		
		levels(x2, y2, 9, index)
		levels(x3, y3, 10, 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 
	    x3 = x2
	    x2 = x1
		y3 = y2		
	    y2 = y1
	    x1 = index 
	    y1 = C(index)	  	
        ret = recalcline(1, index, 0)
        ret = recalcline(2, index, 0)
        levels(x1, y1, 8, index)		
		levels(x2, y2, 9, index)
		levels(x3, y3, 10, index)
	  end 	
	  if C(index) < y1 and C(index) < y2 then 
	    x1 = index 
	    y1 = C(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 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 
  

 	--]]

	if index == Size()-sh and ret == 0 then
    
        ret = recalcline(1, index, 1)
        ret = recalcline(2, index, 1)	
		
		levels(x1, y1, 8, index)		
		levels(x2, y2, 9, index)
		levels(x3, y3, 10, index)
    
    end 	
	
	
	
	if index == Size()-sh  then  --- and index ~= last_ind
		  
	   if vTo_01 - vFrom_01 > 500 then
         vFrom_01 = vTo_01-500 
       end 	  
	   
       for i = 1, index do		   		
	     SetValue(i, 3, nil)	
         SetValue(i, 4, nil)	 
	     SetValue(i, 6, nil)	
         SetValue(i, 7, nil)			 
       end	   
		  
       for i = vFrom_01, index do
        y = a_01*i + b_01 + vplus_01		
        m = 0
        if C(vTo_01) >	C(vFrom_01) and y < C(vTo_01)+0.3*(C(vTo_01)-C(vFrom_01)) and y > C(vFrom_01)-0.3*(C(vTo_01)-C(vFrom_01)) then
          m = 1
		end 	
        if C(vTo_01) <	C(vFrom_01) and y < C(vFrom_01)+0.3*(C(vFrom_01)-C(vTo_01)) and y > C(vTo_01)-0.3*(C(vFrom_01)-C(vTo_01)) then
          m = 1
		end 
        if m == 1 then 		
	      SetValue(i, 3, y)
		  if i == index then 
		    v3 = y 
		  end 
        end 	
		
        y = a_01*i + b_01 - vminus_01		
        m = 0
        if C(vTo_01) >	C(vFrom_01) and y < C(vTo_01)+0.3*(C(vTo_01)-C(vFrom_01)) and y > C(vFrom_01)-0.3*(C(vTo_01)-C(vFrom_01)) then
          m = 1
		end 	
        if C(vTo_01) <	C(vFrom_01) and y < C(vFrom_01)+0.3*(C(vFrom_01)-C(vTo_01)) and y > C(vTo_01)-0.3*(C(vFrom_01)-C(vTo_01)) then
          m = 1
		end 
        if m == 1 then 		
	      SetValue(i, 4, y)
		  if i == index then 
		    v4 = y 
		  end 
        end 			
	   end	  
	    
	   if vTo_02 - vFrom_02 > 500 then
         vFrom_02 = vTo_02-500  
       end 	 
	  
       for i = vFrom_02, index do
        y = a_02*i + b_02 + vplus_02		
        m = 0
        if C(vTo_02) >	C(vFrom_02) and y < C(vTo_02)+0.1*(C(vTo_02)-C(vFrom_02)) and y > C(vFrom_02)-0.1*(C(vTo_02)-C(vFrom_02)) then
          m = 1
		end 	
        if C(vTo_02) <	C(vFrom_02) and y < C(vFrom_02)+0.1*(C(vFrom_02)-C(vTo_02)) and y > C(vTo_02)-0.1*(C(vFrom_02)-C(vTo_02)) then
          m = 1
		end 
        if m == 1 then 		
	      SetValue(i, 6, y)
		  if i == index then 
		    v6 = y 
		  end 
        end 	
		
        y = a_02*i + b_02 - vminus_02		
        m = 0
        if C(vTo_02) >	C(vFrom_02) and y < C(vTo_02)+0.1*(C(vTo_02)-C(vFrom_02)) and y > C(vFrom_02)-0.1*(C(vTo_02)-C(vFrom_02)) then
          m = 1
		end 	
        if C(vTo_02) <	C(vFrom_02) and y < C(vFrom_02)+0.1*(C(vFrom_02)-C(vTo_02)) and y > C(vTo_02)-0.1*(C(vFrom_02)-C(vTo_02)) then
          m = 1
		end 
        if m == 1 then 		
	      SetValue(i, 7, y)
		  if i == index then 
		    v7 = y 
		  end 
        end 			
	   end	
	  
	  last_ind = index 
	end 
  
 
    return v1, v2, v3, v4, v5, v6, v7, v8, v9, v10 

end

 





Проектирование ТС. 4. Машинное обучение.

    • 31 августа 2021, 15:40
    • |
    • 3Qu
  • Еще

Ещё с самого начала, в первой части, писал, что проект является экспериментальным, что из него получится я не знаю.Получится — хорошо, не получится — останутся наработки, которые могут пригодиться в дальнейшем.Тем не менее, обещал освещать ход проекта.
На сегодняшний день удалось получить на тестах некоторую незначительную и неустойчивую прибыль. Эти копейки не произведут впечатления на читателя — такое вы и сами получали неоднократно. Даж позориться не хочется.)
Но, что это дало? Это позволило алгоритмически более-менее разграничить области возможных лонгов и шортов.
Дальше есть следующие возможности:
а. Накручивать на ТС различные индикаторы и долго и нудно подбирать их параметры и условия входа в сделку и соответствующую логику.
в. Попробовать использовать для построения ТС методы машинного обучения (МО. Тем более, какие-то наработки в этой области у меня уже есть.
«И так как с детства его влекло к технике, то он всею душою отдался пункту «в» (тайное похищение чужого имущества, совершенное с применением технических средств или неоднократно».© Пункт «в» мне тоже более интересен, однако я совсем не исключаю и параллельного применения элементов из пункта «а».
Для тех, кто не в теме, немного подробней.
Если мы возьмём рыночные данные, каким-то образом их идеально подготовим, попробуем обучить какое нибудь МО (нейросеть (НС), скажем), то мы, скорее всего, сразу получим великолепные результаты. Единственным недостатком этих результатов будет то, что прибыль мы сможем получить только на той истории, на которой мы обучали МО. На реале и даже на другом отрезке истории такая ТС работать скорее всего не будет.
Рыночные зависимости очень неявные, встречаются в ценовом ряду нечасто и выделить их на общем фоне удачных и неудачных сделок не представляется возможным. В результате МО при обучении находит некоторые зависимости или псевдозависимости имеющиеся только в обучающей последовательности, нигде более не встречающиеся и обучается им. Т.е., псевдозависимости оказываются более явными, чем то что мы пытаемся найти.
Как с этим планируется бороться, это, возможно, обсудим уже в следующий раз.


Вопрос к пассивным инвестициям



      Насчет пассивных инвестиций — для новичка на бирже это лучший выход, но я бы не делал из этого символ веры. Звучит он примерно так: «да будет прозревшим, отринувшим грех сток-пикинга и спекуляций, по 5% сверх инфляции до скончания века их, и детям их, и внукам их, и всему роду их, если не впадут в грех».

      Подкопаюсь на примере. Многие, весьма не хитрые торговые алгоритмы, дали в 2020 году по 100% прибыли, на большом плече и побольше (у меня самого такие есть). Честный трейдер тут признает некую исключительность года и никогда не скажет «стабильно делаю 100% годовых». Он скажет лишь, что имеет хорошие шансы побить индекс и депозит в долгосроке, если не надоест колупаться, то методы есть. Факт 100%, конечно, не отрицает, но с оговоркой, что год на год не приходится… Новичок или инфоцыган будет экстраполировать — «гарантированная доходность по 100% в год».


      Так вот 20 век с его 5% сверх инфляции для ассет алокейшен и фондовых индексов — это как 2020 год для спекулей. С учетом частоты сделок это как раз здоровая пропорция по тайм-фрейму, где-то на два порядка разница счастливого периода.

      Это экстраполяция самого успешного капитализма в самое успешное время, 19-20 вв. Что может пойти не так, и непременно пойдет, если мы отказываемся верить в экстраполяцию 5% на бесконечность, что противоречило бы даже законам природы?

      1). Демография. У нас в конце 20 века вообще-то фазовый переход, человечество, которое растет по гиперболе, и человечество на плато — это разные экономики.

      2). Концепция «устойчивого развития». Ведущие капиталисты планеты, кажется, собрались бороться с капитализмом, ограничивать потребление, и это то, чего еще не было. И это снова плохие новости.

     3). Налоги. Социализм снова на марше. Отсылаю к Пикетти, там прогрессивные борцы за все хорошее против всего плохого собрались вводить чуть ли не 2% годового налога на любой капитал. Иногда это секта бывает очень успешна в своих хотелках, см. историю.

     4). Просто черные лебеди, которые в 19-20 вв. летали за капитал, а могут начать против.

     Для меня даже не вопрос, кончится ли «период 5% реальной пассивной доходности», вопрос лишь, когда, и хватит ли на наш век. Но даже и сейчас — это не 5%. Учтите текущие налоги, в том числе — налог на дивиденды. Учтите комиссии. Учтите, что на хаях эквити в рынок заносят больше, чем на лоях, и не только потому, что жадность и страх — на хаях эквити у людей просто больше свободных денег (в 2007, чем в 2008-2009, например).

      То есть апологеты пассивного инвестирования зачастую позволяет себе то, что они презирают и отлично видят у активных управляющих — курвафиттинг исторического бэк-теста, ошибку выжившего, и некорректную экстраполяцию. После чего, разоблачив жулье с их 500%, делают тот же фокус со своими скромными 5%.

      Интеллектуально это схожий подход, «доказано успешной статистикой». Разница в том, что фреймы другие — на таких фреймах, как говорится, или эмир умрет, или ишак сдохнет. Т.е. шансов не опровергнуться при жизни больше, чем у трейдеров и отбирателей лучших бумаг. 



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

Проектирование ТС. 3. Базовые принципы.

    • 28 августа 2021, 16:55
    • |
    • 3Qu
  • Еще
Собственно, все стратегии основаны на принципе: покупай дешево — продавай дорого. Вопрос только в определении понятий — дорого/дешево.
Основной принцип на графике:
Проектирование ТС. 3. Базовые принципы.
Это фьючерс Сбера, 1 м график, по х — минуты. Дешево внизу, дорого вверху. Средняя прибыль ~40 п за сделку.
Я не боюсь, что кто-то что-то украдет, в смысле идей, да, они, собственно, и без меня очевидны. Один из наших коллег на СЛ уже «украл» — работает с этим уже три или 4 года — результат околонулевой. Ну, вы наверное знаете товарисча.)
Вот с этим я сейчас и работаю. Система совершенно другая — старая почти изжила себя — на графике все можно увидеть. Раньше ходы цены были несколько другими.  Сейчас требуются другие подходы к снаряду. Сеточники — не хочу, не нравится мне это, хотя bohemian rhapsody...
Вот, пока, чего не пойму, так это стратегию Мальчика BuyBuy. Может, вообще бы все переделал, если бы понял.))
А вообще, не скрою, я сюда, на СЛ, за идеями пришел. Варясь в собственном соку новые мысли не появятся.



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