2017-02-04 12 views
0

私はいくつかの指針を探しています。私は正しいことをここに掲載しました。私は、SQL ServerからGetSymbolsでQuantmodにデータを入力しようとしています。私はRの新人ですが、プロではなく自分の道を見いだして、SQL Serverを使用している背景を持っています。 次の列を持つQuotesというSQL Serverの1つのテーブルにすべてのデータをインポートしました。SQL Serverからquantmodにデータをインポートする方法は?

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

及びRに様々なselect文を作るが、私がすることなく、Quantmodにデータを取得するに失ったよ:私はRODBCパッケージを使用してデータベースに接続することができるよ

- 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) 

csvへのSQLからのエクスポートのような他の回避策を実行してください。 Yahooからのデータのインポートは、私が完全なYahoo-tickerlistを見つけることができないため、問題です。

Rに直接データを取得する方法はありますか?quantmodをSQL Serverから取得する方法はありますか?

答えて

0

このようなことは、このトリックを行う必要があります。

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インフラにフック:

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) 
} 

使用例:

APPL <- getSymbols("AAPL", src="DB", auto.assign=F) 
+0

近いので今、私は引用に市場価格からテーブル名を変更しました。 [RODBC] ERROR:状態IM002、コード0、メッセージ[Microsoft] [ODBC Driver Manager]データソース名が見つからず、デフォルトドライバが指定されていない[RODBC]エラー:状態01S00、 (DB、qry、stringsAsFactors = FALSE):最初の引数は開いているRODBCチャネルではありません。 ' – rusty10014

+0

[OK]これまで私はすでにcnにodbcdriverconnectを記述していて、単純にgetPrices.DB領域からそれを削除しました。今では、次のような提案の例に慣れてきています: '[.data.frame'(r、、2:7)のエラー:未定義の列を選択しました。 ' – rusty10014

+0

コードが欠落しているため、 getSymbolsで必須の "Adjusted"カラム。現在は機能しています。 – rusty10014

関連する問題