Construindo seu primeiro portfólio de ativos no R

Construindo seu primeiro portfólio de ativos no R

lucca

20 OUT

6 MIN

Construindo seu primeiro portfólio de ativos no R

No último texto da nossa série de introdução ao R, vimos como aplicaro Capital Pricing Asset Model a certos ativos. No texto de hoje, vamos ver como construir o primeiro portfólio de ativos no R e realizar as mais diversas operações com ele.

  • O que é um portfólio?
  • Iniciando a construção do portfólio
  • Juntando os dois data frames para calcular a performance do portfólio
  • Obtendo a tabela do CAPM para o portfólio pela função tq_performance
  • Calculando o Índice de Sharpe do portfólio no R
  • A evolução do patrimônio com o tempo
  • Conclusão

Boa leitura!

O que é um portfólio?

Um portfólio é um conjunto de ativos financeiros como ações, títulos públicos, commodities, fundos imobiliários, fundos de investimento e ETFs. Também é popularmente conhecido como “carteira” de investimentos. Vamos então aprender a construir o nosso primeiro portfólio e a testar as principais métricas de risco com o mesmo.

Preparação

Assim como no texto passado, vamos usaremos as bibliotecas tidyquant e PerformanceAnalytics, fundamentais para a construção e manipulação do portfólio.

Tidyquant

O tidyquant integra uma série de pacotes fundamentais para trabalharmos com dados financeiros: zoo, xts, quantmod, TTR, ggplot2 e PerformanceAnalytics.

PerformanceAnalytics

O pacote PerformanceAnalytics integra uma série de funções econométricas focadas em análise de risco. Com o pacote, podemos calcular o CAPM através de apenas uma função.

Instalando os pacotes necessários e importando as bibliotecas

Novamente, vamos usar a função install.packages() para instalar pacotes e a função library() para carregá-los:

> install.packages(“tidyquant”)

> install.packages(“PerformanceAnalytics”)

> library(tidyquant)

> library(“PerformanceAnalytics”)

Iniciando a construção do portfólio

Todo bom portfólio é diversificado em sua composição, tendo diversas classes de ativos. Para fins de simplificação, criarei um portfólio contendo duas classes de ativos: Ações e Fundos de Índice.

Para baixar os dados históricos destes ativos, usaremos a função tq.get() que puxa os dados do Yahoo Finance. 

A primeira coisa a se fazer é criar um vetor que armazena todos os ativos do portfólio em questão. Vamos então supor que o nosso portfólio será composto por:MGLU3, WEGE3,POSI3,WIZS3,VIIA3,TASA4, FESA4, SMALL11 e BOVA11.

Lembrando que no Yahoo Finance todos os tickers nacionais possuem “.SA” no fim.

acoes_v <- c(“MGLU3.SA”, “WEGE3.SA”, “POSI3.SA”, “WIZS3.SA”, “VIIA3.SA”,

             “FESA4.SA” , “TASA4.SA”, “SMAL11.SA”, “BOVA11.SA”) 

Agora, para constituir o portfólio precisaremos criar um vetor contendo o peso de cada uma de nossas posições.

Vamos supor que o nosso position sizing seria:

  • MGLU3 – 4%
  • WEGE3 – 6%
  • POSI3 – 13%
  • WIZS3 – 20%
  • VIIA3 – 5%
  • FESA4 – 7%
  • TASA4 – 25%
  • SMALL11 – 10%
  • BOVA11 – 10%

Construindo o vetor peso:

Vetor_peso <- c(0.04, 0.06, 0.13, 0.2, 0.05, 0.07, 0.25, 0.1, 0.1)

Note duas coisas importantes:

  1. A soma dos pesos precisa dar um (ou 100%)
  2. É necessário que a ação e seu peso correspondente estejam na mesma posição de seus respectivos vetores.

sum(Vetor_peso)

[1] 1

Vamos, então, baixar as ações presentes no vetor acima com a função tq_get(), baixarei os dados desde a data 01/01/2019 até o dia de hoje (Sys.Date), e as ações serão organizadas no data frame pelo seu ticker (symbol).

acoes_df <- tq_get(acoes_v,

from = “2019-01-01”,

to = Sys.Date(),

get = “stock.prices”) %>%

group_by(symbol)

Feito! Baixamos os retornos das ações e anexamos a um data frame. Precisamos agora dos retornos diários das ações para calcular os retornos acumulados. 

retorno acumulado do portfólio

Para calcular os retornos, usaremos a função tq_transmute():

ret_acoes <- acoes_df %>%

  tq_transmute(select = adjusted,

mutate_fun = periodReturn,

 period = ‘daily’,

col_rename = ‘ret’)

Agora, temos todo um data frame contendo os retornos diários das ações do nosso (futuro) portfólio:

portfólio de ações no r

Agora, que temos os retornos diários de todas as ações que queremos, vamos juntá-los num portfólio. Para isso, usaremos a função tq_portfolio() presente no tidyquant.

retornos_diarios_portfolio <- ret_acoes %>%

  tq_portfolio(assets_col  = symbol, 

returns_col = ret, 

weights     = Vetor_peso, 

col_rename  = “Ra”)

retornos_diarios_portfolio

portfolio de ações no programa r

Agora já temos o retorno diário do nosso portfólio desde 2019. Precisaremos agora compará-los com um benchmark. Vamos então comparar com o Ibovespa no período.

ibov_df <- tq_get(“^BVSP”,

from = “2019-01-01”,

to = Sys.Date(),

get = “stock.prices”) %>%

  group_by(symbol)

