Estoy buscando una calculadora que tenga en cuenta el reequilibrio al estimar los rendimientos totales utilizando datos históricos.
Por ejemplo, ingresaría lo siguiente en la calculadora:
Luego, la calculadora generaría lo siguiente utilizando los datos de rendimiento real de ambos fondos desde 1990 hasta el presente:
¿Alguien sabe de una calculadora de este tipo?
Mi respuesta es Microsoft Excel.
Busque en Google "VBA para tontos" (en serio) y descubra si su corretaje ofrece una 'API'. Con una breve comprensión de la codificación, puede obtener una hoja de cálculo que está conectada en vivo al flujo de datos de sus corredores.
Digamos que tiene una hoja de cálculo con el valor de 1990 de cada uno en las dos primeras columnas (celdas a1 y b1). Tal vez esta fórmula podría ser la tercera columna, te dirá cuánto comprar o vender para reequilibrarlos.
=((a1+b1)/2)-a1
luego, para iterar el reequilibrio, establezca a2 y b2 en =C1
y arrastre la fórmula hasta la fila 25, una fila para cada año. Probablemente será un poco más de trabajo que eso, pero entiendes la idea.
R tiene un paquete realmente bueno que le permite calcular el rendimiento de las carteras reequilibradas. El paquete se llama: PerformanceAnalytics (consulte: http://www.inside-r.org/packages/cran/PerformanceAnalytics/docs/Return.portfolio ).
Rápidamente escribí un pequeño guión 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 igualmente ponderada. También es posible reequilibrar su cartera utilizando ponderaciones personalizadas. Consulte la documentación sobre cómo hacerlo.
Para que este código funcione, debe tener sus datos ya en términos de devolución. Puede hacerlo fácilmente en Excel. Asegúrese de que sus datos en Excel se vean 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
Luego, exporte sus datos a un archivo CSV.
Nota: antes de ejecutar el código, asegúrese de haber instalado el paquete PerformanceAnalytics. Puedes hacer esto de la siguiente manera:
install.packages("PerformanceAnalytics")
Déjame saber si tienes alguna pregunta con respecto a lo anterior.
Chris W. Rea