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

по

Индикатор уровней и каналов 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

 





Научиться можно всему

Тут возникла тема, что обладатели некоторых профессий считают себя небожителями. Скажу, что научиться можно всему и далеко не так невозможно, как думают обладатели сакральных знаний.
Мы привыкли, например, к подобной сакральности музыкантов. Они учатся лет по 10 — музшкола, консерватория. Я лично ни одной ноты не знала. Мне стало интересно, а когда мне интересно, я погружаюсь в тему как экскаватор в землю, правда, бросаю, когда интерес пропадает. Я за пару-тройку месяцев прошла галопом несколько книг по теории музыки инаписала пару партитур на 1 и 2 мин, которые отослала на конкус. Партитуры были как у больших — на оркестр, я даже валторны транспонировала и пр. Я не прошла даже отборочный тур, но конкурс был международный и даже в отборочный тур прошла сотня партитур из более 1000 из множества стран мира. Из России было 200!!! партитур, хотя конкурс прводила местная московская филармония и приз был очень большим, а участие бесплатное, чего в международных конкурсах почти не бывает.

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

Выплаты на ребенка для инвестора – ФНС дала «добро»

Добрый день, друзья.

Мне недавно задавали вопрос – как правильно рассчитать сумму дохода на каждого члена семьи, чтобы получить ежемесячные выплаты на ребенка от 3 до 7 лет? Дело в том, что у инвестора порой сумма дохода «космической» величины, а налоговая база (прибыль) маленькая. Какую сумму надо применять для расчета?

Я обращалась с соцзащиту – даже пришлось немного поругаться, они строго используют только «доходы», без расходов. Но это глупо и неверно, логика отсутствует окончательно. И сегодня увидела долгожданное письмо ФНС России, я его опубликовала у себя…

По мнению ФНС России, сумму дохода, полученного физическим лицом, в частности, по операциям с ценными бумагами, обращающимися на организованном рынке ценных бумаг (код дохода 1530), следует определять с учетом понесенных расходов по операциям с ценными бумагами, обращающимися на организованном рынке ценных бумаг (код вычета 201).



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

Всепогодный портфель — вариант «пассивного» инвестирования? Разбираемся

Всепогодный Портфель (ВП) стабилен к любым волнениям на рынке, его средняя по году волатильность в два раза ниже, чем у S&P 500 (7,68% ВП - 15,37% S&P 500).

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

В этой связи, данная всепогодная стратегия подходит для пассивных «ленивых» инвесторов, для инвесторов, которые ищут «кнопку бабло» этот пост скорее всего будет не интересен!

Ну что, начнем разбираться

Идея создания All weather portfolio — всепогодного портфеля, принадлежит инвестору Рэю Далио. В 90-е годы его личный капитал вырос настолько, что для управления им пришлось сформировать отдельную трастовую компанию.

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



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

Фортс: проскальзывания в этом году

При моём методе торговли рыночными ордерами по стакану наиважнейшее значение имеет знание реального проскальзывания.
Эталонная цена для меня это закрытие завершенной (предыдущей) минуты. Как только минута закрылась и клоуз определился,
если есть сигнал на трейд, то у меня в стакан кидается лимитная заявка по биду-0,2% или по аску+0,2%. Ну и получается какая-то цена сделки.
От каждого трейда я измеряю проскальзывание.
Получилась любопытная статистика в этом году:
Фортс: проскальзывания в этом году
Это в одну сторону из без учета комиссий брокера и биржи.
Самый скользкий оказался брент. Однако! По нему в тестах мне надо закладываться на -0,04% с каждого трейда.
Самый нескользкий это сишка (что не неожиданно). По ней в тестах надо учитывать хотя бы -0,01% с трейда.

Такие дела.

Вообще по ощущениям ликвидность стала какой-то умной, если её сравнивть даже с 5-летней давностью.
Часто там, где у меня идут трейды, ликвидность становится хуже, чем в те моменты, когда я просто глазами смотрю на стакан.



Парсинг текущего значения цены акций Python.

 
Захотелось реализовать несколько идей для быстрого расчета по позициям акций и  для этого мне нужно было чтобы скрипт на python постоянно получал обновленное значение цены. Например раз в три секунды. Искал решение и нашел похожий пример с парсингом любой информации в интернете на python с применением блиотек requests и beautiful soup, (bs4)


На примере тикера GAZP продемонстрирую как можно спарсить текущий курс (например с гугла.)

 Кому лень читать всё что я тут написал можно скопипастить полный код в конце статьи :)


Парсинг текущего значения цены акций Python.



Для начала нужно установить нужные библиотеки, в консоли пишем : 
 

pip install requests bs4
 

Теперь перейдем к коду. 

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

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

Прохладный пост о системной торговле. Тестируем торговые идеи на Python бесплатно и без зауми с библиотекой PQR.

Привет, почти 2 месяца назад мы запустили первую версию нашей библиотеки PQR для тестирования инвестиционных идей. Основная суть: системно проверять аномалии на большой группе акций. Например, вы ведете таблицы с мультипликаторами компаний и биржевых котировок. Цель — покупать 10% недооцененных бумаг с наименьшим значение P/E и ребалансировать портфель раз в месяц.

Прохладный пост о системной торговле. Тестируем торговые идеи на Python бесплатно и без зауми с библиотекой PQR.


Разделов для улучшения было так много, что Андрей (github.com/eura17) почти полностью переписал все функции. Основные изменения:

1) Переход к объектно-ориентированному программированию. Код легче читается и занимает меньше места.

2) Добавили функцию correct_matrices — она приравнивает матрицы с исходными данными к одному виду. Сортирует и удаляет отсутствующие в остальных матрицах столбцы (акции) и строки (периоды);

3) Появилась документация на readthedocs: pqr.readthedocs.io/en/latest/index.html

4) Возможность перебора параметров стратегии через grid_search. Быстрый вывод таблицы с результатами или отдельного параметра (например, Шарп) для стратегий с разными периодами наблюдения, удержания и лагом;



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

Биткоин? У меня ксть!

    • 03 июля 2021, 13:13
    • |
    • Petrov
  • Еще

Биткоин? У меня ксть!

Я покупал (и продавал) Биткоин
Я покупал (продавал) другую крипту
Никогда не работал с криптой
Я майню Биткоин (крипту)
Крипта - лохотрон
Другое. Будет время, напишу в комментариях
Всего проголосовало: 463
Всем. Привет.
: р))
Влез тут в разговор умных людей про Биткоин.
Пожаловался, что в 2015-м не мог его купить.
Схемы мне не показались надёжными...
Но специалисты заявили, что всё норм. Р2р...
Короче, проблем нет. Платишь деньги и владеешь.
; р))
Так вот вопрос — кто из наших покупал Биткоин?
Или другую крипту?

И каким способом? (Чиркните одной фразой в комментариях))).

Всем СПАСИБО.
И хороших вызодных.
; р))

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

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