Избранное трейдера dimaAg
Компаний – море, даже на бирже СПб их почти тысяча. Из них — сотни вполне приличных и достойных внимания. Очевидно, что старое доброе неспешное чтение годовых отчетов в нынешних реалиях не подходит.
Представлю свой алгоритм, как анализировать зарубежные эмитенты, чтобы за короткое время охватить наиболее важный пласт финансовой информации и тем самым составить первичное впечатление о компании, включить ее в свой шорт-лист для последующего более глубокого анализа и возможных инвестиций в нее. Алгоритм сложился путем проб и ошибок в течение последних 3-х лет.
Итак. Рассмотрим пошаговый анализ одного из эмитентов, торгующихся на Санкт-Петербургской бирже, компанию Elanco Animal Health Incorporated (ELAN).
Первым шагом будет поиск сводной информации о компании на одном из сайтов-агрегаторов. На мой взгляд, finviz здесь вне конкуренции. По тикеру получаем информацию о компании, о секторе, где она работает, ссылку на официальный сайт и последние новости об эмитенте. Не помешает поискать в открытых источниках информацию о ней для общего представления.
В продолжении разговора об рыночных факторах-аномалиях(начало было здесь, про дивиденды), хочу немного написать о другом рыночном факторе — моментуме. Для начала, вот ссылка на очень хорошую статью — «The Quantitative Momentum Investing Philosophy» из блога компании Alpha Architect, рекомендую прочесть. В ней изложены основные принципы, на основе которых компания делает свои моментум-фонды. Если совсем кратко изложить суть написанного, то для акций, на горизонте от 6 до 12 месяцев, наблюдается образование аномалии моментума. Иными словами, если цены акции начали рост, и уже растут больше 6 месяцев, то рост с большой вероятностью будет продолжен. Эта аномалия описана во множестве академических работ и используется во многих рыночных моделях, например моделях Фамы-Френча(см. ссылки в статье). В этих же академических работах также отмечается, что на этом многомесячном тренде роста иногда возникает обратное контр-трендовое движение, длительностью до месяца. Чтобы отсечь этот «противоход», часто используют определение моментума в следующем виде: общий рост за N месяцев, без учета последнего(самого недавнего) месяца. В модели Фамы-Френча используется определение моментума — 12 минус 1, т.е. рост за 12 месяцев, без учета последнего месяца. Этот же моментум часто называют «12_2 моментум», по месяцам вычисления.
В обсуждении прошлого топика совместно с коллегами мы пришли к выводу, что необходимым и достаточным условием безарбитражности в опционах европейского типа является колл-пут паритет
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%.
Обожаю ресурс www.portfoliovisualizer.com, но к сожалению он не так полезен для российского инвестора, как мог бы быть, если бы в нем можно было посмотреть посчитать портфели с российскими активами хотя бы с начала индекса Мосбиржи.
Решил замутить тест сам.
Суть теста в следующем, используем статическую ребалансировку с ценами по итогам года, используя реальную доходность (за вычетом ИПЦ) в рублях.
Активов использовалось 5.
Индекс РТС с дивидендами в рублях (он появился в сентябре 1995, тогда как индекс Мосбиржи на 2 года позже)
Долларовый кэш по курсу ЦБ
Золото по курсу ЦБ
S&P500 с дивидендами в рублях по курсу ЦБ
Индекс потребительских цен (так как облигации в среднем дают схожую доходность, а данных по облигациям и депозитам в рублях с начала 1996 года нет).
Отвечаю на резонный вопрос, где я взял данные по индексу РТС с дивидендами.
Начиная с 2004 го года данные по индексу полной доходности есть на сайте Мосбиржи.
Стартует он со значений простого индекса РТС, соответственно до 2004 года использовался обычный индекс РТС.
Robintrack — это инструмент для просмотра данных о популярности акций, принадлежащих пользователям брокерских услуг Robinhood. Позволяет просматривать информацию о наиболее (и наименее) часто удерживаемых акциях и просматривать тенденции с течением времени. В сочетании с ценовой историей и другими формами данных это может быть полезным инструментом для определения настроений на рынке.
Прелесть этих графиков в их простоте. Зеленая линия показывает, сколько пользователей владело компанией за определенный период времени, а розовая линия — цена акций за тот же период. Тем не менее, в этих таблицах хранится информация о мышлении розничных инвесторов.
—Люди покупают провал?
—Добавляются пока акции растут? Не обращая внимания на плохие новости или плохой отчет о доходах?
—Постоянно совершают ошибки в определенных ценных бумагах?
Robintrack, если следовать правильно, может дать вам все эти идеи и многое другое.
привет!
у меня в квике стояла камарилла аж с 2014 года, когда вы выложили здесь этот индикатор.
квик обновился до 8 и камарилла пропала.
это не исправить?
-- 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