2015-01-17 46 views
5

ile işlemek için gün içi verileri yükleme R here ve here'dan edinmem gereken gün içi verileriyle kullanmak için this example code'u değiştirmem gerekiyor. Anladığım kadarıyla, bu örnekteki kod, herhangi bir tarihsel veriyle (ya da değil) iyi çalışır, bu yüzden benim problemim, başlangıç ​​verilerini gerekli bir biçimde (günlük ya da gün içi) günlük olarak yükleme sorunuyla karşı karşıya kalır.Quantmod

this question'daki yanıtlardan da anlaşılacağı gibi, gün içi verileri getSymbols() ile yüklemek mümkün değildir. Bu verileri sabit sürücüme indirmeye ve read.csv() işlevine sahip olmaya çalıştım, ancak bu yaklaşım işe yaramadı. Son olarak, çeşitli sorunlarda bu sorunun birkaç çözümünü buldum (örneğin, here), ama hepsi çok karmaşık ve "yapay" gibi görünüyor.

Sorularım, verilen gün içi verileri, verilen kodu, programlayıcının bakış açısından, tekerleği yeniden keşfetmeden, zarif ve doğru bir şekilde nasıl yükleyeceğimizdir?

P.S. R ve quantstrat'taki zaman serilerinin analizinde çok yeniyim, bu yüzden eğer benim sorum açık değilse, neye cevap vermek için bilmeniz gerektiğini bilmeme izin verin.

cevap

9

Bunu, "tekerleği yeniden icat etmeden" nasıl yapılacağını bilmiyorum çünkü mevcut çözümlerden haberdar değilim. Gerçi özel bir işlevle yapmak çok kolay.

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 
} 

Ben quantmod için böyle bir şey eklemeyi düşünün, ancak test edilecek gerekir. Bunu 15 dakikadan kısa bir sürede yazdım, eminim ki bazı sorunlar olacak.

+0

Teşekkürler, ekli kod için Joshua. Bahsettiğim gibi, tüm bunlara çok yeniyim ve R programlama, daha önce yaptığım her şeyden biraz farklı. Yani, kutudan çıkmış bir çözüm bulunup bulunmadığına ve sormaya karar verdiğinden emin değildim, çünkü var olması gerektiğini düşündüm. Her neyse, kodunuz, R ve quantmod yeteneklerinin daha ilerideki araştırmalarında bana yardımcı olacak, hatta bazı sorunlarım olsa bile. –