Избранное трейдера Helicopter Ben

по

Правила рабочего места

Шведские ученые в 2007 году в Стокгольме доказали,
что высота стола должна составлять 72,
а не 75 см., как считалось раньше.
15 лет назад они не были рассчитаны на работу с компьютером,
а сегодня разницу в 3 см. компенсируют высота клавиатуры и мышки.
Ширина должна составлять от 60 до 100 см.
От краев стола до преграды сзади должно быть как минимум 80 см. пространства.
Это необходимо, чтобы иметь возможность откидываться в кресле,
не опасаясь удариться о стену,
и свободно вставать и выходить из-за стола.


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

Клавиатура должна располагаться в 10-15 см. от края стола,
поскольку в этом случае нагрузка приходится не на кисть,
а на более “крепкую” часть предплечья.
Если стол оснащен выдвижной полкой для клавиатуры,
то рабочее место следует комплектовать креслом с регулируемыми по высоте подлокотниками.



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

Перевод ЦБ между брокерами

Алгоритм перевода ценных бумаг (далее по тексту — ЦБ) между брокерами:
1. На счет должны быть куплены ЦБ
2. Подать по телефону поручение брокеру на перевод ЦБ с торгового депозитарного счета на основной депозитарный счет (как правило код счета 17 нулей). В некоторых депозитариях есть возможность делать перевод ЦБ с торгового счета, в таком случае этот пункт пропускаем.
3. Скачать реквизиты с официальных сайтов двух депозитариев (откуда и куда перевод)
4. После того как ЦБ будут переведены на основной депозитарный счет, нужно с паспортом поехать в ваш депозитарий (адрес узнавайте на официальном сайте вашего брокера/депозитария), взять с собой реквизиты куда переводить ЦБ, написать заявление на перевод ЦБ. Если в личном кабинете брокера есть возможность переводить ЦБ дистанционно, то ехать никуда не нужно
5. В этот же день поехать в тот депозитарий куда переводите ЦБ, взять с собой реквизиты откуда переводите ЦБ, написать заявление на прием ЦБ. Если в личном кабинете принимающего брокера есть возможность приема ЦБ дистанционно, то ехать никуда не нужно

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

Про проигрыш на бирже

Сегодня Александр написал:
Заблуждение 13: Если Миша проиграл — то Вася выиграл. Не всегда это верно… скорее всего и Миша проиграл, и Вася проиграл, и Коля тоже проиграл… и даже Пётр Николаевич проиграл.... Вопрос только в том — сколько на это потребуется времени. 96% игроков проигрывают на бирже.
Только 4% — это те счастливчики, которые выигрывают.
Решил дополнить эту картинку свежими данными...
(касается только лишь срочного рынка!)
  • за 2 квартал биржа заработала 643 млн рублей комиссий на срочке.
  • то есть в месяц примерно 214 млн рублей.
  • Надо понимать, что примерно столько же должны были заработать брокеры: получаем 400 млн рублей.
  • доля физиков на срочке = 43%.
  • то есть физики только на срочном рынке проигрывают 172 млн рублей комиссии в месяц.
  • Объем открытых поз на срочке = 600 млрд рублей.
  • Очень грубо предположу, что на это задействовано ГО 60 млрд руб
  • Допустим 43% принадлежит физикам = 26 млрд. руб
  • Если бы физики положили эти бабки в ОФЗ, за месяц они бы заработали 151 млн рублей (оценка скромная, потому что биржа на всех остатках зарабатывала во 2кв в среднем 1,5 ярда в месяц)
Итого, физики за месяц просрали 172 млн на комиссии и 151 млн на упущенная выгода в виде резерва ГО. (грубо).
Как вы видите, тут никакой Вася и Петя не нужны)

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

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

Как найти интересные и полезные статьи на смартлабе?

Смотрите. Дело в том, что реально полезной информации про трейдинг в общем объеме информации — капля в море. И эта информация с годами особо не меняется. Да есть интересные посты, есть интересные авторы, которые ведут интересные блоги, но всё что можно было уже написать, так или иначе написано.

