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

по

Как анализировать американские компании. Алгоритм

Компаний – море, даже на бирже СПб их почти тысяча. Из них — сотни вполне приличных и достойных внимания. Очевидно, что старое доброе неспешное чтение годовых отчетов в нынешних реалиях не подходит.

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

Итак. Рассмотрим пошаговый анализ одного из эмитентов, торгующихся на Санкт-Петербургской бирже, компанию Elanco Animal Health Incorporated (ELAN).

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



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

Есть ли сила в моментуме?

    • 22 февраля 2020, 15:14
    • |
    • at6
  • Еще

В продолжении разговора об рыночных факторах-аномалиях(начало было здесь, про дивиденды), хочу немного написать о другом рыночном факторе — моментуме. Для начала, вот ссылка на очень хорошую статью — «The Quantitative Momentum Investing Philosophy» из блога компании Alpha Architect, рекомендую прочесть. В ней изложены основные принципы, на основе которых компания делает свои моментум-фонды. Если совсем кратко изложить суть написанного, то для акций, на горизонте от 6 до 12 месяцев, наблюдается образование аномалии моментума. Иными словами, если цены акции начали рост, и уже растут больше 6 месяцев, то рост с большой вероятностью будет продолжен. Эта аномалия описана во множестве академических работ и используется во многих рыночных моделях, например моделях Фамы-Френча(см. ссылки в статье). В этих же академических работах также отмечается, что на этом многомесячном тренде роста иногда возникает обратное контр-трендовое движение, длительностью до месяца. Чтобы отсечь этот «противоход», часто используют определение моментума в следующем виде: общий рост за N месяцев, без учета последнего(самого недавнего) месяца. В модели Фамы-Френча используется определение моментума — 12 минус 1, т.е. рост за 12 месяцев, без учета последнего месяца. Этот же моментум часто называют «12_2 моментум», по месяцам вычисления.



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

«Безарбитражность» - «афера века»

    • 21 февраля 2020, 11:05
    • |
    • А. Г.
      Проверенный аккаунт
  • Еще

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

Call-Put=C-S*(1+R)-1

где

Call – цена опциона колл со страйком S;

Put – цена опциона пут со страйком S;

С – текущая цена базового актива (БА, предполагается, что в активе нет купонов и дивидендов);

Собственно, рассуждения в рамках безарбитражности приводят нас к условию, что среднее относительного приращения цены БА до экспирации  равно R.

А что получается при колл-пут паритете, когда то же самое среднее в 20 и более раз больше R?

Сразу сделаем предположение, как у Блэка-Шоулза, что мы всегда можем занять любую сумму под ставку R.

Рассмотрим для простоты актив, который на любую будущую экспирацию имеет два равновероятных исхода: +30% и -10%, а R положим равным 1%.

Для простоты также будем считать, что 0.99*1.01=1, т. е. все в расчетах будем округлять до 0,1%.



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

Как сделать приблизительный расчет стоимости опциона? Блэк-Шоулз vs Кокс-Росс-Рубинштейн.

    • 16 ноября 2019, 18:32
    • |
    • KarL$oH
  • Еще
На смарлабе появился отличный автор - Eugene Logunov .

Если новичок, который только-только пришел на биржу и пробует на вкус различные инструменты, откроет почитать, например, вот этот его топик про опционы, то через несколько минут прочтения плюнет, закроет и больше к теме опционов не вернется НИКОГДА!

А такого не должно быть. Не нужно ничего усложнять. Чтобы прибыльно торговать опционами совершенно нет никакой необходимости строить поверхностные улыбки волатильности.

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

Напомню, формула Б-Ш для опционов появилась в 1973-ом.

Так как определяли цены на опционы в «доформульные» времена?

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

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

История моментум-эффекта

Всем привет! Мой канал (@MaInv) в тг достиг отметки в 114 подписчиков! Очень приятно, что кому-то интересно следить за моими статьями и исследованиями. Поэтому буду рад видеть на канале каждого!

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

Я начал использовать моментум в своих торговых стратегиях в 2019 году. Моя текущая доходность с начала года 16% без учета некоторых дивидендов. А за моим портфелем в 4 квартале 2019 года можно следить тут. На изучение моментума меня вдохновили статьи одного из пользователей смартлаба, AlexChi, и

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

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

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


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

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

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


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

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

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

Python: поиск поддержки и сопротивления

Написал тут питонячью библиотечку небольшую для поиска поддержки/сопротивления.

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

Общая концепция такая:
1. Ищем разворотные точки
2. Обучаем Agglomerative Clustering, собираем уровни из точек

Находит оно примерно следующее:
Python: поиск поддержки и сопротивления


Юзайте в общем. Работает на Python 3.6+

Когда не лень выкладываю что-то по трейдингу в телегу

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

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

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

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

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



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

Robintrack: лучший инвестиционный сайт, о котором вы никогда не слышали

Robintrack — это инструмент для просмотра данных о популярности акций, принадлежащих пользователям брокерских услуг Robinhood. Позволяет просматривать информацию о наиболее (и наименее) часто удерживаемых акциях и просматривать тенденции с течением времени. В сочетании с ценовой историей и другими формами данных это может быть полезным инструментом для определения настроений на рынке.

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

—Люди покупают провал?
—Добавляются пока акции растут? Не обращая внимания на плохие новости или плохой отчет о доходах?
—Постоянно совершают ошибки в определенных ценных бумагах?

Robintrack, если следовать правильно, может дать вам все эти идеи и многое другое.


Robintrack: лучший инвестиционный сайт, о котором вы никогда не слышали



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

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
Новый дизайн