log_ret_ibov <- ibov_df %>%

  tq_transmute(select = adjusted,

mutate_fun = periodReturn,

period = ‘daily’,

col_rename = ‘Rm’)

Feito! Agora temos os retornos também do Ibovespa:

retorno ibovespa

Como podem ver, o nosso data frame possui 3 colunas, diferente do data frame do portfólio. Vamos então apagar a primeira coluna do data frame acima:

> retornos_diarios_ibov <- ret_ibov[,-1]

> retornos_diarios_ibov

Juntando os dois data frames para calcular a performance

Para juntar os dois data frames em um só, usaremos a função left_join() e juntamos ambos pela coluna em comum, “date”.

df_portfolio_perf <- left_join(retornos_diarios_portfolio, 

retornos_diarios_ibov,

by = “date”)

df_portfolio_perf

performance do portfolio

Obtendo a tabela do CAPM com o R pela função tq_performance

Vamos então obter a tabela do CAPM através da função tq_performance.

No primeiro argumento colocaremos nosso data frame df_portfolio_perf. No segundo o retorno dos ativos, no terceiro o retorno de mercado, e no quarto o retorno da taxa livre de risco. Note que todos são retornos diários.

tq_performance(df_portfolio_perf, Ri, Rm, performance_fun = table.CAPM)

modelo capm modelo r

Calculando o Índice de Sharpe do portfólio no R

Outra informação importante é sabermos o quanto de retorno excedente nosso portfólio entregou por unidade de risco que “tomou”. Para isso, usaremos o índice de Sharpe, que mede exatamente o quão atraente é o retorno ajustado ao risco do portfólio. 

tq_performance(df_portfolio_perf, Ra = Ri, Rb = NULL, performance_fun = SharpeRatio)

indice sharpe r

Calculando o retorno anualizado do portfólio no R

Outra coisa útil é calcular o retorno anualizado do portfólio, para isso usaremos o argumento table.AnnualizedReturns na função tq_performance. Como esse argumento por vezes nos dá warnings, apagaremos a primeira linha do nosso data frame (retornos zerados) e criaremos um data frame de teste para calcular os retornos anualizados:

teste <- df_portfolio_perf[-1,]
tq_performance(teste, Ra = Ri, Rb = NULL, performance_fun = table.AnnualizedReturns)

retorno do portfólio em ações

Feito! A função também nos dá um índice de Sharpe anualizado (assumi a taxa livre de risco como sendo zero).

A evolução do patrimônio com o tempo

Outro exercício interessante é calcular a evolução patrimonial do portfólio com o tempo, para isso, vamos supor que nosso patrimônio inicial era de R$ 100.000.

Primeiro, vamos novamente baixar os retornos das ações e anexar ao data frame “ret_acoes”:

ret_acoes <- acoes_df %>%

  tq_transmute(select = adjusted,

               mutate_fun = periodReturn,

               period = ‘daily’,

               col_rename = ‘ret’)

*Faremos isso porque precisaremos da coluna “symbols” de volta.

Agora o principal, para calcular a evolução patrimonial precisaremos utilizar o argumento “wealth.index = TRUE” na função tq_portfolio().

retorno_port <- ret_acoes %>%

  tq_portfolio(assets_col   = symbol, 

               returns_col  = ret, 

               weights      = Vetor_peso, 

               col_rename   = “crescimento.portfolio”,

               wealth.index = TRUE) %>%

  mutate(crescimento.portfolio = crescimento.portfolio * 100000)

Visualizando a evolução do patrimônio com o tempo

Para fazer o gráfico com o ggplot, colocaremos obviamente a data no eixo x e o valor atualizado do aporte no eixo y:

ggplot(data = retorno_port, aes(x = date, y = crescimento.portfolio)) +

  geom_line(size = 1) +

  labs(title = “Evolução de R$ 100.000 investidos no portfólio com o tempo”,

       caption = “Dados do Yahoo Finance”,

       x = “”, y = “PL”)

investir na bolsa

Conclusão

Note que o nosso portfólio obteve um retorno fantástico, não só gerando alfa, mas tendo uma rentabilidade de quase 200% sobre o patrimônio investido inicialmente. Ainda sim, não podemos dizer que este portfólio é otimizado. No próximo texto, aprenderemos a otimizar um portfólio de ativos. 

Baixe nosso app grátis! No TC você acompanha as principais notícias e cotações do mercado em tempo real, além de ter acesso a canais exclusivos para interagir com os melhores profissionais.

Estude e conheça! Aprenda com quem realmente entende de investimentos. Tire dúvidas, troque ideias, experiências e construa uma grande rede de networking com investidores de todo Brasil.

A gente também está no Instagram,YouTube e no TikTok. Acompanhe!

Referências

Dancho, M. (2021). Performance Analysis with tidyquant. Retrieved 15 October 2021, from https://cran.r-project.org/web/packages/tidyquant/vignettes/TQ05-performance-analysis-with-tidyquant.html

Estudante de Economia na UFPE

Aprenda tudo sobre contabilidade

E-BOOK

Aprenda tudo sobre contabilidade

Neste e-book — “Contabilidade”, trazemos informações e conceitos importantes sobre contabilidade financeira.

Receba todas as novidades do TC

Deixe o seu contato com a gente e saiba mais sobre nossas novidades, eventos e facilidades.

Receba todas as novidades do TC

Deixe o seu contato com a gente e saiba mais sobre nossas novidades, eventos e facilidades.