ComeçarComece de graça

Calculando a fronteira eficiente usando uma grade de retornos-alvo

Como você viu, uma abordagem para calcular a fronteira eficiente é primeiro definir a grade de retornos-alvo e, depois, para cada retorno-alvo, encontrar o portfólio que tenha retorno esperado igual ao retorno-alvo com a menor variância possível.

Mas qual é uma grade razoável de retornos-alvo? Você vai definir o retorno-alvo máximo como o retorno médio máximo das ações. Idealmente, você definiria o retorno-alvo mínimo como o retorno do portfólio de mínima variância. Como você ainda não conhece esse retorno do portfólio de mínima variância, você cria uma grade usando o menor dos retornos médios de todas as ações.

Neste exercício, você vai usar um laço for para calcular sua grade de médias potenciais de portfólio, desvios e pesos.

Este exercício faz parte do curso

Introdução à Análise de Portfólios em R

Ver curso

Instruções do exercício

  • Calcule as médias das colunas de returns (usando colMeans()), e chame isso de stockmu.
  • Crie uma sequência (seq()) de comprimento 50, que começa em uma taxa livre de risco de 1% e termina no valor máximo de stockmu, chamada grid.
  • Inicialize dois vetores vazios com o mesmo comprimento de grid usando rep(), onde você vai armazenar as médias e os desvios padrão do portfólio. Chame-os de vpm e vpsd.
  • Inicialize uma matriz vazia com 50 linhas e 30 colunas. Chame-a de mweights. Você pode usar a função matrix() para isso.
  • Crie um laço for que começa no primeiro valor de grid e termina no último. O laço deve criar um portfólio chamado opt usando returns e com retorno-alvo de grid.
  • A cada iteração, o laço for deve preencher os vetores vpm ($pm) e vpsd ($ps) com seus respectivos valores de opt.
  • Armazene os pesos do portfólio, linha a linha, em mweights ($pw).

Exercício interativo prático

Experimente este exercício completando este código de exemplo.

# 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 e executar o código