2016-07-27 19 views
1

나는 rbresearch에 의해 기세 전략을 S & P 500 기업으로 복제하려고했습니다. 그러나 그것은 getSymbols 모든 시세에 대한 가격 데이터를 잡을 수 없음을 밝혀와 나는 단지 사용하여 약 300 주식을 가지고 : R - xts 객체가 문자열을 만나는 것은 표준 모호하지 않은 형식이 아닙니다

getSymbols(symbols, src='yahoo', index.class=c("POSIXt","POSIXct"), from='2000-01-01', to = '2015-12-31') 

내가 "이 thread는이 문제에 대해 논의하고 소스에서 오는 될 수 발견 chart.yahoo.com ". 그러므로 나는 jlhoward에 의해 제안 된 방법을 채택하고 경고없이 완벽하게 작동하는 것처럼 보였다.

업데이트 : quantmod 패키지를 확인한 후, 지금도 ichart.yahoo.com에서 데이터를 가져 오는 중임을 발견했습니다. 이 월별 가까운 계산에 관해서

그러나, 오류가 여기에

Error in try.xts(x) : 
    Error in as.POSIXlt.character(x, tz, ...) : character string is not in a standard unambiguous format 
Called from: try.xts(x) 

내 질문입니다, 같이 읽고 이해가 안 무엇 :

1) 가능한 방법이 있나요 더 신뢰할 수있는 따옴표를 제공하는 "ichart.yahoo.com"에 getSymbols를 지정 하시겠습니까?

2) 모든 심볼을 xts 객체로 변환하여 try.xts에서 오류가 발생한 이유는 무엇입니까?

3) ISO 8601 형식이 아닌 날짜가 있다고 생각합니다. 그러나 날짜는 일 (day)에 불과하기 때문에 날짜를 POSIXct로 변환하는 방법을 찾지 못했습니다.

4) 코드에 대한 모든 의견을 보내 주시면 감사하겠습니다.

코드가 첨부되어 있고 sp500components.csv는 here에서 다운로드 할 수 있습니다.

시간과 친절한 도움에 감사드립니다. 모두 제일 좋다.

library(quantstrat) 
library(FinancialInstrument) 
library(TTR) 

symbols <- read.table("sp500components.csv", header = FALSE, sep = ",")$V1 
symbols <- as.character(symbols) 

currency("USD") 
stock(symbols, currency="USD",multiplier=1) 

MonthlyAd <- function(x){ 
    # Converts daily data to monthly and returns only the monthly close 
    # Note: only used with Yahoo Finance data so far 
    # Thanks to Joshua Ulrich for the Monthly Ad function 
    # 
    # args: 
    # x = daily price data from Yahoo Finance 
    # 
    # Returns: 
    # xts object with the monthly adjusted close prices 

    sym <- sub("\\..*$", "", names(x)[1]) 
    Ad(to.monthly(x, indexAt = 'lastof', drop.time = TRUE, name = sym)) 
} 

symEnv <- new.env() 

f <- function(x) { 
    uri <- "http://ichart.yahoo.com/table.csv" 
    symbol <- paste("s",x,sep="=") 
    from <- "a=1&b=1&c=2000" 
    to  <- "d=31&e=12&f=2015" 
    period <- "g=d" 
    ignore <- "ignore=.csv" 
    query <- paste(symbol,from,to,period,ignore,sep="&") 
    url <- paste(uri,query,sep="?") 
    try(assign(x,read.csv(url),envir=symEnv)) 
} 

lapply(symbols,f) 

ts <- function(x) { 
    x["Date"] <- as.Date.character(x[["Date"]], "%Y-%m-%d") 
    x <- xts(x[,-1], order.by = x$Date) 
    colnames(x) <- gsub("Adj", "Adjusted", colnames(x)) 
    assign(symbol, x) 
} 

eapply(symEnv, ts) 

symbols.close <- do.call(merge, eapply(symEnv, MonthlyAd)) 

답변

0

오류의 원인을 재현 할 수없는 예제를 제공 했으므로 몇 가지 추측을해야합니다. 따라서 에있는 객체에 MonthlyAd을 호출한다고 가정합니다.

f 함수로 생성 된 개체에는 to.monthly이 기대하는 특성이 없습니다. 즉, 생성하는 data.frame에는 각 관측에 대한 datetimes를 나타내는 행 이름이 없습니다.

eapply(symEnv, ts)으로 생성 된 개체에 MonthlyAd을 호출해도 문제가 없습니다. 방금 getSymbolsenv 인수를 사용하는 경우

symList <- eapply(symEnv, ts) 
symListMonthly <- lapply(symList, MonthlyAd) 

도 아무 문제가 없습니다. 예 :

symEnv <- new.env() 
getSymbols("SPY;IWM", env = symEnv) 
symListMonthly <- eapply(symEnv, MonthlyAd)