рекомендации

четверг, 26 октября 2017 г.

Quantmod - пакет для работы с финансовыми данными в R

Самый известный пакет для работы с финансовыми данными в R - это quantmod. Он позволяет получать данные из различных источников, строить, и тестировать торговые модели.
Установка пакета в R производится с помощью команды:

> install.packages("quantmod")

Вместе с ним будут установлены также пакеты xts, zoo и TTR. Первые два предоставляют продвинутые средства для работы с временными рядами, а TTR - это большой набор технических индикаторов.
Перед использованием пакета необходимо загрузить его в R с помощью команды:

> library(quantmod)

Quantmod позволяет получать данные из следующих источников:


- Google Finance (цены открытия, максимумы дня, минимумы, цены закрытия и объёмы);
- Federal Reserve Bank of St. Louis FRED®;
- Oanda (FOREX и металлы, только цены закрытия);
- локальные базы данных MySQL;
- двоичные файлы R (.RData и .rda);
- текстовые файлы CSV.

Получим данные по некоторым активам:

# котировки Google c google finance
> getSymbols("GOOG",src="google")
[1] "GOOG"
# котировки Yahoo с google finance
> getSymbols("YHOO",src="google")
[1] "YHOO"
Данные по котировкам теперь хранятся в объектах типа xts. Можно также посмотреть, какие конкретно данные мы скачали, по заголовкам столбцов:

> class(GOOG)
[1] "xts" "zoo"
> colnames(GOOG)
[1] "GOOG.Open"     "GOOG.High"     "GOOG.Low"      "GOOG.Close"    "GOOG.Volume"   "GOOG.Adjusted"

Для того, чтобы не вводить каждый раз информацию об источнике получения данных, можно  сохранить эту информацию с помощью функции setSymbolLookup:

> setSymbolLookup(YHOO='google',GOOG='google')
> setSymbolLookup(XPTUSD=list(name="XPT/USD",src="oanda"))

Теперь сохраняем наши предпочтения в файл:

> saveSymbolLookup(file="mysymbols.rda")

В следующей сессии мы сначала загружаем из файла наши предпочтения, затем скачиваем требуемые данные:

> loadSymbolLookup(file="mysymbols.rda")
> getSymbols(c("YHOO","GOOG","XPTUSD"))
[1] "YHOO"   "GOOG"   "XPTUSD"
Можно указывать за какой конкретный промежуток времени нам нужны котировки:
> getSymbols("GOOG",src="yahoo", from="2014-01-01", to="2015-01-01")
[1] "GOOG"
Для построения графиков скачанных нами котировок используется функция chartSeries(), кроме того, для нее имеются обертки, позволяющие явно указать нужный нам тип графика  (lineChart,barChart и candleChart). Для котировок по умолчанию используются свечи:
> chartSeries(GOOG)

goog1.png

Теперь, возьмем, например, Майкрософт. И давайте заодно сменим оформление графика, так как темные цвета нагоняют тоску, бычьи свечи сделаем зелеными, а медвежьи - красными:
> getSymbols("MSFT",src="yahoo")
[1] "MSFT"
> chartSeries(MSFT, theme="white", up.col='green', dn.col='red')

msft1.png

Выберем только первый квартал 2014 года:

> chartSeries(MSFT["2014-01/2014-03"], theme="white", up.col='green', dn.col='red')

msft2.png

Слэш используется для "отсечения" временных промежутков. Например, мы можем просмотреть все данные в нашем наборе до 20 января 2007 года:

> MSFT["/2007-01-20"]
         MSFT.Open MSFT.High MSFT.Low MSFT.Close MSFT.Volume MSFT.Adjusted
2007-01-03     29.91     30.25    29.40      29.86    76935100      24.60428
2007-01-04     29.70     29.97    29.44      29.81    45774500      24.56308
2007-01-05     29.63     29.75    29.45      29.64    44607200      24.42300
2007-01-08     29.65     30.10    29.53      29.93    50220200      24.66196
2007-01-09     30.00     30.18    29.73      29.96    44636600      24.68668
2007-01-10     29.80     29.89    29.43      29.66    55017400      24.43948
2007-01-11     29.76     30.75    29.65      30.70    99464300      25.29643
2007-01-12     30.65     31.39    30.64      31.21   103972500      25.71666
2007-01-16     31.26     31.45    31.03      31.16    62379600      25.67546
2007-01-17     31.26     31.44    31.01      31.10    58519600      25.62602
2007-01-18     31.15     31.37    30.80      31.00    56364300      25.54362
2007-01-19     30.73     31.11    30.69      31.11    75826900      25.63426
Дневные данные можно преобразовать в недельные с помощью функции to.weekly:
> chartSeries(to.weekly(MSFT["2013/2014"]), theme="white", up.col='grey',dn.col='blue')

msft3.png

Для получения данных по ценам на металлы с Oanda используется функция getMetals. Давайте посмотрим цены на золото за последний год:
> getMetals("XAU", from = Sys.Date() - 365)
[1] "XAUUSD"
> chartSeries(XAUUSD, theme="white")

gold.png

Можно также получать данные с Oanda по курсам валют с помощью функции getFX():
> getFX("EUR/USD", from = "2013-01-01")
[1] "EURUSD"
> chartSeries(EURUSD, theme="white")

EURUSD.png

Технический анализ

Как уже говорилось ранее, для технического анализа используется пакет TTR, который содержит огромное количество различных индикаторов. Мы приведем пример использования только для нескольких наиболее распространенных.
Строим график для Microsof и добавляем на него индикатор MACD и каналы Боллинджера:
chartSeries(MSFT["2014-01/2014-06"], theme="white", up.col='green', dn.col='red')
addMACD()
addBBands()

msft4.png

Комментариев нет:

Отправить комментарий