R/getOnvista.R

Defines functions getOnvista

Documented in getOnvista

#'
#' 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)
}
rengelke/quantTraiding_trato documentation built on Oct. 13, 2020, 12:01 p.m.