Tuesday, November 29, 2011

Дивиденды rusquant 0.3.3

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

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')]


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

7 comments:

  1. Сергей, твой блог - супер! Случайно на него наткнулся, читаю и не могу оторватся. Спасибо за rusquant!!! Классный package! Не думал его на CRAN залить, или для этого надо документацию составлять?
    Удачи на новой работе/на новом месте и с нетерпением жду новых постов!

    ReplyDelete
  2. Денис, спасибо! В CRAN конечно же надо залить, но я пока не разобирался, что для этого надо делать и нет ли там каких-то формальных критериев.
    Если есть желание присоединиться к разработке, пишите сюда или на почту, буду рад.

    ReplyDelete
  3. Сергей, привет! Осваиваю R, нашел твой блог - он просто супер! Очень подробно всё пишешь на примерах, это здорово. За rusquant отдельное спасибо. Есть несколько вопросов по примеру в этой статье и по логике работы getSymbols.
    Пробую пример из статьи, на строке 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 умеет это делать, но не поддерживает работу с векторами.

    ReplyDelete
    Replies
    1. Да дивиденты больше не доступны на сайте тройки. Если кто-то знает, где есть данные, с радостью добавлю их в rusquant.

      Команда 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", каждая из которых будет содержать данные по инструменту.

      Delete
  4. Старая таблица вроде живет здесь: http://www1.troika.ru/rus/Capital_Markets/Custody/dividends.wbp

    По поводу закачки данных - попробую в ближайшее время, спасибо. В хелпе по quantmod находил про auto.assign = FALSE, пытался попробовать на qusquant, но что-то не задалось. Попробую ещё более вдумчиво.

    ReplyDelete
  5. 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
  6. Сергей привет! Скажите пожалуйста, GetFinancials для российских компаний может как то работать с помощью rusquant? Или если знаете какой то способ как это загрузить, буду очень признателен

    ReplyDelete