R(quantmod),绘图自己的指标,seq.default中的错误

时间:2017-01-27 22:50:40

标签: r xts quantmod indicator

我想在quantmod中绘制我自己的简单指标,如下所示:

own.ind <- as.matrix(c(1,2,3), ncol=1, nrow=3)
rownames(own.ind) <- c("2017-01-23", "2017-01-24", "2017-01-25")
own.ind <- as.xts(own.ind)
getSymbols("AAPL", from = as.Date("2017-01-23"), to = as.Date("2017-01-25"))
chartSeries(AAPL)
addTA(own.ind)

但它让我错误地说

Error in seq.default(min(tav * 0.975, na.rm = TRUE), max(tav * 1.05, na.rm = TRUE),  : 
'from' cannot be NA, NaN or infinite

以及另外两个警告:

1: In min(tav * 0.975, na.rm = TRUE) :  no non-missing arguments to min; returning Inf
2: In max(tav * 1.05, na.rm = TRUE) :  no non-missing arguments to max; returning -Inf

出了什么问题?

2 个答案:

答案 0 :(得分:1)

问题是own.ind对象的索引与AAPL对象中的任何索引值都不对齐。这是因为as.xts默认情况下会将矩阵的rownames转换为POSIXct。 <{1}}个对象有时区,POSIXct个对象没有时区。

Date

因此,您需要为R> merge(Cl(AAPL), own.ind) AAPL.Close own.ind 2017-01-23 120.08 NA 2017-01-23 NA 1 2017-01-24 119.97 NA 2017-01-24 NA 2 2017-01-25 121.88 NA 2017-01-25 NA 3 指定dateFormat参数,或直接使用as.xts构造函数和xts

as.Date

现在你可以使用# use dateFormat own.ind <- as.matrix(c(1,2,3), ncol=1, nrow=3) rownames(own.ind) <- c("2017-01-23", "2017-01-24", "2017-01-25") own.ind <- as.xts(own.ind, dateFormat = "Date") merge(Cl(AAPL), own.ind) # AAPL.Close own.ind # 2017-01-23 120.08 1 # 2017-01-24 119.97 2 # 2017-01-25 121.88 3 # use xts constructor and as.Date own.ind <- xts(1:3, as.Date(c("2017-01-23", "2017-01-24", "2017-01-25"))) merge(Cl(AAPL), own.ind) # AAPL.Close own.ind # 2017-01-23 120.08 1 # 2017-01-24 119.97 2 # 2017-01-25 121.88 3 而不必创建一个函数,因为另一个答案说你必须这样做。

addTA

enter image description here

答案 1 :(得分:0)

Joe,你必须创建一个函数来添加系列作为指标。要创建一个每个交易日增加1的指标,如下例所示:

myInd <- function(x) {
  x <- 1:NROW(x)
  return(x)
}

创建新指标:

addMyInd <- newTA(FUN = myInd, legend = "MyInd")

检查class

> class(addMyInd)
[1] “function”

现在让我们在价格图表下方绘制新指标:

getSymbols("AAPL", from = "2017-01-23", to = "2017-01-25")
chartSeries(AAPL,TA=NULL)
addMyInd()

enter image description here