【问题标题】:R (quantmod), plot own indicator, Error in seq.defaultR(quantmod),绘制自己的指标,seq.default 中的错误
【发布时间】:2017-01-27 22:50:40
【问题描述】:

我想在 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

怎么了?

【问题讨论】:

    标签: r xts quantmod indicator


    【解决方案1】:

    问题是own.ind 对象的索引与AAPL 对象中的任何索引值都不对齐。这是因为as.xts 默认将矩阵的行名转换为POSIXctPOSIXct 对象有时区,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 而无需像其他答案所说的那样创建函数。

    chartSeries(AAPL, TA="addTA(own.ind)")
    

    【讨论】:

    • 这大大简化了事情。非常感谢!
    【解决方案2】:

    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()
    

    【讨论】:

    • hvollmeier... 没有任何与您联系的信息,但我想告诉您,我相信您的 VXX 保管箱提要中存在一个错误,该错误已在多个博客网站上列出。目前,从 2014 年 8 月 4 日和之前的日期开始,您的 Feed 中的价格下降了 4 倍,这看起来很奇怪,并且未反映在其他 Feed(如 yahoo 历史)中。实际上,我只是猜测你是那个 hvollmeier,如果不是,请忽略这个:-) 提前抱歉在这里太离题了:-(
    • 宾果游戏,@hvollmeier。感谢您的修复和欢迎数据。
    猜你喜欢
    • 2013-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-26
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多