Добавление нескольких серий графиков в Quantmod R

Я пытаюсь построить две диаграммы на одном chartSeries в Quantmod в R. У меня возникают некоторые трудности с этим.

library(quantmod)    
tickers <- c('GLD', 'GDX')
data <- new.env()
getSymbols(tickers, src = 'yahoo', from = '1980-01-01', env = data)
chartSeries(Cl(data$GLD), TA="addTA(Cl(data$GDX), on=1)")
addRSI()

person Defcon    schedule 01.07.2016    source источник


Ответы (1)


Вы можете использовать chart_Series вместо chartSeries.

chart_Series(Cl(data$GLD))
add_TA(Cl(data$GDX), on = 1)

А затем, если вы хотите, чтобы RSI был ниже на вспомогательной панели, просто добавьте add_RSI().

Другой подход - использовать версию> = 0.10.0 of xts (т.е. вообще не использовать quantmod), которую вы можете получить из https://github.com/joshuaulrich/xts (0.10.0 еще не на CRAN). Новая функция plot в xts очень удобна для одновременного построения нескольких столбцов объекта xts. Ознакомьтесь с ?plot.xts, чтобы увидеть примеры новых функций.

Редактировать # 2:

Чтобы легче было увидеть относительные изменения, вы можете нормализовать свой ценовой ряд разными способами. Это типичный подход (использование нуля координат - это то, что делают диаграммы Google):

normalise_series <- function(xdat) xdat / coredata(xdat)[1]
getSymbols("USO")
window <- "2013/"

# Define colour of default chart line to chart_Series in mytheme object
# which is passed to chart_Series:
mytheme <- chart_theme()
mytheme$col$line.col <- "darkgreen"
chart_Series(normalise_series(Cl(data$GLD)[window]) - 1, theme = mytheme)
add_TA(normalise_series(Cl(data$GDX)[window]) - 1, on = 1, col = "red", lty = 3)
add_TA(normalise_series(Cl(USO)[window]) - 1, on = 1, col = "blue", lty =2)

add_TA(RSI(Cl(data$GLD)), on = NA, col = "darkgreen")
add_TA(RSI(Cl(data$GDX)), on = 2, col = "red", lty = 3)
# Or add RSIs on different subpanels to improve readability of charts:
add_TA(RSI(Cl(USO)), on = NA, col = "blue", lty = 2)

введите описание изображения здесь

person FXQuantTrader    schedule 01.07.2016
comment
есть способ нормализовать график? Таким образом, это не абсолютные данные о ценах, а масштабирование для сравнения графиков. - person Defcon; 01.07.2016
comment
В каком смысле масштабируется? На основном графике? Вы можете разделить цены на ценные бумаги на начальный уровень цен, чтобы они обе начинались с 1 (скажем) перед построением графика? - person FXQuantTrader; 01.07.2016
comment
Масштабируется по полученному проценту аналогично диаграмме Google, которая может перекрывать различные акции. Я тоже хотел добавить пути rsi, чтобы видеть тенденции. - person Defcon; 01.07.2016
comment
См. Вторую правку выше. Это именно то, что предлагает мой первый комментарий, и, похоже, то же самое делает и Google. Это отвечает на ваш вопрос + добавляет несколько дополнительных функций (форматирование), которые могут оказаться полезными при использовании функций chart_Series. - person FXQuantTrader; 02.07.2016