Monday, September 19, 2011

Тиковые данные rusquant v0.3

Очередное обновление rusquant. Теперь стали доступны тиковые данные.

Как обычно, обновиться, тем у кого уже есть, или установить тем, у кого еще нет, можно командой в консоли R:
install.packages("rusquant", repos="http://R-Forge.R-project.org")

Тиковые данные, к сожалению, доступны лишь за два последних дня. Это ограничение Finam, вообще там есть и другие ограничения, так что не удивлюсь, если через некоторое время этот код перестанет работать, пишите, если что.

Для получения тиковых данных можно воспользоваться знакомой функцией getSymbols()

> library(rusquant)
>  getSymbols("SBER", from=Sys.Date()-1, src="Finam", period="tick")
[1] "SBER"
>  SBER[1:5]
                    SBER.Close SBER.Volume
2011-09-14 09:59:59      79.24          30
2011-09-14 09:59:59      79.24          30
2011-09-14 09:59:59      79.24          10
2011-09-14 09:59:59      79.24          20
2011-09-14 09:59:59      79.24         500

Сразу отмечу, что вызов выполняется достаточно долго, т.к. объем получаемых данных очень большой. Для удобства, сохранена система именования OHLC данных. Т.е. цены можно получить всё той же функций Cl, а объем Vo.

Если же есть необходимость преобразовать тиковые данные в OHLC, то нет ничего проще, в модуле xts для этого есть ряд удобных функций типа to.minutes, to.hourly, to.minutes10 и более общая функция to.period

> to.period(SBER, "mins", k=5)
                    SBER.Open SBER.High SBER.Low SBER.Close SBER.Volume
2011-09-14 09:59:59     79.24     79.24    79.24      79.24      287520
2011-09-14 10:04:58     79.47     79.68    79.11      79.52     4042460
2011-09-14 10:09:59     79.52     79.66    79.34      79.35     3095280

Доступные значения периодов: “secs”, “seconds”, “mins”, “minutes”, “hours”, “days”, “weeks”, “months”, “quarters”, и “years”. Хотя, я сомневаюсь, что последними кто-то будет пользоваться. k=5 - показывает какое количество периодов объединять в группу. В данном примере мы получили пятиминутные данные.

10 comments:

  1. большое спасибо за вашу либу) благодаря ей я начал любить R. есть вопрос. может это бага. частенько при закачивании больших объемов итковых данных с финама возникает такая ошибка: "Ошибка в if (ss == "") break : аргумент нулевой длины". и данные не закачиваются. подскажите куда рыть, в чем может быть проблема. спасибо

    ReplyDelete
    Replies
    1. Сергей, обычно это значит что либо имя бумаги неверное, либо временной интервал слишком большой, либо данных для этого временного интервала нет. Я подумаю, как можно сделать сообщения об ошибках вменяемыми.

      Delete
  2. А есть ли возможность импортировать тики прямо с ртс. Например вот отсюда http://ftp.rts.ru/pub/FORTS/pubstat/

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

      Delete
  3. спасибо за модуль! удобно!

    ReplyDelete
  4. Добрый день, Сергей. Хотелось бы узнать, как можно или можно ли из котировок достать одну колонку (например Close) и сделать из нее одномерный ряд?

    Спасибо за удобный модуль

    Андрей

    ReplyDelete
  5. SergE добрый день Сергей. Почему бы не заменить finam на mfd?
    mfd дает качать данные за месяц.
    в mfd нет ошибок в данных (т.е. там все данные верны)
    к тому же он гораздо реже лежит в отключке чем финам.

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

    ReplyDelete
  7. В связи с удалением пакета Defaults с CRANa возникла проблема установке пакета rusquant.
    Поправил проблему. На данный момент актуальные исходники находятся на r-forge но пока еще не собранные.
    Исправленную версию пакета можно установить из zip архива:
    https://www.dropbox.com/sh/rbx294u738m26c8/AAB-bVB5VjLrD6NQT9-872hqa?dl=0 (ссылка на архив)

    ReplyDelete
    Replies
    1. Добрый день, при попытке использования вашего пакета выдает следующую ошибку:
      Error in data.frame(names, res, markets) :
      arguments imply differing number of rows: 12012, 12013

      Delete