Дивиденды за последний год можно получить командой:
library(rusquant) divs <- getAllDividends()Все дивиденды, можно получить командой getAllDividends(allYears = TRUE)
Возвращаемый объект содержит следующие данные:
Symbol - id акции на бирже
Name - полное название эмитента
BoardDate - дата собрания совета директоров
RegistryDate - дата закрытия реестра
RecommendedDivs - рекомендуемые дивиденды
Divs - выплаченные дивиденды
Для примера использования, распечатаем дивидендную доходность российских компаний. В качестве базовой цены, берем цену закрытия акции в день закрытия реестра. Почему-то на сайте тройки этой информации нет, а она ведь гораздо интересней чем абсолютные величины дивидендов.
Внимание! Код выполняется довольно долго, т.к. для каждой акции требуется сделать запрос на сервера finam и получить её стоимость.
result <- NULL for(i in (1:length(divs[,1]))){ d <- divs[i,] if (d$Divs>0){ try({ quotes <- getSymbols(d$Symbol, src="Finam", from="2010-01-01", auto.assign=FALSE) if (!is.nan(quotes)){ price <- Cl(quotes[d$RegistryDate]) if (length(price)>0){ dd <- d$Divs result <- rbind(result, data.frame(d$Symbol, d$Name, d$RegistryDate, as.numeric(dd)/as.numeric(price), stringsAsFactors=FALSE)) } } }, silent=TRUE) } } colnames(result) <- c('Symbol', 'Name', 'RegistryDate', 'Divs') result[with(result, order(Divs, decreasing=TRUE)),c('Symbol','RegistryDate','Divs')]
Аналогично можно построить статистику для прошлых лет.
Сергей, твой блог - супер! Случайно на него наткнулся, читаю и не могу оторватся. Спасибо за rusquant!!! Классный package! Не думал его на CRAN залить, или для этого надо документацию составлять?
ReplyDeleteУдачи на новой работе/на новом месте и с нетерпением жду новых постов!
Денис, спасибо! В CRAN конечно же надо залить, но я пока не разобирался, что для этого надо делать и нет ли там каких-то формальных критериев.
ReplyDeleteЕсли есть желание присоединиться к разработке, пишите сюда или на почту, буду рад.
Сергей, привет! Осваиваю R, нашел твой блог - он просто супер! Очень подробно всё пишешь на примерах, это здорово. За rusquant отдельное спасибо. Есть несколько вопросов по примеру в этой статье и по логике работы getSymbols.
ReplyDeleteПробую пример из статьи, на строке divs <- getAllDividends() выдается ошибка:
> divs <- getAllDividends()
Ошибка в data.frame(paste(data[, 1], "P", sep = ""), data[, 2], as.Date(strptime(data[, :
arguments imply differing number of rows: 1, 0
В чем может быть проблема?
Также не работает команда sber <- getSymbols("SBER", from="2012-12-25", src="Finam", period="day") - переменная sber принимает строковое значение "SBER". Ожидаемый результат - в sber запишется объект xts с котировками сбера. Если делать без присваивания, то котировки скачиваются нормально и записываются в переменную SBER.
Я хочу реализовать выкачивание исторических данных для нескольких инструментов, заданных в отдельном векторе через команду tickers <- c("SPFB.RTS", "SBER", "GAZP", "LKOH", "ROSN"). Пока не совсем понятно, как это сделать. Функция из quantmod умеет это делать, но не поддерживает работу с векторами.
Да дивиденты больше не доступны на сайте тройки. Если кто-то знает, где есть данные, с радостью добавлю их в rusquant.
DeleteКоманда getSymbols("SBER", from="2012-12-25", src="Finam", period="day") запишет в данные в переменную SBER если требуется чтобы она вернула данные добавить параметр auto.assign = FALSE
sber <- getSymbols("SBER", from="2012-12-25", src="Finam", period="day", auto.assign = FALSE)
Можно просто иттерироваться по вектору и вызывать getSymbols для каждого элемента. А можно вызвать
getSymbols(tickers, from="2012-12-25", src="Finam", period="day")
и тогда будут созданы переменные с именами "SPFB.RTS" "SBER" "GAZP" "LKOH" "ROSN", каждая из которых будет содержать данные по инструменту.
Старая таблица вроде живет здесь: http://www1.troika.ru/rus/Capital_Markets/Custody/dividends.wbp
ReplyDeleteПо поводу закачки данных - попробую в ближайшее время, спасибо. В хелпе по quantmod находил про auto.assign = FALSE, пытался попробовать на qusquant, но что-то не задалось. Попробую ещё более вдумчиво.
Business Phone Service is ideal for small business and entrepreneurs. It gives a professional image and make sure that you don't miss a single call. Few months back, I decided to buy Hosted pbx from Telcan. You can get more information here: Business Phone Service
ReplyDeleteСергей привет! Скажите пожалуйста, GetFinancials для российских компаний может как то работать с помощью rusquant? Или если знаете какой то способ как это загрузить, буду очень признателен
ReplyDelete