如何将数据从SQL Server导入quantmod?

时间:2017-02-04 10:34:44

标签: sql-server r quantmod

我正在寻找一些指导,希望我能在这里发布正确的信息。我希望用SQL Server的GetSymbols向Quantmod输入数据。我是R的新手但是有一个使用SQL Server的背景,不是专业人士,而是找到我的方式。 我已将所有数据导入SQL Server中名为Quotes的一个表中,其中包含以下列:

 - Ticker Varchar(10)
 - Name varchar(50)
 - [Date] datetime
 - [Open] Decimal(19,9)
 - High Decimal(19,9)
 - Low Decimal(19,9)
 - [Close] Decimal(19,9)
 - Volume Decimal(19,9)
 - Signal Decimal(19,9)

我可以使用RODBC包连接到数据库:

 - (cn <- odbcDriverConnect(connection="Driver={SQL Server Native Client 11.0};server=localhost;database=DB;trusted_connection=yes;")) 

并在R中制作各种select语句,但我在将数据导入Quantmod时丢失了,而不必像从SQL导出到csv那样执行其他解决方法。从Yahoo导入数据是一个问题,因为我找不到完整的Yahoo-tickerlist。

有没有办法直接将数据从SQL Server中获取到R和quantmod

1 个答案:

答案 0 :(得分:0)

这样的事情应该可以解决问题。

forms:Form

现在挂钩到quantmod基础设施:

getPrices.DB <- function(Symbol, from=NA) {
    cn <- "add your connection info here"
    qry <- sprintf("select [Date], [Open],[High],[Low],[Close],[Volume],[Signal] from MarketPrice where Ticker = '%s'", Symbol)
    if (!is.na(from)) { qry <- paste(qry, sprintf(" and [Date]>= '%s'", from)) }
    DB <- odbcDriverConnect(cn)
    r <- sqlQuery(DB, qry, stringsAsFactors = FALSE)
    odbcClose(DB)
    if (!is.null(r) && NROW(r) >= 1) {
        x <- xts(r[, 2:7], order.by = as.POSIXct(r[, 1], tz = "UTC"))#can eliminate tz if you want in local timezone
        indexFormat(x) <- "%Y-%b-%d %H:%M:%OS3  %z" #option. I find useful for debuggging
        colnames(x) <- paste(Symbol, c("Open", "High","Low", "Close", "Volume", "Signal"), sep = ".")
        return(x)
    } else {
        return(NULL)
    }
}

示例用法:

getSymbols.DB <- function(Symbols, env, ...) {
    importDefaults("getSymbols.DB")
    this.env <- environment()
    for (var in names(list(...))) {assign(var, list(...)[[var]], this.env)}
    if (!hasArg(from)) from <- NA
    if (!hasArg(verbose)) verbose <- FALSE
    if (!hasArg(auto.assign)) auto.assign <- FALSE
    for (i in 1:length(Symbols)) {
        if (verbose) cat(paste("Loading ", Symbols[[i]], paste(rep(".", 10 - nchar(Symbols[[i]])), collapse = ""), sep = ""))
        x <- getPrices.DB(Symbols[[i]], from = from)
        if (auto.assign) assign(Symbols[[i]], x, env)
        if (verbose) cat("done\n")
    }
    if (auto.assign)
        return(Symbols)
    else
        return(x)
}