2013-03-26 3 views
2

야후로부터 S & P 500, DJIA 및 30 년 T-Bonds의 일일 데이터를 다운로드하고 데이터를 적절한 시간대에 매핑하여 병합하고 싶습니다. 내 데이터로. 몇 가지 질문이 있습니다.yahoo tickers, time zone and merging

  1. 제 첫 번째 문제는 시세가 올바르게되고 있습니다. yahoo의 웹 사이트에서는 시세표가^GSPC,^DJI 및^TYX 인 것처럼 보입니다. 그러나^DJI는 실패합니다. 왜 그런가?

  2. 내 두 번째 문제점은 표준 시간대를 GMT로 제한하고 싶습니다. (모든 데이터가 동일한 시계에 있는지, GMT가 중립적 인 선택처럼 보이는지 확인하고 싶습니다.) 그러나 나는 그것을 얻을 수 없었습니다. 일하다.

  3. 제 3의 문제점은 야후 데이터를 내 데이터와 병합하고, 다른 방법으로 얻었으며 다른 형식으로 사용할 수 있다는 것입니다. 매일의 데이터이기도합니다.

GMT 표준 시간대로 데이터를 제한하려는 시도입니다. 내 R 스크립트 상단에서 실행됩니다.

df <- structure(list(A = c(-0.011489000171423, -0.00020300000323914, 
0.0430639982223511, 0.0201549995690584, 0.0372899994254112, -0.0183669999241829 
), B = c(0.00110999995376915, -0.000153000000864267, 0.0497750006616116, 
0.0337960012257099, 0.014121999964118, 0.0127800004556775), date = c(9861, 
9862, 9863, 9866, 9867, 9868)), .Names = c("A", "B", "date" 
), row.names = c("0001-01-01", "0002-01-01", "0003-01-01", "0004-01-01", 
"0005-01-01", "0006-01-01"), class = "data.frame") 

내가하고 싶은 : 여기

library("tseries") 
library("xts") 

date.start <- "1999-12-31" 
date.end <- "2013-01-01" 

# tickers <- c("GSPC","TYX","DJI") 
# DJI Fails, why? 
# http://finance.yahoo.com/q?s=%5EDJI 
tickers <- c("GSPC","TYX") # proceed without DJI 

z <- zoo() 
index(z) <- as.Date(format(time(z)),tz="") 

for (i in 1:length(tickers)) 
    { 
    cat("Downloading ", i, " out of ", length(tickers) , "\n") 
    x <- try(get.hist.quote(
     instrument = paste0("^",tickers[i]) 
     , start = date.start 
     , end = date.end 
     , quote = "AdjClose" 
     , provider = "yahoo" 
     , origin = "1970-01-01" 
     , compression = "d" 
     , retclass = "zoo" 
     , quiet = FALSE) 
     , silent = FALSE) 
    print(x[1:4]) # check that it's not empty 
    colnames(x) <- tickers[i] 
    z <- try(merge(z,x), silent = TRUE) 
} 

가 dput 내 데이터 세트 (머리 (DF)) : 여기
Sys.setenv(TZ = "GMT") 
# > Sys.getenv("TZ") 
# [1] "GMT" 
# the TZ variable is properly set 
# but does not affect the time zone in zoo objects, why? 

는 야후의 데이터를 얻을하려면 코드입니다 df의 데이터를 z의 데이터와 병합하십시오. 나는 그것이 작동하도록 할 수 없습니다.

저는 R이 처음이어서 효율성, 모범 사례 등에 대한 조언을 많이드립니다. 감사합니다.

편집 : 솔루션

첫 번째 문제에
  1. : GSEE의 제안에 따라 다우 존스 산업 평균 데이터가 quantmod 패키지로 다운로드 할 수 있습니다 : 따라서, 대신 "^ DJI"시세의, yahoo에서 더 이상 사용할 수없는 "DJIA"티커를 사용하십시오. "DJIA"티커에는 캐럿이 없습니다.

  2. 두 번째 문제에 대한 조슈아 울리히 (Joshua Ulrich)는 "요일에는 시간 구성 요소가 없기 때문에 날짜에는 시간대가 없습니다."라고 지적합니다.

  3. 세 번째 문제 : 데이터 프레임이 agstudy에서 주석으로 지적한대로 손상된 것으로 나타납니다.

    toDate <- function(x){ as.Date(as.character(x), format("%Y%m%d")) } 
    dtz <- read.zoo("myData.csv" 
        , header = TRUE 
        , sep = "," 
        , FUN = toDate 
    ) 
    dtx <- as.xts(dtz) 
    
    : 여기
    library(quantmod) 
    

    이 내 CSV 파일에서 적절한 날짜를 가져 오는 데 사용했던 코드 :

내 솔루션은 quantmod 패키지와 연결된 동물원/XTS 패키지에 의존

csv 파일의 날짜가 "19861231"형식의 단일 열에 저장되었습니다. 올바른 날짜를 얻는 열쇠는 "as.character()"에 날짜를 래핑하는 것이 었습니다. 이 코드의 일부는 R - Stock market data from csv to xts에서 영감을 받았습니다. 나는 동물원/xts 매뉴얼이 도움이된다는 것을 발견했다.

나는 다음이 데이터 세트에서 날짜 범위를 추출 : I 다운로드 다른 데이터가 같은 기간을 포함 있도록

date.start <- start(dtx) 
date.end <- end(dtx) 

나는 quantmod의 getSymbols 기능과 그 날짜를 사용합니다.

다음은 세 개의 시세 표시기를 모두 사용하는 코드입니다. GSEE는 의견에 지적

tickers <- c("^GSPC","^TYX","DJIA") 
data <- new.env() # the data environment will store the data 
do.call(cbind, lapply(tickers 
    , getSymbols 
    , from = date.start 
    , to = date.end 
    , env = data # data saved inside an environment 
    ) 
) 
ls(data) # see what's inside the data environment 
data$GSPC # access a particular ticker 

또한 FALSE 옵션 auto.assign =이 옵션과 함께 ENV = 데이터을 (그렇지 않으면 다운로드가 실패) 사용할 수 없습니다, 유의하십시오.

큰 도움을 주셔서 감사합니다.

+0

을 할 방법 . 이 페이지는 제공자 페이지에서 확인할 수 있습니다. http://finance.yahoo.com/q/hp?s=%5ETYX+Historical+Prices – agstudy

+0

귀하의 df가 날짜를 골랐습니다. 따라서 귀하의 시세표와 병합 할 수 없습니다. – agstudy

+0

요일에는 시간 구성 요소가 없으므로 날짜에는 시간대가 없습니다. –

답변