2017-09-12 21 views
0

나는 내 포트폴리오 수익률과 개별 주식 기여도를 계산하려고 시도해 왔습니다. 나는 this post을 우연히 발견했는데, 그것은 PerformanceAnalytics를 작성하는 사람에게서 나온 것으로 보인다.PerformanceAnalytics 샌드 박스의 to.period.contributions() 오류

기사 끝에 그는 일부 기능에 대해 link to r-forge with a sandbox file을 게시합니다.

그래서 일일 수익을 to.monthly.contributions() 함수를 통해 합계 월간 수익으로 변환하려고하는데 xts 오류가 발생했습니다! 여기

내 코드입니다 : 나는 오류가 portfolio.returns$contributions 함께 할 수있는 뭔가가 같은데요

Error in inherits(x, "xts") : 
    argument "Contributions" is missing, with no default 
5. inherits(x, "xts") 
4. is.xts(x) 
3. checkData(Contributions) 
2. to.period.contributions(contributions = contributions, period = "months") 
1. to.monthly.contributions(portfolio.returns$contributions) 

그러나

library(PerformanceAnalytics) 
library(quantmod) 

stock.weights <- c(.15, .20, .25, .225, .175) 
symbols <- c("GOOG", "AMZN", "BA", "FB", "AAPL") 
getSymbols(symbols, src = 'google', from = "2016") 
#xts with daily closing of each stock 
merged.closing <- merge(GOOG[,4], AMZN[,4], BA[,4], FB[,4], AAPL[,4]) 
#xts with returns 
merged.return <- na.omit(Return.calculate(merged.closing)) 
# weighted returns rebalanced quartely 
portfolio.returns = Return.portfolio(merged.return, weights = stock.weights, 
            rebalance_on = "quarters", verbose = TRUE) 
#to monthly contributions function 
to.monthly.contributions(portfolio.returns$contributions) 

나는 다음과 같은 오류 메시지가 마지막 줄을 실행할 때 xts가 아닌가요? 하지만 그 문제를 해결하는 방법을 모르겠습니다.

참고로, 월간/분기/년으로 포트폴리오 수익을 계산하는 데 더 좋은 아이디어 나 출처가있는 사람은 기꺼이 듣고 싶습니다. 체중 변화, 재 균형 및 기부금을 고려해야 함을 명심하십시오. 변화에!

+0

'merged.closing'에는 Google이 두 번 있고 Apple이 없습니다. 그게 될 수 있을까요? – lebelinoz

+0

'to.monthly.contributions'을 찾을 수 없습니다. 어떤 패키지가 그 패키지입니까? – lebelinoz

+0

자습서를 재현 할 수 없습니다. 함수에서 날짜를 정의하는 중 오류가 발생하여 동일한 문제가 발생합니다. – Katerina

답변

0

PerformanceAnalytics (및 R-Forge Repo의 다른 많은 패키지)는 Brian Peterson's GitHub account으로 옮겼습니다. 약 1 년 전에 sandbox/to.period.contributions.R의 변경 사항이 표시됩니다. 그게 문제를 일으킬 수도 있습니다.

또 다른 문제는 Return.portfolio()에 의해 반환 된 개체에 contributions 요소가 없다는 것입니다. 원하는 요소 이름은 contribution (단수)입니다.

두 가지 문제를 해결 한 후 to.monthly.contributions() 통화가 작동합니다.

R> to.monthly.contributions(portfolio.returns$contribution) 
       GOOG.Close AMZN.Close  BA.Close  FB.Close AAPL.Close Portfolio Return 
2016-01-29 0.0002244419 -0.0156956938 -0.036245552 0.0219893367 -1.330565e-02  -0.043033115 
2016-02-29 -0.0095461956 -0.0113127380 -0.003625779 -0.0121676134 -1.128288e-03  -0.037780614 
2016-03-31 0.0103601952 0.0140210157 0.016927654 0.0171632715 2.218899e-02  0.080661130 
2016-04-29 -0.0104584200 0.0222188532 0.015479754 0.0068624014 -2.448619e-02  0.009616397 
2016-05-31 0.0085179936 0.0210895602 -0.016873347 0.0024024015 9.732993e-03  0.024869602 
2016-06-30 -0.0084883795 -0.0023345382 0.007080427 -0.0086331655 -6.610526e-03  -0.018986182 
2016-07-29 0.0166211530 0.0120706520 0.007295757 0.0190190760 1.576098e-02  0.070767622 
2016-08-31 -0.0003521895 0.0027014233 -0.007568643 0.0040084230 3.231073e-03  0.002020086 
2016-09-30 0.0020684771 0.0177517727 0.004108611 0.0039452914 1.185750e-02  0.039731657 
2016-10-31 0.0013990917 -0.0113434690 0.020286170 0.0047711858 7.585139e-04  0.015871492 
2016-11-30 -0.0050340240 -0.0092287866 0.015187074 -0.0217047070 -4.601884e-03  -0.025382327 
2016-12-30 0.0026858660 -0.0001688763 0.009813394 -0.0059705490 8.286484e-03  0.014646319 
2017-01-31 0.0048528154 0.0196327363 0.012429342 0.0298631030 8.355638e-03  0.075133635 
2017-02-28 0.0047757941 0.0053484794 0.025108019 0.0094951963 2.198006e-02  0.066707545 
2017-03-31 0.0010760715 0.0096512663 -0.004718775 0.0111011780 8.787645e-03  0.025897386 
2017-04-28 0.0138145523 0.0086741715 0.011265973 0.0129883844 -1.218154e-05  0.046730900 
2017-05-31 0.0101747490 0.0150069699 0.003781232 0.0018310137 1.060194e-02  0.041395909 
2017-06-30 -0.0093108126 -0.0055092033 0.013123207 -0.0006974798 -9.767034e-03  -0.012161323 
2017-07-31 0.0035934766 0.0040867769 0.056523388 0.0272271162 5.723163e-03  0.097153921 
2017-08-31 0.0013284632 -0.0013521084 -0.003226369 0.0036945746 1.691168e-02  0.017356239 
2017-09-19 -0.0025908954 -0.0019880088 0.014497492 0.0007343197 -5.737005e-03  0.004915902