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
Instruções do exercício
- Calcule as médias das colunas de
returns(usandocolMeans()), e chame isso destockmu. - 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, chamadagrid. - Inicialize dois vetores vazios com o mesmo comprimento de
gridusando rep(), onde você vai armazenar as médias e os desvios padrão do portfólio. Chame-os devpmevpsd. - Inicialize uma matriz vazia com 50 linhas e 30 colunas. Chame-a de
mweights. Você pode usar a funçãomatrix()para isso. - Crie um laço for que começa no primeiro valor de
gride termina no último. O laço deve criar um portfólio chamadooptusandoreturnse com retorno-alvo degrid. - A cada iteração, o laço for deve preencher os vetores
vpm($pm) evpsd($ps) com seus respectivos valores deopt. - 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, ] <- ___$__
}