2015-01-17 22 views
5

Tôi cần sửa đổi this example code để sử dụng dữ liệu trong ngày với dữ liệu trong ngày mà tôi sẽ nhận được từ here và từ here. Như tôi đã hiểu, mã trong ví dụ đó hoạt động tốt với bất kỳ dữ liệu lịch sử nào (hay không?), Do đó, vấn đề của tôi sau đó sẽ giải quyết vấn đề tải dữ liệu ban đầu theo định dạng cần thiết (ý tôi là hàng ngày hoặc trong ngày).Tải dữ liệu trong ngày vào R để xử lý dữ liệu với quantmod

Vì tôi cũng hiểu từ câu trả lời trên this question, không thể tải dữ liệu trong ngày bằng getSymbols(). Tôi đã cố gắng tải dữ liệu đó vào ổ cứng của mình và để có được nó sau đó với một hàm read.csv(), nhưng cách tiếp cận này cũng không hoạt động. Cuối cùng, tôi đã tìm thấy một số giải pháp cho vấn đề này trong các bài viết khác nhau (ví dụ: here), nhưng tất cả chúng có vẻ rất phức tạp và "nhân tạo". Vì vậy, câu hỏi của tôi là làm thế nào để tải dữ liệu trong ngày nhất định vào mã cho trước một cách thanh lịch và chính xác từ quan điểm của lập trình viên, mà không cần phát minh lại bánh xe?

P.S. Tôi rất mới để phân tích chuỗi thời gian trong R và quantstrat do đó, nếu câu hỏi của tôi có vẻ là mơ hồ cho tôi biết những gì bạn cần biết để trả lời nó.

Trả lời

9

Tôi không biết cách thực hiện điều này mà không cần "phát minh lại bánh xe" vì tôi không biết bất kỳ giải pháp hiện có nào. Nó khá dễ dàng để làm với một chức năng tùy chỉnh mặc dù.

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 
} 

Tôi muốn xem xét thêm thứ gì đó như thế này vào quantmod, nhưng nó sẽ cần phải được kiểm tra. Tôi đã viết điều này trong chưa đầy 15 phút, vì vậy tôi chắc chắn sẽ có một số vấn đề.

+0

Cảm ơn bạn, Joshua, cho mã được đính kèm. Như tôi đã đề cập, tôi rất mới đối với tất cả chương trình R và chương trình này hơi khác so với tất cả những gì tôi đã từng làm trước đây. Vì vậy, tôi không chắc liệu có giải pháp nào ngoài giải pháp và quyết định hỏi, bởi vì tôi nghĩ nó phải tồn tại. Dù sao, mã của bạn sẽ giúp tôi khám phá thêm về khả năng R và quantmod, ngay cả khi tôi có một số vấn đề với nó. –

Các vấn đề liên quan