R:获取quantmod的chartSeries和AddTA不显示最后一个值

时间:2017-10-27 17:44:11

标签: r charts quantmod

使用chartSeries时,默认情况下它还会在图的左上角显示最后一个值。有没有办法阻止它这样做?

使用addTA添加新TA时,您可以通过设置参数legend =“”来避免绘图中的最后一个值,但前提是您要为TA创建新绘图。如果TA位于先前绘制的图形上,则无论您在图例参数中放置什么,它都将显示最后一个值。

getSymbols ("AAPL", src = "google")
chartSeries(AAPL)

我可以在这里使用什么来阻止它打印图上的最后一个值?

addTA(EMA(Cl(AAPL)), on = 1, legend = "")

这仍然会打印图表左上角的最后一个值。奇怪的是,如果你正在绘制一个像这样的新情节,它就不会这样做:

addTA(EMA(Cl(AAPL)), legend = "")

默认是这样的,还是我可以做些什么来解决它?

1 个答案:

答案 0 :(得分:4)

默认显示最后一个值(是,烦人)。您可能需要修改源代码才能删除addTA中显示的最后一个数字。

我不使用addTA,而是add_TAchart_Series,因为我觉得它们看起来好多了(quantmod的第二代图表)。这是一个解决方案,用于删除显示add_TA版本的最后一个数字。但您必须愿意修改源代码。

在add_TA中,您需要修改源代码的第56-60行:

替换text.exp,即:

# this is inside add_TA:
if (is.na(on)) {
    plot_object$add_frame(ylim = c(0, 1), asp = 0.15)
    plot_object$next_frame()
    text.exp <- expression(text(x = c(1, 1 + strwidth(name)), 
                                y = 0.3, labels = c(name, round(last(xdata[xsubset]), 
                                                                5)), col = c(1, col), adj = c(0, 0), cex = 0.9, 
                                offset = 0, pos = 4))
    plot_object$add(text.exp, env = c(lenv, plot_object$Env), 

进行这些修改:

if (is.na(on)) {
    plot_object$add_frame(ylim = c(0, 1), asp = 0.15)
    plot_object$next_frame()
    text.exp <- expression(text(x = c(strwidth(name)), # <- affects label on the subchart
                            y = 0.3, labels = name, col = c(col), adj = c(0), cex = 0.9, 
                            offset = 1, pos = 4))
     plot_object$add(text.exp, env = c(lenv, plot_object$Env), 
                expr = TRUE)

... 并将此修改后的代码分配给一个名为add_TA.mine的新变量:

add_TA.mine <- function (x, order = NULL, on = NA, legend = "auto", yaxis = list(NULL, 
                                                                  NULL), col = 1, taType = NULL, ...) 
{
  lenv <- new.env()
  lenv$name <- deparse(substitute(x))
  lenv$plot_ta <- function(x, ta, on, taType, col = col, ...) {
    xdata <- x$Env$xdata 
    ....
     [all the code for the rest of the function with modifications]....

           }
    }
    plot_object
}

现在,只需使用修改后的函数

运行代码
library(quantmod)
getSymbols("AAPL")

environment(add_TA.mine) <- environment(get("add_TA", envir = asNamespace("quantmod")))
assignInNamespace(x = "add_TA", value = add_TA.mine, ns = "quantmod")


chart_Series(AAPL, subset = "2017")
add_TA(RSI(Cl(AAPL)))
quantmod:::add_TA(RSI(Cl(AAPL)))

您可以看到不再打印的最后一个值:

enter image description here

(您可以在旧的addTA代码中进行相同类型的更改(如果您真的想要坚持使用旧版图,可能会通过chartSeries

如果您对这些更改感到满意,并希望在add_TA中进行更改,则可以自行重新编译quantmod源代码(即需要下载quantmod源代码)并重新编译包)。如果你搞得一团糟,你可以随时重新下载原始的quandmod源代码。