2014-06-16 4 views
1

주가를 포착하고 월별 수익을 계산하는 코드가 있습니다. 계산에 사용 된 가격이 월말에 발생하지 않은 경우 마지막 반품을 취소하고 싶습니다. 예를 들어 아래 코드를 실행하면 2014-06-13까지 가격이 반환됩니다. 그리고 monthlyReturn 함수는 전체 월이 없었더라도 6 월의 수익을 계산합니다. monthlyReturn이 전체 개월간의 수익 만 계산하는지 아니면 전체 월간 가격으로 계산되지 않은 경우 수익률 벡터에서 지난 달을 드롭 하는지를 쉽게 확인할 수있는 방법이 있습니까?월별 수익 계산에서 불완전한 월을 제거하십시오.

library(quantmod) 

    symbols <- c('XLY', 'XLP', 'XLE', 'XLF', 'XLV', 'XLI', 'XLB', 'XLK', 'XLU') 
    Stock <- xts() 
    Prices <- xts() 

    for (i in 1:length(symbols)){ 
     Stock <- getSymbols(symbols[i],auto.assign = FALSE) 
     Prices <- merge(Prices,Stock[,6]) 
    } 

    returns <- do.call(cbind, lapply(Prices, monthlyReturn, leading=FALSE)) 
    names(returns) <- symbols 

이 코드는 발견되었지만 몇 가지 제한 사항이있는 것으로 보입니다. 이것을 향상시킬 수있는 방법이 있습니까?

if(tail(index(x.xts),1) != as.Date(as.yearmon(tail(index(x.xts),1)), frac=1)){ 
    x.m.xts = x.m.xts[-dim(x.m.xts)[1],] 
    } 
    # That test isn't quite right, but its close. It won't work on the first 
    # day of a new month when the last business day wasn't the last day of 
    # the month. It will work for the second day. 
+0

예는 명확하지 않습니다. 'monthlyReturn' 함수의 동작을 바꾸고 싶다고 가정합니까? 질문을 편집하여 위의 코드로 얻을 수있는 것과 얻을 수있는 것의 차이점을 간소화하고 명확하게 지적 할 수 있습니다. – MrFlick

+0

죄송합니다 - 명확하게 편집하려고했습니다. 여전히 불분명한지 알려주세요. – tragen907

답변

1

xts:::last.xts과 함께 음수 하위 집합을 사용할 수 있습니다. 이는 지난 달에게

last(returns, "-1 months") 

을 제거하지만 당신은 현재 날짜의 달, 달이 아직 종료되지 않은 경우 지난달 제거, 그래서 마지막 행의 달을 비교합니다.

if (format(end(returns), "%Y%m") == format(Sys.Date(), "%Y%m")) 
    returns <- last(returns, "-1 month")