R tiene un paquete muy bueno que permite calcular la rentabilidad de las carteras reequilibradas. El paquete se llama PerformanceAnalytics (ver: http://www.inside-r.org/packages/cran/PerformanceAnalytics/docs/Return.portfolio ).
Rápidamente escribí un pequeño script para ti que te permite hacer exactamente lo que quieres.
Código:
startAmount <- 10000
library(PerformanceAnalytics)
#a small function to ensure that the data is of the correct type for the package to work
cleanData <- function(df) {
if(ncol(df) > 0) {
df <- df[,-1]
df['Date'] <- as.Date(df[['Date']], format = '%Y-%m-%d')
#set all the data to numeric data.
#the first column is the date.
cols <- c(2:ncol(df))
df[,cols] <- lapply(df[,cols],function(x) as.numeric(as.character(x)));
df <- xts(df[,-1], order.by=df[,1])
return(df)
} else {
return("Error; the data.frame does not have any columns.")
}
}
# use csv2 if you use use a comma as decimal point and a semicolon as field separator
# enter the path to your file where it says: portfolio.csv
yourPortfolio <- cleanData(read.csv('portfolio.csv'))
# the frequency with which you want to rebalance your portfolio is set to yearly. You could also set this to daily, weekly or monthly.
vectorReturns <- Return.portfolio(yourPortfolio, rebalance_on = c(NA, "years"))
dollarAmount <- startAmount*prod(1+vectorReturns)
print(paste("Your portfolio total value in 2015 would be ", dollarAmount, " amount of dollars.", sep = ""))
Por defecto, la cartera se reequilibra a una cartera con la misma ponderación. También es posible reequilibrar la cartera utilizando ponderaciones personalizadas. Consulte la documentación sobre cómo hacerlo.
Para que este código funcione necesitas tener tus datos ya en términos de devolución. Puedes hacerlo fácilmente en Excel. Asegúrese de que sus datos en Excel se ven así:
option 1 option 2
2003-10-30 -0.002014099 -0.002014099
2003-10-31 -0.002018163 -0.002018163
2003-11-03 -0.029322548 -0.022605170
2003-11-04 -0.032291667 -0.032128514
2003-11-05 0.019375673 0.017634855
A continuación, exporte sus datos a un archivo CSV.
Nota: antes de ejecutar el código asegúrese de haber instalado el paquete PerformanceAnalytics. Puede hacerlo de la siguiente manera:
install.packages("PerformanceAnalytics")
Hágame saber si tiene alguna pregunta con respecto a lo anterior.