Избранное трейдера Влад(и)Мир

по

Обобщённый подход к диверсификации рисков

Дополнение к серии «Портфельная оптимизация как бустинг на слабых моделях»


  • Обобщённая проблема

Результаты оценки любых случайных величин представляют из себя случайную величину. Не исключением здесь будут оценки ковариации.

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


Обобщённый подход к диверсификации рисков 

где R — коэффициент взаимной корреляции — её решение, естественным образом, будет располагаться в области максимально отрицательной статистической ошибки.

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

♛ БЬЕМ ДОХОДНОСТЬ SP500 еще раз

 

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

Цикл роста на выходе из сезона отпусков (октябрь — рождество), цикл роста на выходе из холодов (конец зимы— лето). Цикл падения в пост рождественский месяц (январь) и цикл падения на сезоне отпусков (май — сентябрь).

Вот вам визуализация средней динамики: SP500(США), FTSE(Англия), CAC40(Франция), Nikkei225(Япония):

♛ БЬЕМ ДОХОДНОСТЬ SP500 еще раз

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

Data Labeling. Разметка данных для моделей машинного обучения.

Приветствую комерады! :) 

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



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

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

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

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

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

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

Новости по брокерским счетам у иностранных брокеров.

Это опять я.

Вот прочитал в телеграмм канале  MarketTwits

Так хочется быть законопослушным и спать спокойно.

вот новая порция информации.


Президент подписал закон о снятии ряда ограничений на проведение валютных операций

С 1 января 2020 года физические лица – резиденты смогут зачислять полученные от нерезидентов средства на свои зарубежные счета без ограничений. Соответствующие изменения в законодательство внесены Федеральным законом от 02.08.2019 № 265-ФЗ, (http://publication.pravo.gov.ru/Document/View/0001201908020034) который был подписан Президентом России Владимиром Путиным.

Что это значит для владельцев бумаг на личных зарубежных счетах?

С 1 января 2020 года физические лица, инвестирующие на личных зарубежных счетах, смогут продавать и погашать любые ценные бумаги без каких-либо нарушений валютного законодательства. Банк, в котором открыт счёт, должен располагаться на территории государства-члена ОЭСР (список) (https://www.oecd.org/about/members-and-partners/) или ФАТФ (список) (https://www.fatf-gafi.org/about/membersandobservers/), которое осуществляет автоматический обмен финансовой информацией с РФ.



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

Компании, заработавшие больше всего денег в 2019 году

Компании, заработавшие больше всего денег в 2019 году

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

В совокупности 100 крупнейших компаний мира получили доход более 15 триллионов долларов.
В топ-100 компаний представлены 17 стран.
Более половины из 100 самых ценных компаний мира находятся в США (35 компаний) или Китае (23 компании).
100 самых ценных компаний в мире распределены по различным отраслям, особенно широко представлены в сфере энергетики, транспорта и финансовых услуг.

Информация для этой визуализации взята из списка Fortune компаний Global 500, ранжированных по доходам.
Мы проиллюстрировали топ-100 этих компаний на диаграмме выше, где каждый восьмиугольник представляет одну компанию. В каждом восьмиугольнике мы указали логотип компании, ее доход и страну, в которой она находится. Размер каждого восьмиугольника в визуализации пропорционален доходам компании, а более крупные фигуры представляют более высокие доходы. Кроме того, каждая компания выделена цветом, представляющим отраслевой сектор, такой как энергетика, продукты питания и розничная торговля, а также технологии.



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

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

НЛМК 2 кв 2019. Продолжение цикла снижения маржинальности у металлургов.

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

Выручка снизилась на 10% до 2797 млн.$. Пострадала не только выручка, но и операционная прибыль до 593 млн.$

НЛМК 2 кв 2019. Продолжение цикла снижения маржинальности у металлургов.

Чистая прибыль снизилась до 415 млн. По полугодиям это уже снижение почти на 30%! С 1083 до 796 млн.$.

НЛМК 2 кв 2019. Продолжение цикла снижения маржинальности у металлургов.



( Читать дальше )
  • обсудить на форуме:
  • НЛМК

Обучение с подкреплением (код)

Интересный код, для тех, кто в теме.


Это подборка различных RL алгоритмов в реализации для трейдинга. Если пишете свой алго, возможно, тут есть что позаимствовать. Код, понятное дело, на Python.  Для тех, кто не знает, что такое reinforcement learning — погуглите, это действительно крутая штука. Имхо, это единственная технология machine learning, которая может дать что-то стоящее в трейдинге. Порог входа достаточно серьезный, но дорогу осилит идущий:)

Часть, которая завязана на принятии решении, сильно упрощена, но это реально неплохая стартовая точка.

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