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:
- A soma dos pesos precisa dar um (ou 100%)
- É 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.
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:
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
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:
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
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)
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)
- Teoria das Carteiras e Análise de Investimentos: Alpha, Sharpe e Sortino
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)
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”)
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

E-BOOK
Aprenda tudo sobre contabilidade
Neste e-book — “Contabilidade”, trazemos informações e conceitos importantes sobre contabilidade financeira.
Artigos relacionados
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.