Como calcular os retornos das ações no programa R - TC | TradersClub

TC School / Quant & Investimentos

Calculando os retornos das ações no R

09/09/2021 às 16:56

TC School

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!

retorno ações

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:

calcular retorno

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()

introdução programa R

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.

calcular retorno das ações

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()

retorno dos investimentos

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()

calcular retorno ações

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()

programa r

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()

ações da vale programa r

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()

 

gráfico ações vale

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

Lucca Carlini
Lucca Carlini
Estudante de Economia na UFPE

TC School

A sua escola como investidor.

Disclaimer: Este material é produzido e distribuído somente com os propósitos de informar e educar, e representa o estado do mercado na data da publicação, sendo que as informações estão sujeitas a mudanças sem aviso prévio. Este material não constitui declaração de fato ou recomendação de investimento ou para comprar, reter ou vender quaisquer títulos ou valores mobiliários. O usuário não deve utilizar as informações disponibilizadas como substitutas de suas habilidades, julgamento e experiência ao tomar decisões de investimento ou negócio. Essas informações não devem ser interpretadas como análise ou recomendação de investimentos e não há garantia de que o conteúdo apresentado será uma estratégia efetiva para os seus investimentos e, tampouco, que as informações poderão ser aplicadas em quaisquer condições de mercados. Investidores não devem substituir esses materiais por serviços de aconselhamento, acompanhamento ou recomendação de profissionais certificados e habilitados para tal função. Antes de investir, por favor considere cuidadosamente a sua tolerância ou a sua habilidade para riscos. A administradora não conduz auditoria nem assume qualquer responsabilidade de diligência (due diligence) ou de verificação independente de qualquer informação disponibilizada neste espaço. Administradora: TradersNews Informação & Educação Ltda. Todos os direitos reservados.

TradersClub

O app essencial para investidores do mercado financeiro brasileiro.

Uma comunidade com milhares de investidores, ferramentas e serviços que vão ajudar você a investir melhor!

TradersClub