Calcular la frontera eficiente usando una malla de rentabilidades objetivo
Como has visto, una forma de calcular la frontera eficiente es definir primero una malla de rentabilidades objetivo y, para cada una, encontrar la cartera que tenga una rentabilidad esperada igual a la objetivo con la menor varianza posible.
Pero, ¿qué es una malla razonable de rentabilidades objetivo? Fijarás la rentabilidad objetivo máxima en la rentabilidad media máxima de las acciones. Idealmente, establecerías la rentabilidad objetivo mínima en la rentabilidad de la cartera de mínima varianza. Como aún no conoces esa rentabilidad de mínima varianza, crearás una malla usando el mínimo de las rentabilidades medias de todas las acciones.
En este ejercicio, usarás un bucle for para calcular tu malla de medias, desviaciones y pesos potenciales de cartera.
Este ejercicio forma parte del curso
Introducción al análisis de carteras en R
Instrucciones del ejercicio
- Calcula las medias por columna de
returns(usandocolMeans()), y llama a estostockmu. - Crea una secuencia (seq()) de longitud 50, que empiece en una tasa libre de riesgo del 1% y termine en el valor máximo de
stockmu, llamadagrid. - Inicializa dos vectores vacíos con la misma longitud que
gridusando rep(), donde almacenarás las medias y desviaciones estándar de la cartera. Llámalosvpmyvpsd. - Inicializa una matriz vacía de 50 filas y 30 columnas. Llámala
mweights. Puedes usar la funciónmatrix()para hacerlo. - Crea un bucle for que empiece en el primer valor de
gridy termine en el último. El bucle for debe crear una cartera llamadaoptusandoreturnsy con una rentabilidad objetivo degrid. - En cada iteración, el bucle for debe rellenar los vectores
vpm($pm),vpsd($ps) con sus respectivos valores deopt. - Almacena los pesos de la cartera línea por línea en
mweights($pw).
Ejercicio interactivo práctico
Prueba este ejercicio y completa el código de muestra.
# Calculate each stocks mean returns
# Create a grid of target values
grid <- seq(from = ___, to = ___, length.out = ___)
# Create empty vectors to store means and deviations
vpm <- vpsd <-
# Create an empty matrix to store weights
mweights <- matrix(NA, 50, 30)
# Create your for loop
for(i in 1:length(grid)) {
opt <- portfolio.optim(x = ___, pm = ___[i])
vpm[i] <- ___$__
vpsd[i] <- ___$__
mweights[i, ] <- ___$__
}