Избранное трейдера Ирина Мс
Друзья, совсем недавно я вас порадовал циклом собственных фундаментальных исследований акций, которые можно найти в моём блоге здесь.
Следующим логическим шагом было совместить то, что я делаю как портфельный управляющий, с этими самыми исследованиями. Задача не совсем тривиальная, и тем она интересна. Поскольку я всё люблю максимально автоматизировать, этот процесс не явился исключением. Проще всего результаты проделанной работы продемонстрировать на том, как она включилась в инвестиционный бюллетень.
Поскольку я не пересматриваю свои фундаментальные прогнозы чаще раза в год, если на это нет каких-то уж очень серьёзных оснований, а расчёты строятся на данных годовой отчётности, то и каждый раз пересчитывать там вроде бы нечего. Однако, поскольку рынок не стоит на месте, ожидаемая доходность инвестора меняется и этот факт можно учесть при формировании портфеля. Тем, кто знаком с портфельной теорией, сразу смекнули о чём идёт разговор.
Добрый день, Господа!
Хочу поделиться с вами проделанной мною работой на тему отбора недооцененных акций. Методика отбора всем известная – стоимостная и не учитывающая дивидендную политику. Лично у меня нет времени гоняться за новостями и дивидендами.
Данные из отчетностей за последние 5 лет я свёл в таблицу Excel, в которой очень удобно делать выборки и сортировки.
Из отчетностей я брал только: количество акций, активы, обязательства, капитал, выручка, чистая прибыль. С помощью полученных данных получил капитализацию, коэффициент закредитованности и мультипликаторы Р/Е, Р/В. Таблицу буду дорабатывать, но костяк уже сформирован.
Да, и Реальная цена акции рассчитана по формуле Капитал/Кол-во акций, а не Активы/Кол-во акций. ИМХО только капитал более-менее говорит о реальной стоимости компании.
Сортировку сделал следующую:
— Оставил только компании с размером активов свыше 10 млрд. руб.;
— Убрал все компании, получившие хоть раз за 5 лет убыток;
Settings={ Name="VDIV", period=20, periodma=15, line= { { Name = "cur1", Type =TYPE_LINE, Width = 1, Color = RGB(255,0,0) }, { Name = "cur2", Type =TYPE_LINE, Width = 1, Color = RGB(0,0,0) } } } --[[ -- кривая объемов описание свойств: period: сколько баров берутся в подсчет weighted: =0 - обычная, =1 - взвешанная proportional: =1- считается: volume*(close-open)/(hight-low), =0 - считается: volume*sign(close-open) --]] function Init() mas = {} return 3 end function OnCalculate(index) sumv1 = 0 sumv2 = 0 if index >= Settings.period then for i=index-Settings.period+1, index do if V(i) ~= nil and C(i) ~= nil then if C(i) > O(i) then sumv1 = sumv1+V(i)*(C(i) - O(i)) else sumv2 = sumv2+V(i)*(O(i) - C(i)) end end end else sumv1 = nil sumv2 = nil end if sumv2 ~= 0 and sumv2 ~= nil then vdiv = sumv1/sumv2 vdiv2 = sumv2/sumv1 vdiv3 = vdiv - vdiv2 else vdiv = nil vdiv2 = nil vdiv3 = nil end mas[index] = vdiv3 ma = 0 if index >= Settings.periodma then for i=index-Settings.periodma+1, index do if mas[i] ~= nil then ma = ma + mas[i] end end end ma = ma/Settings.periodma return ma, 0 end
Settings={ Name="VCUR", period=50, periodma=15, weighted=1, weightedma=1, proportional=1, line= { { Name = "cur1", Type =TYPE_LINE, Width = 1, Color = RGB(155,0, 0) }, { Name = "cur2", Type =TYPE_LINE, Width = 1, Color = RGB(0,0,155) }, { Name = "cur3", Type =TYPE_LINE, Width = 1, Color = RGB(0,0, 0) } } } --[[ -- кривая объемов описание свойств: period: сколько баров берутся в подсчет weighted: =0 - обычная, =1 - взвешанная proportional: =1- считается: volume*(close-open)/(hight-low), =0 - считается: volume*sign(close-open) --]] function Init() mas={} return 2 end function OnCalculate(index) sumv = 0 wsum = 0 if index >= Settings.period then for i=index-Settings.period+1, index do if sumv == nil then sumv = 0 end if C(i-1) ~= nil then wsum = wsum + i-(index-Settings.period) if C(i-1) > O(i-1) then if Settings.proportional == 0 then prop = 1 else if (H(i-1)-L(i-1)) == 0 then prop = 0 else prop = (C(i-1)-O(i-1))/(H(i-1)-L(i-1)) end end if Settings.weighted == 0 then sumv = sumv + prop*V(i-1) else sumv = sumv + prop*V(i-1)*(i-(index-Settings.period))--/Settings.period end else if Settings.proportional == 0 then prop = 1 else if (H(i-1)-L(i-1)) == 0 then prop = 0 else prop = (O(i-1)-C(i-1))/(H(i-1)-L(i-1)) end end if Settings.weighted == 0 then sumv = sumv - prop*V(i-1) else sumv = sumv - prop*V(i-1)*(i-(index-Settings.period))--/Settings.period end end end end else sumv = nil end if Settings.weighted ~= 0 then if sumv ~= nil then sum =sumv/wsum end end mas[index]=sumv ma = 0 wsum = 0 if index >= Settings.periodma then for i=index-Settings.periodma+1, index do if mas[i] ~= nil then wsum = wsum + i-(index-Settings.periodma) if Settings.weightedma == 0 then ma = ma + mas[i] else ma = ma + mas[i]*(i-(index-Settings.periodma))--/Settings.periodma end end end end if Settings.weightedma == 0 then if ma ~= nil then ma = ma/Settings.periodma end else ma = ma/wsum end return sumv, ma--, 0 end
Settings={ Name="VCUR", period=20, periodma=20, weighted=1, proportional=1, line= { { Name = "cur1", Type =TYPE_LINE, Width = 1, Color = RGB(155,0, 0) }, { Name = "cur2", Type =TYPE_LINE, Width = 1, Color = RGB(0,0,155) }, { Name = "cur3", Type =TYPE_LINE, Width = 1, Color = RGB(0,0, 0) } } } --[[ -- кривая объемов описание свойств: period: сколько баров берутся в подсчет weighted: =0 - обычная, =1 - взвешанная proportional: =1- считается: volume*(close-open)/(hight-low), =0 - считается: volume*sign(close-open) --]] function Init() mas={} return 3 end function OnCalculate(index) --sumv = 0 if index >= Settings.period then for i=index-Settings.period-1, index do if sumv == nil then sumv = 0 end if C(i-1) ~= nil then if C(i-1) > O(i-1) then if Settings.proportional == 0 then prop = 1 else if (H(i-1)-L(i-1)) == 0 then prop = 0 else prop = (C(i-1)-O(i-1))/(H(i-1)-L(i-1)) end end if Settings.weighted == 0 then sumv = sumv + prop*V(i-1) else sumv = sumv + prop*V(i-1)*(i-(index-Settings.period))/Settings.period end else if Settings.proportional == 0 then prop = 1 else if (H(i-1)-L(i-1)) == 0 then prop = 0 else prop = (O(i-1)-C(i-1))/(H(i-1)-L(i-1)) end end if Settings.weighted == 0 then sumv = sumv - prop*V(i-1) else sumv = sumv - prop*V(i-1)*(i-(index-Settings.period))/Settings.period end end end end else sumv = nil end mas[index]=sumv ma = 0 if index >= Settings.periodma then for i=index-Settings.periodma+1, index do if mas[i] ~= nil then ma = ma + mas[i] end end end ma = ma/Settings.periodma return sumv, ma, 0 end
Я уверен многие Смартлабовцы — смелые парни, а политические и местные риски для них это пустой трёп. Но когда свободный «капитал» превышает хотя бы $50000 — это уже не средство развлечения, а подушка безопасности. Её можно легко отнять или отрубить к ней доступ. А ничего не поделаешь (эмиграция не вариант для меня пока). Поэтому недавно я перешёл на западные рынки. Как обеспечить резервный бесперебойный доступ ко своему счёту (IB) при опускании занавеса? Я решил изложить полусырой план, который реализовал частично и ускоряюсь из-за разных событий.
Сперва мне потребовалось выяснить как выйти в настоящий интернет из российского. Гугление показало, что VPN способно обмануть средство контроля траффика (DPI), но не безупречно: DPI распознаёт необычный траффик и сужает полосу передачи. Так работает «великий китайский файрвол» (