2015-01-17 14 views
5

Ich muss ändern this example code für die Verwendung mit Intraday-Daten, die ich von here und von here erhalten sollte. Wie ich es verstehe, funktioniert der Code in diesem Beispiel gut mit irgendwelchen historischen Daten (oder nicht?), So läuft mein Problem dann auf eine Frage des Ladens der Anfangsdaten in einem notwendigen Format hinaus (ich meine täglich oder intraday). Wie ich auch aus den Antworten auf this question verstehe, ist es unmöglich, Intraday-Daten mit getSymbols() zu laden. Ich habe versucht, diese Daten auf meine Festplatte zu laden und dann mit einer read.csv() Funktion zu bekommen, aber dieser Ansatz hat nicht so gut funktioniert. Schließlich habe ich in verschiedenen Artikeln (z. B. here) einige Lösungen dieses Problems gefunden, aber alle scheinen sehr kompliziert und "künstlich" zu sein.Laden Intraday-Daten in R für die Handhabung mit quantmod

Also meine Frage ist, wie die gegebenen Intraday-Daten in den gegebenen Code elegant und korrekt aus der Sicht des Programmierers geladen werden, ohne das Rad neu zu erfinden?

P.S. Ich bin sehr neu in der Analyse von Zeitreihen in R und quantstrat. Wenn also meine Frage unklar erscheint, lassen Sie mich wissen, was Sie wissen müssen, um es zu beantworten.

Antwort

9

Ich weiß nicht, wie man das macht, ohne das Rad neu zu erfinden, weil mir keine existierenden Lösungen bekannt sind. Es ist jedoch ziemlich einfach mit einer benutzerdefinierten Funktion zu tun.

intradataYahoo <- function(symbol, ...) { 
    # ensure xts is available 
    stopifnot(require(xts)) 
    # construct URL 
    URL <- paste0("http://chartapi.finance.yahoo.com/instrument/1.0/", 
    symbol, "/chartdata;type=quote;range=1d/csv") 

    # read the metadata from the top of the file and put it into a usable list 
    metadata <- readLines(paste(URL, collapse=""), 17)[-1L] 
    # split into name/value pairs, set the names as the first element of the 
    # result and the values as the remaining elements 
    metadata <- strsplit(metadata, ":") 
    names(metadata) <- sub("-","_",sapply(metadata, `[`, 1)) 
    metadata <- lapply(metadata, function(x) strsplit(x[-1L], ",")[[1]]) 
    # convert GMT offset to numeric 
    metadata$gmtoffset <- as.numeric(metadata$gmtoffset) 

    # read data into an xts object; timestamps are in GMT, so we don't set it 
    # explicitly. I would set it explicitly, but timezones are provided in 
    # an ambiguous format (e.g. "CST", "EST", etc). 
    Data <- as.xts(read.zoo(paste(URL, collapse=""), sep=",", header=FALSE, 
    skip=17, FUN=function(i) .POSIXct(as.numeric(i)))) 
    # set column names and metadata (as xts attributes) 
    colnames(Data) <- metadata$values[-1L] 
    xtsAttributes(Data) <- metadata[c("ticker","Company_Name", 
    "Exchange_Name","unit","timezone","gmtoffset")] 
    Data 
} 

Ich würde in Erwägung ziehen, etwas wie quantmod hinzuzufügen, aber es müsste getestet werden. Ich habe das in weniger als 15 Minuten geschrieben, also bin ich sicher, dass es einige Probleme geben wird.

+0

Danke, Joshua, für den beigefügten Code. Wie ich bereits erwähnt habe, bin ich sehr neu in all dem und die R-Programmierung unterscheidet sich geringfügig von all dem, was ich vorher gemacht habe. Also war ich mir nicht sicher, ob eine Out-of-the-Box-Lösung existierte und entschied zu fragen, weil ich dachte, dass es existieren müsste. Wie auch immer, dein Code wird mir bei weiteren Erkundungen von R- und Quantmod-Fähigkeiten helfen, auch wenn ich einige Probleme damit habe. –

Verwandte Themen