首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将数据从Server导入quantmod?

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

Stack Overflow用户
提问于 2017-02-04 10:34:43
回答 1查看 441关注 0票数 0

我正在寻找一些指导,并希望我做了正确的事情张贴在这里。我希望从Server用GetSymbols将数据输入到Quantmod。我是R的新手,但我有使用SQL Server的背景,不是专业人员,而是找到了我的方向。我已经将所有数据导入到Server中的一个表中,该表名为引号,包含以下列;

代码语言:javascript
复制
 - 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包连接到数据库:

代码语言:javascript
复制
 - (cn <- odbcDriverConnect(connection="Driver={SQL Server Native Client 11.0};server=localhost;database=DB;trusted_connection=yes;")) 

并在R中进行各种select语句,但我无法将数据输入Quantmod,而不必执行其他解决方法,比如从SQL导出到csv。从雅虎导入数据是一个问题,因为我找不到完整的雅虎代码列表。

是否有从Server直接将数据输入R和quantmod的方法?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-01 20:09:28

像这样的东西应该能起作用。

代码语言:javascript
复制
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)
    }
}

现在连接到quantmod基础设施:

代码语言:javascript
复制
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)
}

示例用法:

代码语言:javascript
复制
APPL <- getSymbols("AAPL", src="DB", auto.assign=F)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42039322

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档