2017-02-04 1 views
0

Ich bin auf der Suche nach etwas Anleitung und hoffe, dass ich das Richtige getan habe, es hier zu posten. Ich bin auf der Suche nach Daten zu Quantmod mit GetSymbols von SQL Server eingeben. Ich bin neu in R, habe aber einen Hintergrund mit SQL Server, kein Profi, sondern finde meinen Weg. Ich habe alle meine Daten in eine Tabelle in SQL Server mit dem Namen Quotes mit den folgenden Spalten importiert;Wie importiere ich Daten von SQL Server in quantmod?

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

ich in der Lage bin zu der Datenbank mit dem RODBC Paket verbinden:

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

und machen verschiedene select-Anweisung in R, aber ich bin in immer die Daten in Quantmod verloren, ohne zu haben, andere Workarounds wie das Exportieren von SQL nach csv. Das Importieren der Daten von Yahoo ist ein Problem, da ich keine vollständige Yahoo-Tickerliste finden kann.

Gibt es eine Möglichkeit, Daten direkt in R und quantmod von SQL Server zu erhalten?

Antwort

0

So etwas sollte den Trick machen.

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

nun in die quantmod Infrastruktur Haken:

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

Beispiel Nutzung:

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

jetzt so nah, änderte ich den Namen der Tabelle von Marktpreise zu Quotes. Aber wenn ich das Beispiel verwende, erhalte ich den folgenden Fehler: '[RODBC] FEHLER: Status IM002, Code 0, Nachricht [Microsoft] [ODBC Treiber-Manager] Datenquellenname nicht gefunden und kein Standardtreiber angegeben [RODBC] FEHLER: Zustand 01S00, Code 0, Nachricht [Microsoft] [ODBC Treibermanager] Ungültige Verbindungszeichenfolge attributODBC-Verbindung fehlgeschlagen ' ' Fehler in sqlQuery (DB, qry, stringsAsFactors = FALSE): erstes Argument ist kein offener RODBC-Kanal – rusty10014

+0

Ok, habe obigen Fehler fällig dazu hatte ich das odbcdriverconnect schon vorher in der cn angegeben und es einfach aus dem getPrices.DB Bereich entfernt. Jetzt bleibe ich im Vorschlagsbeispiel stecken: 'Fehler in' [.data.frame' (r,, 2: 7): undefinierte Spalten ausgewählt' – rusty10014

+0

Der letzte Fehler wurde ebenfalls gefunden, da der Code fehlte "Adjusted" Spalte, die in den getSymbols obligatorisch ist und jetzt funktioniert. – rusty10014

Verwandte Themen