Поэтому для начала вы можете заглянуть в раздел лучшие статьи смартлаба. Эту ссылку всегда можно найти в главном меню:
Как найти интересные и полезные статьи на смартлабе?
Все посты там структурированы по темам. 

Вы также можете зайти в список лучших авторов  — ссылка Люди в главном меню. Там вы найдете вот такие значки - 
Как найти интересные и полезные статьи на смартлабе?

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

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

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

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

--[[
параметры: 
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



Биржевой тренажёр ChartGame, 10 место ($67.28 млрд.)

    • 24 августа 2019, 23:17
    • |
    • Diamond
  • Еще
Ранее ves2010 предложил попробовать 1000 сделок на биржевом тренажёре ChartGame, мне понравилась идея торговли чистого графика без какого-либо фундаментала, без новостей и вообще какой-либо информации, кроме цены и я решил попробовать. В какой-то момент тренажёр начал сокращать капитал без каких-либо причин и мне показалось, что это симуляция брокера-кухни или какой-то баг, но выяснилось, что в тренажёре существует такая вещь как «Lifetime», т.е. вы должны успеть сколотить состояние за 50 лет и у вас есть 2 варианта это сделать: внутридневной трейдинг и среднесрочный свинг-трейдинг. Второй вариант явно выгоднее, но требует особого подхода к оценке риска и управлению капиталом. После слива более 100 депозитов удалось подобрать наиболее живучую торговую систему, которая исключает везение и не наносит ущерб доходности.

В итоге добрался до 10 места, можно попробовать подняться немного повыше, но при ограничении по времени в 50 лет я бы не стал рисковать.

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

По стопам Спирина и его Лежебоки

Обожаю ресурс www.portfoliovisualizer.com, но к сожалению он не так полезен для российского инвестора, как мог бы быть, если бы в нем можно было посмотреть посчитать портфели с российскими активами хотя бы с начала индекса Мосбиржи.
Решил замутить тест сам.

Суть теста в следующем, используем статическую ребалансировку с ценами по итогам года, используя реальную доходность (за вычетом ИПЦ) в рублях.
Активов использовалось 5.

Индекс РТС с дивидендами в рублях (он появился в сентябре 1995, тогда как индекс Мосбиржи на 2 года позже)
Долларовый кэш по курсу ЦБ
Золото по курсу ЦБ
S&P500 с дивидендами в рублях по курсу ЦБ
Индекс потребительских цен (так как облигации в среднем дают схожую доходность, а данных по облигациям и депозитам в рублях с начала 1996 года нет).

Отвечаю на резонный вопрос, где я взял данные по индексу РТС с дивидендами.
Начиная с 2004 го года данные по индексу полной доходности есть на сайте Мосбиржи.
Стартует он со значений простого индекса РТС, соответственно до 2004 года использовался обычный индекс РТС.



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

Минусы ОФЗ

Долго думали и в итоге все же решили не лезть в ОФЗ (как рублевые, так и валютные) на крупные суммы. Альтернатива вклады.

Основные минусы.

1. Долгое погашение купонов, вывод ден средств по 2-3 дня у гос брокеров, комиссии брокера.

Что дает примерно к номинальной ставке минус 0,5% годовых.

Таким образом текущую эффективную ставку в 7% нужно уменьшать до 6,5%. 
В то время, как по вкладам в надежных банках (топ 30) сейчас дают в среднем 7,2-7,4% годовых.


2. Подсудность.

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

Короче, при проблемах гасить вас будут по взрослому. По вкладам все намного проще, подсудность — районный суд, отсутсвие пошлин, 50% штраф по ЗоЗПП.

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

Лучшие книги по финансовым рынкам

Понятно, какого лектора слушать интересно: харизматичного, знающего, успешного в своей области. Но есть одна хитрость: крутой лектор никогда не рассказывает всего, что знает. Во-первых, он хочет, чтобы на его семинар пришли ещё раз (а в случае какой-нибудь “Второй Молодости” это его основная задача). А во-вторых, так он кажется более умным и убедительным.

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

1. The Drunkard’s Walk by Leonard Mlodinow («Несовершенная случайность», Леонард Млодинов). Ничего лучше по теории вероятности, на мой взгляд, не существует: тут всё объяснено доходчиво, последовательно, и при этом настолько интригующе, что многое понимаешь и запоминаешь, ещё не дочитав предложение. Куча живейших примеров из жизни, исторических курьёзов, огромное количество исследований поведения людей перед лицом неопределённости.

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

Camarilla Equation. Индикатор для QUIK. Часть 3.

    • 22 августа 2019, 12:29
    • |
    • XXM
  • Еще
Получил такое сообщение:

привет!
у меня в квике стояла камарилла аж с 2014 года, когда вы выложили здесь этот индикатор.
квик обновился до 8 и камарилла пропала.
это не исправить?

Глянул по тэгу https://smart-lab.ru/tag/Camarilla/ и вот они:
1. Camarilla Equation. Индикатор для QUIK.
2. Camarilla Equation. Индикатор для QUIK. Часть 2.

Выкладываю вариант, не зависящий от обновлений QUIK.

-- Camarilla.lua
Settings={
	Name = "Camarilla",
	period = 'D',
	line =
		{
			{Name = "S5", Color = RGB(255, 0, 0), Type = 1, Width = 2},
			{Name = "S4", Color = RGB(255, 165, 0), Type = 1, Width = 2},
			{Name = "S3", Color = RGB(255, 255, 0), Type = 1, Width = 2},
			{Name = "PP", Color = RGB(0, 255, 0), Type = 1, Width = 2},
			{Name = "R3", Color = RGB(0, 191, 255), Type = 1, Width = 2},
			{Name = "R4", Color = RGB(0, 0, 255), Type = 1, Width = 2},
			{Name = "R5", Color = RGB(139, 0, 255), Type = 1, Width = 2},
		}
}

local math_floor = math.floor
local levels = 0
local ydH, ydL, ydC, ydO = {},{},{},{}
local PP, R3, R4, R5 = 0,0,0,0
local S3, S4, S5 = 0,0,0
	local delta = 0
	local cl = 0
local predThisDay=0
local function dTs(t) return 100*(100*t.year+t.month)+t.day; end
local OldDay = ''	-- для выделения начала торгового дня

function Init ()
	local t=getDataSourceInfo()
	local tt = t.interval
	if tt == -3 then 
		message('Месячный график не обрабатывается.',1)
		return 
	end
	return 7
end

function OnCalculate (index)
	local time tt=T(index); ---время из свечи
	--local ThisDay=dTs(tt)	-- дата в формате yyyyMMdd
	local tDay=dTs(tt)	-- дата в формате yyyyMMdd
	local ThisDay = tDay
	if Settings.period == 'W' then
		ThisDay=tt.week_day	-- номер недели
	end
	if index == 1 then
		--message('First ThisDay = '..tostring(ThisDay),1)
		local t=getDataSourceInfo()
		--7.2.5 Функция предназначена для получения информации об источнике данных для индикатора.
		local scale = getSecurityInfo(t.class_code, t.sec_code).scale	--	NUMBER, Количество значащих цифр после запятой
		mul = 10^scale  -- возведение в степень
		local tt = t.interval
		if tt == -3 then tt = 'месяц' 
		elseif tt == -2 then tt = 'неделя'
		elseif tt == -1 then tt = 'день' 
		else
			tt = tt..' мин.'
		end
		--message(t.sec_code..'('..t.class_code..'), цифр после запятой: '..scale..', mul = '..mul..', дата = '..ThisDay,1)
		levels = levels + 1
		if ThisDay ~= OldDay then
			OldDay = ThisDay
		end	
		predThisDay = ThisDay
		--
		delta = H(index) - L(index)
		cl = C(index)
		R5 = (H(index) / L(index))*cl
		calcLevels(index)
		local per = 'daily'
		if Settings.period == 'W' then
			per = 'weekly'
		end
		message('Camarilla '..per..', Т = '..tt..', © xsharp.ru 20.06.2015', 1)
		return
	end
	if Settings.period == 'W' then
		if ThisDay < OldDay then	-- для неделек
			OldDay = OldDay + 1
			if OldDay ~= ThisDay then
				OldDay = ThisDay
			end
			levels = levels + 1
			delta = ydH[levels-1] - ydL[levels-1]
			cl = ydC[levels-1]
			R5 = (ydH[levels-1] / ydL[levels-1])*cl
			calcLevels(index)
			--if index<120 then
			--message('index= '..tostring(index)..', Смена недели: '..tostring(ThisDay)..', OldDay: '..tostring(OldDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
			--end
			predThisDay = ThisDay
		else
			if ThisDay ~=predThisDay then
				--message('index= '..tostring(index)..', ThisDay= '..tostring(ThisDay)..', predThisDay: '..tostring(predThisDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
				predThisDay = ThisDay
				OldDay = OldDay + 1
			end
			ThisDayF(index)
		end
	elseif Settings.period == 'D' then
		if ThisDay ~= OldDay then	-- для дневок
			OldDay = OldDay + 1
			if OldDay ~= ThisDay then
				OldDay = ThisDay
			end
			levels = levels + 1
			delta = ydH[levels-1] - ydL[levels-1]
			cl = ydC[levels-1]
			R5 = (ydH[levels-1] / ydL[levels-1])*cl
			calcLevels(index)
			--if index<120 then
			--message('index= '..tostring(index)..', Смена недели: '..tostring(ThisDay)..', OldDay: '..tostring(OldDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
			--end
			predThisDay = ThisDay
		else
			if ThisDay ~=predThisDay then
				--message('index= '..tostring(index)..', ThisDay= '..tostring(ThisDay)..', predThisDay: '..tostring(predThisDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
				predThisDay = ThisDay
				OldDay = OldDay + 1
			end
			ThisDayF(index)
		end
	elseif Settings.period == 'H4' then
		if ThisDay ~= OldDay then	-- для дневок
			OldDay = OldDay + 1
			if OldDay ~= ThisDay then
				OldDay = ThisDay
			end
			levels = levels + 1
			delta = ydH[levels-1] - ydL[levels-1]
			cl = ydC[levels-1]
			R5 = (ydH[levels-1] / ydL[levels-1])*cl
			calcLevels(index)
			--if index<120 then
			--message('index= '..tostring(index)..', Смена недели: '..tostring(ThisDay)..', OldDay: '..tostring(OldDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
			--end
			predThisDay = ThisDay
		else
			if ThisDay ~=predThisDay then
				--message('index= '..tostring(index)..', ThisDay= '..tostring(ThisDay)..', predThisDay: '..tostring(predThisDay)..', d='..tDay..', R3= '..R3..', PP= '..cl..', S3= '..S3,1)
				predThisDay = ThisDay
				OldDay = OldDay + 1
			end
			ThisDayF(index)
		end
	end
	return S5, S4, S3, cl, R3, R4, R5
end

function round(value)
	return math_floor(value*mul + 0.5) / mul
end

function ThisDayF(index)
	ydC[levels] = C(index)
	if H(index) > ydH[levels] then
		ydH[levels] = H(index)
	end
	if L(index) < ydL[levels] then
		ydL[levels] = L(index)
	end
end

function calcLevels(index)
	ydO[levels] = O(index)
	ydH[levels] = H(index)
	ydL[levels] = L(index)
	ydC[levels] = C(index)
	--
	R3 = cl + delta * 1.1/4
	R4 = cl + delta * 1.1/2
	--
	S3 = cl - delta * 1.1/4
	S4 = cl - delta * 1.1/2
	S5 = cl - (R5-cl)
	--
	R5 = round(R5)
	R4 = round(R4)
	R3 = round(R3)
	S3 = round(S3)
	S4 = round(S4)
	S5 = round(S5)
end
  • обсудить на форуме:
  • QUIK

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