2015-01-17 29 views
5

Devo modificare this example code per utilizzarlo con dati intraday che dovrei ottenere da here e da here. Come ho capito, il codice in questo esempio funziona bene con qualsiasi dato storico (o meno?), Quindi il mio problema si riduce a una questione di caricamento dei dati iniziali in un formato necessario (intendo quotidiano o intraday).Caricamento dei dati intraday in R per la gestione con quantmod

Come comprendo anche dalle risposte su this question, è impossibile caricare i dati intraday con getSymbols(). Ho provato a scaricare quei dati nel mio hard-drive e ad ottenerlo con una funzione read.csv(), ma questo approccio non ha funzionato altrettanto bene. Infine, ho trovato alcune soluzioni di questo problema in vari articoli (ad esempio here), ma tutte sembrano essere molto complicate e "artificiali".

Quindi, la mia domanda è come caricare i dati intraday dati nel codice dato elegantemente e correttamente dal punto di vista del programmatore, senza reinventare la ruota?

P.S. Sono molto nuovo all'analisi delle serie storiche in R e quantstrat quindi se la mia domanda sembra essere oscura fammi sapere cosa devi sapere per rispondere.

risposta

9

Non so come farlo senza "reinventare la ruota" perché non sono a conoscenza di alcuna soluzione esistente. È abbastanza facile da fare con una funzione personalizzata però.

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 
} 

Prenderebbe in considerazione l'aggiunta di qualcosa di simile a Quantmod, ma sarebbe necessario testarlo. L'ho scritto in meno di 15 minuti, quindi sono sicuro che ci saranno dei problemi.

+0

Grazie, Joshua, per il codice allegato. Come ho già detto, sono molto nuovo a tutto questo e la programmazione R differisce leggermente da tutto ciò che ho fatto prima. Quindi, non ero sicuro se esista una soluzione pronta e decisa a chiedere, perché pensavo che dovesse esistere. Ad ogni modo, il tuo codice mi aiuterà in ulteriori esplorazioni delle abilità R e quantod, anche se ho qualche problema con esso. –