Teoria moderna do portfólio

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

Charlotte Werger

Data Scientist

Criando portfólios ótimos

Ícone de estratégia de investimento

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

O que é Otimização de Portfólio?

Conheça Harry Markowitz

Harry Markowitz

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

O problema: encontrar pesos ótimos

$$ Problema de otimização de Markowitz

Em palavras:

  • Minimizar a variância do portfólio, sujeito a:
  • O retorno médio esperado é pelo menos um alvo
  • Os pesos somam 100%
  • Pelo menos alguns pesos são positivos
Introdução à Análise de Portfólios em Python

Vários retornos-alvo geram a Fronteira Eficiente

Gráfico da Fronteira Eficiente

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

PyPortfolioOpt para otimização de portfólios

from pypfopt.efficient_frontier import EfficientFrontier
from pypfopt import risk_models
from pypfopt import expected_returns
df=pd.read_csv('portfolio.csv')
df.head(2)
                XOM        RRC        BBY         MA        PFE       
date
2010-01-04  54.068794  51.300568  32.524055  22.062426  13.940202 
2010-01-05  54.279907  51.993038  33.349487  21.997149  13.741367
# Calcular os retornos anuais esperados e a covariância amostral
mu = expected_returns.mean_historical_return(df)
Sigma = risk_models.sample_cov(df)
Introdução à Análise de Portfólios em Python

Obter a Fronteira Eficiente e os pesos

# Calcular retornos anuais esperados e risco
mu = expected_returns.mean_historical_return(df)
Sigma = risk_models.sample_cov(df)
# Obter a EfficientFrontier
ef = EfficientFrontier(mu, Sigma)
# Escolher um portfólio ótimo
ef.max_sharpe()
Introdução à Análise de Portfólios em Python

Otimizações diferentes

# Selecionar o portfólio de Sharpe máximo
ef.max_sharpe()
# Definir retorno ótimo para um risco-alvo 
ef.efficient_risk(2.3)
# Definir risco mínimo para um retorno-alvo
ef.efficient_return(1.5)
Introdução à Análise de Portfólios em Python

Calcular risco e performance do portfólio

# Obter métricas de performance
ef.portfolio_performance(verbose=True, risk_free_rate = 0.01)
Retorno anual esperado: 21,3%
Volatilidade anual: 19,5%
Índice de Sharpe: 0,98
Introdução à Análise de Portfólios em Python

Vamos otimizar um portfólio!

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

Preparing Video For Download...