Monday, August 8, 2011

Исследуем Российский рынок ценных бумаг с помощью R

В прошлых статьях, посвященных среде разработки R, я многократно упоминал о расширении quantmod, пожалуй, одном из самых полезных расширений для желающих строить математические модели финансовых рынков в R. Единственный недостаток этого расширения - отсутствие поддержки российских рынков, и этот недостаток я решил исправить. Для этого, было написано маленькое расширеньице, оно позволяет автоматически выкачивать данные для российских площадок с сайта Finam. По мере возможности, постараюсь добавить еще данные с сайта РТС.

Установить это расширение просто. Если у вас R последней версии (2.13 на момент написания текста) то достаточно запустить его и выполнить команду:

install.packages("rusquant", repos="http://R-Forge.R-project.org")

Если R более ранней версии, но вы используете Windows, то можно поступить так:

install.packages("rusquant", contriburl="http://r-forge.r-project.org/bin/windows/contrib/latest/")

И третий вариант установки. Можно зайти на http://r-forge.r-project.org/projects/rusquant/ и вручную скачать либо исходники либо готовую версию.

Вот и всё, после сообщения об успешной установке этого и всех зависимых пакетов, вы сможете приступить к работе.

Например, можно построить дневной график фьючерса на индекс РТС:

library(rusquant)
getSymbols("SPFB.RTS", from="2011-01-01", src="Finam")
chartSeries(SPFB.RTS)


Кроме того, в отличии от оригинального quantmod, здесь есть маленький бонус, а именно, нам доступны не только дневные но и внутри-дневные данные. Например, можно посмотреть часовик фьючерса на золото:

library(rusquant)
getSymbols("SPFB.GOLD", from=Sys.Date()-5, src="Finam", period="hour")
chartSeries(SPFB.GOLD)


Или, даже, 5 минутку (будьте, однако осторожны выбирая диапазон, очень легко накачать реально много данных)

library(rusquant)
getSymbols("SPFB.GOLD", from=Sys.Date()-5, src="Finam", period="5min")
chartSeries(SPFB.GOLD)


Можно строить математические модели и проводить анализ российских ценных бумаг. Можно воспользоваться любым из десятков индикаторов написанных для модуля TTR, функциями работы с временными данными модуля xts и множеством других возможностей расширений R.

Всего доступны для загрузки 9 временных интервалов: 1min, 5min, 10min, 15min, 30min, hour, day, week, month. Доступные инструменты и их коды можно смотреть на сайте источника в поле имя контракта.

Что планирую добавить в дальнейшем? В первую очередь хочется добавить опционы фортс, потом тиковые данные с финама. Может быть что-то еще, что окажется полезным.

