Могут ли серии графиков показывать более 1 индикатора TTR, когда строка серии графиков находится внутри инструкции IF?

#r #menu #rstudio #xts #quantmod

#r #меню #rstudio #xts #quantmod

Вопрос:

Я готовлю меню, которое связано с созданием графика, где источником является объект xts и 3 индикатора TTR. Кажется, что «оператор if», который находится вокруг строки chartSeries, делает видимыми не все индикаторы. В настоящее время даже при изменении порядка индикаторов результат показывает только индикатор в самом конце строки серии графиков.

Ниже вы видите мой код, который я запускаю в R-Studio.

 ########################################################
# 1. Create a minimal df
########################################################
date <- as.Date(c("2015-10-11", "2016-11-11", "2017-12-11"))
o <- c(1459.60, 1458.47, 1457.71)
c <- c(1458.44, 1457.68, 1458.27)
h <- c(1459.76, 1459.01, 1458.27)
l <- c(1458.08, 1457.52, 1457.70)
v <- c(185, 24080, 9503)
a <- c(185, 24080, 9503)

d3 <- data.frame(date,o,c,h,l,v,a)
colnames(d3)[1:7] <- c('date', 'open', 'close', 'high', 'low', 'volume', 'adjusted')

########################################################
# 2. Produce an xts(x3) based on a df (d3)
########################################################
x3 <- xts(d3[,-1], order.by = d3$date)

########################################################
# 3. Extraction of menu, to select 1 which should
# create a graph with 3 indicators
########################################################
cat("14")
menu.level.1 <- readline(prompt="Please select just number 1: ")
if (menu.level.1 == 1) {
  print("...create graph")
  chartSeries(x3); addRSI(1); addMACD(2, 1, 1); addBBands(2)
}
  

Ответ №1:

Кажется, замена строк chartSeries с этой строкой будет работать:

 chartSeries(myxts1, TA="addRSI();addMACD();addBBands()")
  

Ответ №2:

Сначала я думал, что ваш пример отлично работает вне RStudio, но потом я заметил addMACD , что результат не добавляется.

 library(quantmod)
data(sample_matrix)
x <- as.xts(sample_matrix)
if (TRUE) {
  chartSeries(x)
  addRSI()
  addMACD()
  addBBands()
}
  

Не завернуто в plot()

Затем я вспомнил, что иногда это может произойти, когда вы используете chartSeries or chart_Series где-то, кроме верхнего уровня (например, В функции, цикле for и т. Д.). Решение заключается в переносе add* вызовов plot .

 if (TRUE) {
  chartSeries(x)
  plot(addRSI())
  plot(addMACD())
  plot(addBBands())
}
  

Завернутый в plot()