weights <- rbind(c( 0.25, 0.75),
c( 0.40, 0.60),
c( 0.25, 0.75))
R <- rbind(c( 1 , 0),
c( 2.5, -1.0),
c(-2 , 0.5))/100
rc(R, weights, segment = c("equities", "bonds"))
## EXAMPLE of Christopherson et al., ch 19
weights <- cbind(stocks = c(0.5, 0.55),
bonds = c(0.5, 0.45))
## stocks bonds
## [1,] 0.50 0.50
## [2,] 0.55 0.45
R <- cbind(stocks = c(.4, 0.1),
bonds = c(.1, 0.2))
## stocks bonds
## [1,] 0.4 0.1
## [2,] 0.1 0.2
## ==> contributions grow at portfolio rate-of-return
rc(R, weights, linking.method = "geometric1")
## ==> contributions are made on top of current portfolio-value
rc(R, weights, linking.method = "geometric0")
## ==> mixture
rc(R, weights, linking.method = "geometric0.5")
## EXAMPLE from
## https://quant.stackexchange.com/questions/36520/
## how-to-calculate-the-annual-contribution-of-a-fund-to-a-portfolio-of-funds/
## 36530#36530
## (unbreak the URL)
weights <- rbind(c( 0.5, 0.5),
c( 0.5, 0.5))
R <- rbind(c( 10, 0),
c( 0 , 10))/100
rc(R, weights, segment = c("F1", "F2"), timestamp = 1:2,
linking.method = "geometric1")
## ==> F1 contributed first, and so gets a higher total
## contribution
rc(R, weights, segment = c("F1", "F2"), timestamp = 1:2,
linking.method = "geometric0")
## ==> F2 contributed later, and so gets a higher total
## contribution because it started off a higher base
## value
## contribution for btest:
## run a portfolio 10% equities, 90% bonds
P <- as.matrix(merge(DAX, REXP, by = "row.names")[, -1])
(bt <- btest(prices = list(P),
signal = function() c(0.1, 0.9),
convert.weights = TRUE,
initial.cash = 100))
W <- bt$position*P/bt$wealth
rc(returns(P)*W[-nrow(W), ])$total_contributions
Run the code above in your browser using DataLab