A otimização de portfólio tradicional (frequentemente chamada de teoria moderna de portfólio ou otimização de média-variância) equilibra o retorno esperado do portfólio com a variação esperada do portfólio. Você insere o quanto você se opõe à variação do portfólio (sua tolerância ao risco) e, em seguida, constrói um portfólio que lhe dá o melhor retorno, dada a sua tolerância ao risco.
O investimento baseado em metas, por outro lado, define “risco” como a probabilidade de não atingir seu objetivo. Presumimos que você deseja minimizar esse risco, de modo que esse é o único objetivo da carteira de um investidor baseado em metas. Como você verá, a variação e os retornos são entradas para essa equação, mas não são a equação (Eu falo mais sobre isso aqui)
Na maior parte, a otimização baseada em metas produz carteiras que estão na fronteira eficiente de média-variância, Mas não sempre. Não vou entrar no porquê disso neste post (aqui está o porquê), mas vou demonstrar quando os dois métodos divergem.
Fundamentalmente, existem três etapas básicas para otimizar um portfólio baseado em metas:
Determine as variáveis de sua meta: horizonte de tempo, quantidade de riqueza dedicada à meta hoje e valor futuro da riqueza necessária.
Desenvolva as expectativas do mercado de capitais para o seu universo de investimento: correlações, expectativas de retorno e volatilidade.
Execute um otimizador padrão com uma função de utilidade baseada em metas.
Este post é sobre como otimizar um portfólio baseado em metas em R.
Primeiro, precisamos entender o objetivo, o que você quer fazer com o dinheiro? Para manter as coisas simples, digamos que você precise de US $ 1.000 em 10 anos e tenha US $ 750 dedicados a eles hoje. Organizamos isso em um vetor de meta com o valor da meta, o valor de financiamento necessário ($ 1.000) e o horizonte de tempo (10 anos). Observe que o valor da meta só é relevante ao otimizar seu patrimônio atual em relação às suas metas, que esta postagem não cobre.
pool
Ok. Step 1 is done.
Second, we need to develop capital market expectations for our investment universe. This topic is so big numerous books have been written on it because it is a very important step. Better forecasts yield better results. Since this post isn’t about building CMEs, let’s just input something simple.
Ações: retorno médio de 9% com volatilidade de 15%
Títulos: 4,5% de retorno médio com 5% de volatilidade
Aposta: -1% de retorno médio com 80% de volatilidade
Caixa: retorno médio de 0,5% com volatilidade de 0,01%
# Asset names
assets
Note the “gamble” asset–we are going to have fun with that in a minute! Step 2 is complete.
Finally, now that we have our human-based inputs, let’s proceed with the algorithm. Load our required libraries.
library(tidyverse)
library(Rsolnp) # this is the optimizer solnp()
E construir as funções que usaremos.
# Required Functions
# This function converts the covariance table and weight vector into a
# portfolio standard deviation.
sd.f = function(weight_vector, covar_table){
covar_vector = 0
for(z in 1:length(weight_vector)){
covar_vector[z] = sum(weight_vector * covar_table[,z])
}
return( sqrt( sum( weight_vector * covar_vector) ) )
}
# This function will return the expected portfolio return, given the
# forecasted returns and proposed portfolio weights
mean.f = function(weight_vector, return_vector){
return( sum( weight_vector * return_vector ) )
}
# This function will return the probability of goal achievement, given
# the goal variables, allocation to the goal, expected return of the
# portfolio, and expected volatiltiy of the portfolio
phi.f = function(goal_vector, goal_allocation, pool, mean, sd){
required_return = (goal_vector[2]/(pool * goal_allocation))^(1/goal_vector[3]) - 1
if( goal_allocation * pool >= goal_vector[2]){
return(1)
} else {
return( 1 - pnorm( required_return, mean, sd, lower.tail=TRUE ) )
}
}
# For use in the optimization function later, this is failure probability,
# which we want to minimize.
optim_function = function(weights){
1 - phi.f(goal_vector, allocation, pool,
mean.f(weights, return_vector),
sd.f(weights, covar_table) )
}
# For use in the optimization function later, this allows the portfolio
# weights to sum to 1.
constraint_function = function(weights){
sum(weights)
}
Uma vez que inserimos correlações e volatilidades, precisamos construir uma tabela de covariâncias. Isso usa o
forma (covariância do ativo Eu para j é igual à correlação de Eu e j vezes a volatilidade de Eu vezes a volatilidade de j)
The solnp function from the Rsolnp package is quite powerful. Plus, when you are running it on complicated problems, the output makes me feel like a hacker, which is always a plus!
And we find that our optimal weights are 25% stocks, 75% bonds.
Então, o que há de diferente no investimento baseado em metas?
Agora que você tem os fundamentos da otimização de portfólio baseada em metas, podemos perguntar o que há de tão diferente no GBI. Bem, vamos descobrir!
Para ilustrar, vamos construir alocações para vários níveis de riqueza inicial.
pool_seq
And empty lists to hold the various allocation results
# Empty lists of allocation to hold results
stock_allocation
Then iterate through each starting wealth value and determine the optimal investment allocation (this code assumes you’ve run the code in the previous section).
# Loop through each level of starting wealth to determine optimal allocation
for(i in 1:length(pool_seq)){
pool % round(digits = 2)
bond_allocation[i] % round(digits = 2)
gamble_allocation[i] % round(digits = 2)
cash_allocation[i] % round(digits = 2)
}
Como estou usando o ggplot, agora precisarei armazenar os resultados em um quadro de dados de formato longo.
seq_results
And, finally, visualize the results.
ggplot( seq_results, aes(x = Wealth, y = Weight, fill = Asset))+
geom_area( linetype=1, size=0.5, color="black")+
xlab('Initial Wealth')+
ylab('Investment Weight')+
labs(fill="Asset",
title="Optimal Allocation for Various Levels of Starting Wealth",
subtitle="Goals-based optimization")
Como você pode ver, as carteiras baseadas em metas se apoiarão em investimentos de alta variação e baixo retorno quando sua riqueza inicial for pequena o suficiente. Tecnicamente falando, os portfólios do GBI começam a alocar para investimentos do tipo loteria sempre que o retorno necessário para atingir a meta é maior do que o retorno oferecido pela fronteira eficiente de média-variância. Na otimização tradicional da média-variância, o otimizador manterá a exposição ao ponto final da fronteira, ou 100% de alocação de estoque, em nosso exemplo.
Como comparação, aqui está o resultado do otimizador de média-variância. Como você pode ver, o ativo “apostar” foi eliminado da consideração.
Por causa disso, as carteiras baseadas em metas geram maiores probabilidades de cumprimento de metas do que as carteiras de média variância (as carteiras de média variância são estocasticamente dominadas por carteiras baseadas em metas). Este foi o Anexo 5 em meu artigo recente sobre este assunto.
Por todas essas razões (e mais), se você tem metas a atingir, deve usar a teoria de portfólio baseada em metas. Espero que este post tenha ajudado você a entender como implementar o framework básico!
A teoria do portfólio com base em metas também se preocupa com como você aloca seu patrimônio através seus objetivos, que não abordei neste post, mas irei abordar isso em uma discussão posterior.
Palavras-chave: investimento baseado em metas, investimento baseado em metas, investimento, teoria de portfólio, otimização de portfólio.