Calculando os retornos das ações no R

Olá investidor! No artigo de hoje veremos mais uma aplicação prática na nossa série de textos sobre introdução ao R.
O texto a seguir explicará como calcular os retornos periódicos de ações. Veremos especialmente a aplicação em análise de investimentos. Para facilitar a compreensão, elencamos o tema nos seguintes tópicos:
- Preparação
- Como calcular retornos diários das ações
- Calculando retornos semanais das ações
- Como calcular retornos mensais das ações
- Calculando Retornos Acumulados
- Conclusão
Boa leitura!
Preparação
Se você leu o último texto, já deve saber que precisaremos usar certas bibliotecas para poder baixar e importar dados de ações. Para o exercício de hoje, usaremos uma biblioteca nova, a tidyquant.
Tidyquant
O tidyquant integra uma série de pacotes fundamentais para trabalharmos com dados financeiros: zoo, xts, quantmod, TTR, ggplot2 e PerformanceAnalytics. Se você lembrar do último texto, tivemos que importar vários destes só que de forma individual. Com o tidyquant temos vários desses pacotes dentro de um só, além de já usarmos a arquitetura do tidyverse.
Ggplot2
O pacote ggplot2 é o mais completo para a visualização de dados e com ele podemos criar uma infinidade de gráficos personalizados.
Ggthemes
O pacote é uma extensão do ggplot2. Com ele podemos usar temas pré-prontos de alguns dos principais sites que fornecem gráficos. No ggthemes temos, por exemplo, temas inspirados nos gráficos do Google, The Economist e do FiveThirtyEight.
Instalando os pacotes necessários
Novamente usaremos a função install.packages() para instalar pacotes e a função library() para carregá-los:
> install.packages(“tidyquant”)
> install.packages(“ggplot2”)
> install.packages(“ggthemes”)
> library(tidyquant)
> library(ggplot2)
> library(ggthemes)
Importando as séries históricas das ações
No último texto, vimos como importar as séries históricas das ações utilizando a função BatchGetSymbols() ou getSymbols().
Como estamos trabalhando com o tidyquant, usaremos a função tq_get() para baixar os dados dos ativos:
Note que o primeiro argumento é sempre o ticker da ação, no caso escolhi novamente a ação da Vale. Em seguida, pedi para baixar desde 01/01/2010 até a data de hoje do meu computador.
Operador Pipe
Na continuação do código, usaremos o operador pipe (%>%). Introduzido por Stefan Milton Bache, o operador serve para tornar a escrita do código mais fluida e elegante. Basicamente usa o valor resultante da expressão do lado esquerdo como primeiro argumento da função do lado direito. Vamos então usar o pipe para fazermos um plot da série histórica de preços das ações da Vale:
VALE3 %>%
ggplot(aes(x = date, y = adjusted)) +
geom_line() +
labs(x = “Date”, “Price”, title = “VALE3”, subtitle = “VALE S.A”) +
theme_gdocs()
Lembrando que sempre usamos o preço ajustado no eixo X.
Calculando os retornos diários das ações
Agora que já baixamos a série histórica, vamos calcular os retornos diários das ações da Vale (VALE3). Para isso, usaremos outra função do tidyquant, a tq_transmute(). É uma função que serve para principalmente obter os dados em uma periodicidade diferente da atual.
VALE3_rdiario <- VALE3 %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = “daily”,
col_rename = “vale_retornos_diarios”)
O argumento mutate_fun transforma nossos dados em retornos periódicos, e o argumento “period” específica que seriam os retornos diários.
Visualizando os retornos diários das ações
Visualizar os retornos diários é bastante simples e parecido com o que fizemos antes, de novo usaremos o pipe:
> VALE3_rdiario %>%
ggplot(aes(x = date, y = vale_retornos_diarios)) +
geom_line() +
labs(x = “Data”, y = “Retornos Diários”, title = “VALE3”, subtitle = “VALE S.A”) +
theme_gdocs()
Perceba que o gráfico faz um certo sentido, estando a maior parte dos retornos diários entre +0,1 e -0,1.
Note também os retornos diários anormais em 2020, por conta do choque causado pela pandemia.
Calculando os retornos semanais das ações
A depender da análise, você pode querer também obter os retornos semanais da ação ou portfólio em questão. Para obtermos os retornos semanais, basta trocarmos o argumento “period” para “weekly”:
VALE3_rsemanal <- VALE3 %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = “weekly”,
col_rename = “vale_retorno_semanal”)
Visualizando os retornos semanais das ações
Para visualizar os retornos semanais usaremos o ggplot com gráfico de barras:
VALE3_rsemanal %>%
ggplot(aes(x = date, y = vale_retorno_semanal)) +
geom_bar(stat = “identity”) +
labs(x = “Data”, y = “Retorno Semanal”, title = “VALE3”, subtitle = “VALE S.A”) +
theme_gdocs()
Calculando os retornos mensais das ações
E se quiséssemos os retornos mensais das ações da VALE3? Bom, a estrutura do código também é bastante parecida, basta trocarmos o período para “monthly”:
VALE3_rmensal <- VALE3 %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = “monthly”,
col_rename = “vale_retorno_mensal”)
Visualizando os retornos mensais das ações
A visualização é também similar a de retornos semanais, também com gráfico de barras:
VALE3_rmensal %>%
ggplot(aes(x = date, y = vale_retorno_mensal)) +
geom_bar(stat = “identity”) +
labs(x = “Data”, y = “Retornos Mensais”, title = “VALE3”, subtitle = “VALE S.A”) +
theme_gdocs()
Calculando os retornos acumulados no R
O cálculo dos retornos acumulados são úteis para compararmos a rentabilidade dos nossos investimentos em relação ao mercado ou a algum título público.
Você provavelmente já ouviu alguém falando: “Quem investiu R$1 em Magazine Luiza em 2016 teria hoje…” Este cálculo é feito através do retorno acumulado, como estamos trabalhando as ações da Vale, vamos verificar o retorno acumulado das ações da Vale desde 01/01/2010.
A ideia para calcular o retorno acumulado é obter o produto acumulado dos retornos mensais. Para isso, usaremos uma função chamada cumprod().
Como queremos trabalhar na base 1 para obter corretamente o produto acumulado, vamos então somar 1 a coluna de retornos diários:
vale_um <- 1 + VALE3_rmensal$vale_retorno_mensal
Agora, vamos passar a variável vale_um dentro da função cumprod() e atribuir a variável vale_ac:
vale_ac <- cumprod(vale_um)
Vamos então armazenar uma variável com o retorno acumulado:
ret_acum <- vale_ac – 1
Vamos juntar tudo com o mutate(), lembrando que precisamos primeiro acessar o data frame com os retornos mensais:
VALE3_rmensal %>%
mutate(vale_um) %>%
mutate(ret_acum) %>%
ggplot(aes(x = date, y = ret_acum)) +
geom_line() +
labs(x = “Data”, y = “Retorno Acumulado”, title = “VALE3”, subtitle = “VALE S.A”)+
theme_gdocs()
Feito! Obtivemos um fator de retorno acumulado de aproximadamente 2.02, logo para cada 1 real investido em Vale em 2010, teríamos aproximadamente R$2,02 hoje.
Calculando os retornos acumulados de dois ativos juntos no R
É comum vermos gráficos financeiros com duas séries de retornos acumulados ao longo do tempo, com a óbvia intenção de comparar o retorno acumulado de dois ativos. Para o nosso texto, importaremos a série histórica das ações da Petrobras (PETR4) e da Magazine Luiza (MGLU3).
Importando os dados das ações
acoes <- c(“PETR4.SA”, “MGLU3.SA”)
df_acoes <- tq_get(acoes,
from = “2010-01-01”,
to = Sys.Date(),
get = “stock.prices”)
Calculando os retornos mensais
retm_acoes <- df_acoes %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = ‘monthly’,
col_rename = ‘retornosm’)
Calculando os retornos acumulados
A ideia para calcular o retorno acumulado é praticamente a mesma, novamente usaremos a função cumprod(). Dessa vez, como estamos tratando de duas séries, usaremos o group_by(symbol) para dividir as séries e colocaremos as expressões após o pipe:
retm_acoes %>%
group_by(symbol) %>%
mutate(acoes_ac = cumprod(1 + retornosm)) %>%
mutate(ret_acum_acoes = acoes_ac – 1) %>%
ggplot(aes(x = date, y = ret_acum_acoes, color = symbol)) +
geom_line() +
labs(x = “Data”, y = “Retorno Acumulado”, title = “Retornos Acumulados desde 2010”, subtitle = “PETR4 e MGLU3”)+
theme_gdocs()
Quem investiu no Magazine Luiza em 2010 obteve um retorno de quase 40x sobre o capital investido, o investidor da Petrobras obteve um retorno próximo de zero.
Conclusão
O cálculo dos retornos de ações é uma das atividades mais essenciais que podemos desempenhar com o R. É base para realizarmos estudos de ativos, rebalanceamento de portfólios e backtest de estratégias.
Para o texto, escolhi uma solução com base no tidyquant, até para facilitar a compreensão dos próximos textos. Nas referências deixo uma solução sem o uso do mesmo (CHUNG, 2019).
Agora que já sabemos como calcular os retornos, veremos no próximo artigo da série como recriar o modelo de precificação de ativos (CAPM) no R, a partir de bibliotecas estatísticas.
Referências
Dancho, M. (2018, May 9). Package ‘tidyquant’. Acesso em 07/09/2021 de cran.rproject.org: https://cran.r-project.org/web/packages/tidyquant/tidyquant.pdf
Ryan, Jeffrey A., Joshua M. Ulrich, Wouter Thielen, Paul Teetor, Steve Bronder, and Maintainer Joshua M. Ulrich. Package ‘quantmod’. Available online: https://cran.r-project.org/web/packages/quantmod/quantmod.pdf (acesso em 22 de agosto de August 2021). 2020
Kumar, Manoj (2015). Stock Return Calculations in R. Acesso em 08/09/2021 de RPubs rstudio-pubs-static.s3.amazonaws.com
DD (2018). How to calculate stock returns in R. Acesso em 08/09/2021 de coding finance. Disponível em: https://www.codingfinance.com/post/2018-04-03-calc-returns/
Chung, Víctor (2019). CAPM. Acesso em 08/09/2021 de RPubs. Disponível em: https://rpubs.com/vchung/capm_USMP

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.