Я пытаюсь написать простую функцию в формате add_TA
, которая добавляет общие сегменты к графику. Функция получит матрицу N на 4. Каждая строка в матрице является сегментом.
Я пытался изменить add_SMA
под свои нужды, но безуспешно.
add_Segments <- function (segs , ...)
{
lenv <- new.env()
lenv$add_segments <- function(segs , ...) {
segments(segs[,1] , segs[,2] , segs[,3] , segs[,4] , ...)
}
mapply(function(name, value) {
assign(name, value, envir = lenv)
}, names(list(segs = segs , ...)), list(segs = segs, ...))
plot_object <- current.chob()
lenv$xdata <- segs
plot_object$set_frame(2)
exp <- parse(text = "add_segments(segs = segs , ...)")
plot_object$add(exp, env = c(lenv, plot_object$Env), expr = TRUE)
plot_object
}
Это терпит неудачу с
Error in plot.window(c(1, 1658), c(NaN, NaN)) : need finite 'ylim' values
Хотя я позаботился об этом, когда установил xdata
в lenv
, но, думаю, я этого не сделал.
Это воспроизводимый пример, иллюстрирующий результат и правильную работу segments
.
require(quantmod)
s <- get(getSymbols('MSFT'))["2012"]
chart_Series(s)
segs <- matrix(c(183,31.61,213,30.20,221,26.34,233,26.26) , byrow = T , nrow = 2)
segments(segs[,1] , segs[,2] , segs[,3] , segs[,4] , col = 'red')
Причина, по которой я использую формат add_TA
(а не просто рисование, как в приведенном выше примере), заключается в том, что я хочу добавить дополнительные индикаторы и хочу, чтобы сегменты оставались на графике после обновления объекта графика.