Como calcular o retorno de um portfólio de investimentos

No post de hoje, como parte do que ensinamos no nosso curso R para o Mercado Financeiro, continuaremos a mostrar como podemos realizar cálculos úteis para avaliações de investimentos. No post passado, mostramos como podemos realizar cálculos dos retorno de ativos individualmente, porém, no mundo real, nem sempre iremos investir nosso dinheiro todo em um único ativo. Por isso, deve-se ser necessário o entendimento de como podemos calcular o retorno de um portfólio de ativos.

Sem muito suspense, o retorno de um portfólio é simplesmente a soma do retorno ponderado pelo peso dos ativos baseado no total de dinheiro investido. De outra forma, podemos definir através de uma equação:

(1)   \begin{equation*} r_p = \frac{I_1}{I_1-I_2} * r_1 + \frac{I_2}{I_1+I_2} * r_2 = w_1 *r_1 + w_2 * r_2 \end{equation*}

onde r_p é o retorno do portfólio, I_1 o dinheiro investido no ativo 1, I_2 o dinheiro investido no ativo 2, r_1 o retorno do ativo 1 e r_2 o retorno do ativo 2.

Nesse caso, utilizamos apenas dois ativos como exemplo na equação, mas o mesmo funciona para caso houver mais ativos no portfólio, sendo necessário apenas expandir a equação.

Mas, como podemos realizar isso no R? É bem simples!

Primeiro iremos carregar os pacotes necessários.

library(quantmod)
library(Quandl)
library(PerformanceAnalytics)
library(tidyverse)
library(timetk)

Em seguida, podemos seguir para o nosso código.


# Define os ativos que irão ser coletados

tickers <- c("PETR4.SA", "ITUB4.SA", "ABEV3.SA", "JBSS3.SA")

# Define a data de início da coleta

start <- "2016-12-01"

# Realiza a coleta dos preços diários

prices <- getSymbols(tickers,
                     auto.assign = TRUE,
                     warnings = FALSE,
                     from = start,
                     src = "yahoo") %>% 
  map(~Cl(get(.))) %>% 
  reduce(merge) %>% 
  `colnames<-`(tickers)

# Transfroma os preços diários em mensais

prices_monthly <- to.monthly(prices,
                           indexAt = "lastof",
                           OHLC = FALSE)

# Calcula os retornos mensais

asset_returns <- Return.calculate(prices_monthly,
                                  method = "log") %>% 
  na.omit()

Veja que até aqui somente tratamos de calcular os retornos individuais dos nossos ativos. Agora, será o momento que devemos realizar o cálculo do retorno do portfólio. Para isso, iremos construir quatro portfólio diferentes, de forma que possamos validar qual a melhor estratégia que podemos utilizar.

Iremos fazer da seguinte forma, através de 4 ativos, com pesos escolhidos aleatoriamente, definimos: PETR4 com peso de 50%; ITUB4 com peso de 27%; ABEV3 com peso de 13% e JBSS3 com peso de 10%.

# Define os pesos dos respectivos ativos

w <- c(0.50, 0.27, 0.13, 0.10)

# Calcula o retorno do portfolio baseado no peso de cada ativo

portfolio_return <- Return.portfolio(asset_returns,
                                      weights = w) %>% 
  `colnames<-`("port_returns")

Através da função Return.portfolio(), calculamos o retorno do portfolio com os retornos individuais e com os pesos escolhidos.

No segundo portfólio, iremos utilizar as mesmas métricas, porém, deixaremos que a função faça um rebalanceamento.

# Calcula o retorno do portfolio baseado no peso de cada ativo com rebalanceamento

portfolio_return_reb <- Return.portfolio(asset_returns,
                               weights = w,
                               rebalance_on = "quarters") %>% 
  `colnames<-`("port_return_reb")

No terceiro portfólio, iremos construir o que a literatura conhece como equally weighted portfolio, no qual estabelece que todos os ativos possuem o mesmo peso.

# Calcula o Equally Weighted Portfolio

portfolio_return_ew <- Return.portfolio(asset_returns) %>% 
  `colnames<-`("ewp")

E por fim, no quarto portfólio, criamos novamente o equally weighted portfolio, porém, com rebalanceamento.

# Calcula o Equally Weighted Portfolio com rebalanceamento

portfolio_return_ew_reb <- Return.portfolio(asset_returns,
                                            rebalance_on = "quarters") %>% 
  `colnames<-`("ewp_reb")

Podemos então visualizar a performance do nosso portfólio através do retorno acumulado, comparando-os entre si, e também com CDI.

Parece que teremos que revisar nossas estratégias.

________________________

(*) Para entender mais sobre Mercado Financeiro e aprender como realizar a coleta, tratamento e visualização de dados financeiros, confira nosso curso de R para o Mercado Financeiro.
________________________

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Retropolando a série do desemprego no Brasil

Nosso objetivo neste exercício será estender a taxa de desemprego fornecida pela Pesquisa de Nacional por Amostra de Domicílios Contínua (PNAD Contínua) através daquela fornecida pela Pesquisa Mensal de Emprego (PME). Serão construídas duas séries: uma normal, outra dessazonalizada. Faremos todo o exercício utilizando o Python.

Variáveis Instrumentais no R: qual o impacto do gasto de segurança no crime?

Diversos métodos econométricos têm como principal finalidade melhorar o processo de investigar o efeito de uma variável sobre a outra, e um importante método encontra-se no uso de Variáveis Instrumentais na análise de regressão linear. Mas como podemos utilizar essa ferramenta para auxiliar no estudo da avaliação de impacto?

Neste post, oferecemos uma breve introdução a esse importante método da área de inferência causal, acompanhado de um estudo de caso para uma compreensão mais aprofundada de sua aplicação. Os resultados foram obtidos por meio da implementação em R, como parte integrante do nosso curso sobre Avaliação de Políticas Públicas utilizando esta linguagem de programação.

Análise regional do mercado de trabalho com dados do CAGED usando Python

Os microdados dos CAGED fornecem informações detalhadas a nível de cidade, sexo, raça, nível de instrução, idade, salário e outras sobre os trabalhadores formais do Brasil, possibilitando ricas análises regionais de dados. Neste artigo mostramos como acessar, processar e analisar estes dados utilizando o Python.

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.