31 comments:

  1. При попытке скачать котировки SPFB.GOLD вываливается

    Warning message:
    In download.file(stock.URL, destfile = tmp, quiet = !verbose) :
    downloaded length 192913 != reported length 200

    Хотя вроде бы все качается, графики строятся.

    ReplyDelete
  2. Спасибо за комментарий, а какой период и какой временной интервал качаете?
    Проблем может быть несколько, может баг, хотя мне пока не удалось воспроизвести, может быть проблема с соединением или проблема на сервере финама.

    ReplyDelete
  3. Код такой:

    library(rusquant)
    getSymbols("SPFB.GOLD", from=Sys.Date()-5, src="Finam", period="1min")
    chartSeries(SPFB.GOLD)


    Out такой:

    > getSymbols("SPFB.GOLD", from=Sys.Date()-5, src="Finam", period="1min")
    [1] "SPFB.GOLD"
    Warning message:
    In download.file(stock.URL, destfile = tmp, quiet = !verbose) :
    downloaded length 165283 != reported length 200
    > chartSeries(SPFB.GOLD)

    ReplyDelete
  4. А в интернет подключение напрямую или через прокси? Остальные инструменты качаются без варнингов?

    ReplyDelete
  5. Без прокси, у всех это warning.

    ReplyDelete
  6. Разобрался :) Дело в том, что финамовские сервера не возвращают в заголовке content-length. А в R есть две библиотеки для работы с интернетом. Одна из них пишет при этом warning в консоль, другая нет.

    Можно попробовать переключить библиотеку выполнив команду
    setInternet2(FALSE) после этого warning должен исчезнуть. Можно просто его игнорировать поскольку ничего страшного в нем нет :)

    ReplyDelete
  7. Warning in install.packages :
    package ‘rusquant’ is not available (for R version 2.13.0)
    Как с этим бороться? Заранее спасибо!

    ReplyDelete
  8. Это просто предупреждение, с ним не обязательно бороться т.к. всё будет работать. Но если очень хочется, то можно поставить более свежую версию R

    ReplyDelete
  9. Подскажите в чем проблема

    > library(rusquant)
    Загрузка требуемого пакета: quantmod
    Загрузка требуемого пакета: Defaults
    Ошибка: пакет ‘Defaults’ нельзя загрузить
    Вдобавок: Предупреждение
    In library(pkg, character.only = TRUE, logical.return = TRUE, lib.loc = lib.loc) :
    нет пакета под названием ‘Defaults’

    ReplyDelete
  10. Проблема в том что quantmod не может найти пакет Defaults. Он живет в другом репозитории и поэтому не ставится автоматически (когда переедем в CRAN все наладится) Пока его можно установить вручную.

    install.packages('Defaults')

    ReplyDelete
  11. Добрый день! Все скачал, пакеты установил, но R не может найти функцию

    > Ошибка: не могу найти функцию "getSymbols"

    ReplyDelete
    Replies
    1. Полагаю, дело в том, что пакет не загружен. Попробуйте сначала выполнить команду
      library(rusquant)

      Delete
    2. > library(rusquant)
      Загрузка требуемого пакета: quantmod
      Загрузка требуемого пакета: xts
      Ошибка: пакет ‘zoo’, требуемый для ‘xts’, не найден
      Вдобавок: Предупреждения
      1: пакет ‘quantmod’ был собран под R версии 2.14.2
      2: пакет ‘xts’ был собран под R версии 2.14.2

      Delete
    3. Разобрался! Оказывается надо было предварительно установить вот это
      > install.packages('quantmod')

      Большое Вам спасибо за предоставляемую информацию! Планируются ли еще статьи по R и фондовому рынку?

      Delete
  12. Да, конечно планируются, просто мой переезд оказался куда более хлопотным делом чем ожидалось изначально.

    ReplyDelete
  13. Расскажите, пожалуйста, как работать с этим объектом?
    Как, например, из объекта SPFB.RTS получить таблицу, в первом столбце которой время, а во втором - цена закрытия???

    ReplyDelete
  14. Гениально!!!
    Спасибо за rusquant!
    Просто чудо какое-то, что наткнулся на этот блог.

    P.S.
    Решил освоить R, купил книгу "Наглядная статистика. Используем R!" и стал думать о том, как бы применить это на фондовом рынке. И тут попался данный блог! Прямо как откровение. И всё понятно с первого слова.

    >тиковые данные с финама
    Это интересно. Я планирую интрадей робота на Java реализовать.
    Перед этим надо отработать основные моменты.


    ReplyDelete
  15. Получение маркет даты по опционам планируете добавлять в функционал?

    ReplyDelete
  16. Добрый день!

    getSymbols("SPFB.GOLD", from=Sys.Date()-5, src="Finam", period="hour")
    Ошибка в names(res) <- unlist(names) :
    атрибут 'names' [10616] должен быть той же длины, что и вектор [10615]

    В чем ошибка?

    ReplyDelete
    Replies
    1. у меня такая же ошибка выходит :(, сдается мне что на стороне Финама что-то изменилось, что еще не учтено в этой версии rusquant , я когда еще пакет поставил обратил внимание на сообщение "Version 0.4-0 included new data defaults. See ?getSymbols." но команда ?getSymbols не вызвала помощи

      Delete
  17. Аналогичная ошибка:(

    ReplyDelete
  18. Обновил пакет. Проблема была в списке инструментов с сайта Finam. Теперь работает. Добавил возможность скачивать с сайта mfd.ru
    На данный момент все детали обновления (и примеры использования загрузки данных с mfd.ru) здесь: http://r-group.mifit.ru/
    Вопросы можно задавать на почту arbuzov1989@gmail.com.
    В будущем надеюсь загрузим обновление на r-forge.

    ReplyDelete
    Replies
    1. Здравствуйте. Не получается установить обновление. Вот такая ошибка:

      Warning in install.packages :
      package ‘C:/Users//Downloads/rusquant.zip’ is not available (for R version 3.0.2)
      Warning in install.packages :
      error 1 in extracting from zip file
      Warning in install.packages :
      cannot open compressed file 'rusquant/DESCRIPTION', probable reason 'No such file or directory'
      Error in install.packages : cannot open the connection

      Что можно сделать?

      Delete
    2. Здравствуйте,
      Я залил исправления Вячеслава на сайт r-forge, в течении ближайших суток они должны собрать и выложить новую версию. После этого можно будет установить rusquant простой командой install.packages("rusquant", repos="http://R-Forge.R-project.org")

      Delete
    3. Сергей, большое спасибо! Очень интересный блог. Благодаря ему я начал изучать R.

      Delete
    4. Добрый день!

      Подскажите, какой параметр src, чтобы с mfd скачивать? По вашей ссылке выдает "Ошибка установки соединения с базой данных"

      Delete
  19. Попытался установить.
    Получил:
    > install.packages("rusquant", repos="http://R-Forge.R-project.org")

    package ‘rusquant’ is available as a source package but not as a binary

    Предупреждение
    package ‘rusquant’ is not available (for R version 3.1.0)

    ReplyDelete
  20. Serge, thanks a lot for great package!

    But could you please update it to be compatible with newest versions of R.

    Best Regards

    ReplyDelete
  21. С чем может быть связана ошибка в выдаче данных все еще присутствует.

    getSymbols("SPFB.RTS", from=Sys.Date()-5, src="Finam", period="5min")

    Ошибка в data.frame(names, res, markets) :
    arguments imply differing number of rows: 11742, 11743

    Кто-то знает решение? Появилась с середины ноября 2014

    ReplyDelete
  22. Последнее время Финам постоянно изменяет файл со списком инструментов, поэтому библиотека перестает работать. Стараюсь как можно более оперативно вносить правки. Попробуйте обновить пакет, если не работает. Создал страницу с описанием основных возможностей пакета rusquant:
    http://r-group.mifit.ru/?page_id=141

    ReplyDelete