#'
#' Download Historical Price Data From Onvista
#'
#' @param onvista_id a character vector specifying the onvista
#' notation id to be downloaded
#' @param splitted boolean, FALSE if historical data is not splitted, TRUE
#' if historical data is splitted into fractions
#'
#' @return returns an xts object containing historical price data of the asset
#' @export getOnvista
#' @import zoo
#' @import xts
#' @importFrom lubridate dmy
#'
#' @examples getOnvista("155884297")
#'
getOnvista <- function(onvista_id, splitted = FALSE) {
yesterday <- paste0(
strsplit(as.character(Sys.Date() - 1), "-")[[1]][3], ".",
strsplit(as.character(Sys.Date() - 1), "-")[[1]][2], ".",
strsplit(as.character(Sys.Date() - 1), "-")[[1]][1]
)
if (!isTRUE(splitted)) {
onvista_url <- paste0(
"https://www.onvista.de/derivative/snapshotHistoryCSV?idNotation=",
onvista_id, "&datetimeTzStartRange=01.01.2010&datetimeTzLastRange=",
yesterday, "&codeResolution=1D"
)
onvista_historic <- NULL
while (is.null(onvista_historic)) {
try({
tmp <- tempfile()
download.file(onvista_url, destfile = tmp, method = "libcurl")
onvista_historic <- read.csv2(tmp,
fileEncoding = c("UTF-8"),
sep = ";",
col.names = c("Date", "Open", "Close",
"High", "Low"),
allowEscapes = TRUE
)
unlink(tmp)
})
}
} else {
date_range <- c("01.01.2005", "01.01.2010", "01.01.2015", "01.01.2020")
onvista_historic <- lapply(date_range, function (x) {
onvista_url <- paste0(
"https://www.onvista.de/etf/snapshotHistoryCSV?idNotation=",
onvista_id, "&datetimeTzStartRange=", x,
"&timeSpan=5Y&codeResolution=1D")
onvista_historic_period <- NULL
while (is.null(onvista_historic_period)) {
try({
tmp <- tempfile()
download.file(onvista_url, destfile = tmp, method = "libcurl")
onvista_historic_period <- read.csv2(tmp,
fileEncoding = c("UTF-8"),
sep = ";",
col.names = c("Date", "Open", "High",
"Low", "Close", "Volume"),
allowEscapes = TRUE
)
unlink(tmp)
})
}
onvista_historic_period
})
onvista_historic <- do.call(rbind, onvista_historic)
}
onvista_historic$Date <- as.Date(as.POSIXct(
lubridate::dmy(onvista_historic$Date, tz = "UTC")
), tz = "UTC")
onvista_historic <- onvista_historic[, c("Date", "Open", "High", "Low", "Close")]
onvista_historic <- as.xts(onvista_historic[, -1], order.by = onvista_historic[, 1])
onvista_historic <- onvista_historic[!(weekdays(index(onvista_historic)) %in%
c("Saturday", "Sunday")), ]
#fix for close data only
if (all(diff(as.numeric(onvista_historic[1,])) == 0)) {
onvista_historic$Open <- lag(onvista_historic$Open, k=1, na.pad = TRUE)
onvista_historic <- onvista_historic[-1, ]
onvista_historic$High <- apply(cbind.xts(onvista_historic$Open, onvista_historic$Close), 1, max)
onvista_historic$Low <- apply(cbind.xts(onvista_historic$Open, onvista_historic$Close), 1, min)
}
return(onvista_historic)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.