ComenzarEmpieza gratis

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

Ver curso

Instrucciones del ejercicio

  • Calcula las medias por columna de returns (usando colMeans()), y llama a esto stockmu.
  • 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, llamada grid.
  • Inicializa dos vectores vacíos con la misma longitud que grid usando rep(), donde almacenarás las medias y desviaciones estándar de la cartera. Llámalos vpm y vpsd.
  • Inicializa una matriz vacía de 50 filas y 30 columnas. Llámala mweights. Puedes usar la función matrix() para hacerlo.
  • Crea un bucle for que empiece en el primer valor de grid y termine en el último. El bucle for debe crear una cartera llamada opt usando returns y con una rentabilidad objetivo de grid.
  • En cada iteración, el bucle for debe rellenar los vectores vpm ($pm), vpsd ($ps) con sus respectivos valores de opt.
  • 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, ] <- ___$__
}
Editar y ejecutar código