IBOV

107.945,25 pts

-0,91%

SP500

4.349,72 pts

-1,36%

DJIA

34.043,68 pts

-0,93%

NASDAQ

14.225,47 pts

-1,96%

IFIX

2.799,91 pts

-0,36%

BRENT

US$ 86,77

+0,57%

IO62

¥ 751,50

+0,00%

TRAD3

R$ 4,31

-5,27%

ABEV3

R$ 14,72

+0,20%

AMER3

R$ 34,30

-1,91%

ASAI3

R$ 12,08

+0,49%

AZUL4

R$ 26,50

-4,02%

B3SA3

R$ 13,10

-3,95%

BIDI11

R$ 23,56

-6,84%

BBSE3

R$ 20,96

+1,64%

BRML3

R$ 9,05

-1,63%

BBDC3

R$ 17,64

+1,08%

BBDC4

R$ 21,34

+2,30%

BRAP4

R$ 26,95

-2,53%

BBAS3

R$ 31,39

+0,60%

BRKM5

R$ 49,90

+3,52%

BRFS3

R$ 23,22

+2,33%

BPAC11

R$ 21,52

+0,84%

CRFB3

R$ 15,00

+0,87%

CCRO3

R$ 12,02

-0,66%

CMIG4

R$ 12,77

-1,69%

HGTX3

R$ 37,51

+0,00%

CIEL3

R$ 2,06

-0,48%

COGN3

R$ 2,38

-0,41%

CPLE6

R$ 6,76

+0,89%

CSAN3

R$ 21,63

-1,59%

CPFE3

R$ 27,41

+1,25%

CVCB3

R$ 12,72

-0,31%

CYRE3

R$ 15,46

-1,65%

ECOR3

R$ 7,39

-3,01%

ELET3

R$ 33,37

-1,82%

ELET6

R$ 32,90

-1,64%

EMBR3

R$ 20,75

+1,07%

ENBR3

R$ 21,20

-0,37%

ENGI11

R$ 41,10

-0,33%

ENEV3

R$ 12,77

-1,23%

EGIE3

R$ 39,28

+0,25%

EQTL3

R$ 21,74

-1,80%

EZTC3

R$ 19,83

-3,31%

FLRY3

R$ 18,50

-3,29%

GGBR4

R$ 27,96

+1,82%

GOAU4

R$ 11,58

+0,95%

GOLL4

R$ 16,41

-3,81%

NTCO3

R$ 23,25

+0,34%

HAPV3

R$ 11,39

-1,97%

HYPE3

R$ 29,08

-1,28%

IGTA3

R$ 33,24

+0,00%

GNDI3

R$ 65,80

-2,56%

IRBR3

R$ 3,18

-4,79%

ITSA4

R$ 9,49

-0,62%

ITUB4

R$ 23,27

-0,12%

JBSS3

R$ 35,93

-1,04%

JHSF3

R$ 5,46

-0,18%

KLBN11

R$ 24,28

-1,89%

RENT3

R$ 53,61

-2,34%

LCAM3

R$ 23,88

-2,37%

LWSA3

R$ 8,53

-5,22%

6,56

+0,30%

LREN3

R$ 26,03

-1,55%

MGLU3

R$ 6,42

-6,95%

MRFG3

R$ 23,55

+4,94%

BEEF3

R$ 9,75

-1,11%

MRVE3

R$ 11,99

-0,41%

MULT3

R$ 19,70

-1,20%

PCAR3

R$ 20,93

+7,33%

PETR3

R$ 34,62

+0,08%

PETR4

R$ 31,93

+0,50%

VBBR3

21,01

-1,82%

PRIO3

R$ 23,20

-1,69%

QUAL3

R$ 16,20

-4,76%

RADL3

R$ 20,96

-0,19%

RAIL3

R$ 16,61

-2,17%

SBSP3

R$ 35,53

-1,30%

SANB11

R$ 31,33

-0,31%

CSNA3

R$ 25,95

+0,77%

SULA11

R$ 23,09

-3,83%

SUZB3

R$ 58,11

-2,48%

TAEE11

R$ 38,10

+0,31%

VIVT3

R$ 48,22

-0,28%

TIMS3

R$ 12,79

-1,00%

TOTS3

R$ 25,86

-2,89%

UGPA3

R$ 13,53

-2,31%

USIM5

R$ 16,23

+2,33%

VALE3

R$ 83,82

-1,28%

VIIA3

R$ 4,21

-3,21%

WEGE3

R$ 29,94

-2,18%

YDUQ3

R$ 19,58

-4,11%

IBOV

107.945,25 pts

-0,91%

SP500

4.349,72 pts

-1,36%

DJIA

34.043,68 pts

-0,93%

NASDAQ

14.225,47 pts

-1,96%

IFIX

2.799,91 pts

-0,36%

BRENT

US$ 86,77

+0,57%

IO62

¥ 751,50

+0,00%

TRAD3

R$ 4,31

-5,27%

ABEV3

R$ 14,72

+0,20%

AMER3

R$ 34,30

-1,91%

ASAI3

R$ 12,08

+0,49%

AZUL4

R$ 26,50

-4,02%

B3SA3

R$ 13,10

-3,95%

BIDI11

R$ 23,56

-6,84%

BBSE3

R$ 20,96

+1,64%

BRML3

R$ 9,05

-1,63%

BBDC3

R$ 17,64

+1,08%

BBDC4

R$ 21,34

+2,30%

BRAP4

R$ 26,95

-2,53%

BBAS3

R$ 31,39

+0,60%

BRKM5

R$ 49,90

+3,52%

BRFS3

R$ 23,22

+2,33%

BPAC11

R$ 21,52

+0,84%

CRFB3

R$ 15,00

+0,87%

CCRO3

R$ 12,02

-0,66%

CMIG4

R$ 12,77

-1,69%

HGTX3

R$ 37,51

+0,00%

CIEL3

R$ 2,06

-0,48%

COGN3

R$ 2,38

-0,41%

CPLE6

R$ 6,76

+0,89%

CSAN3

R$ 21,63

-1,59%

CPFE3

R$ 27,41

+1,25%

CVCB3

R$ 12,72

-0,31%

CYRE3

R$ 15,46

-1,65%

ECOR3

R$ 7,39

-3,01%

ELET3

R$ 33,37

-1,82%

ELET6

R$ 32,90

-1,64%

EMBR3

R$ 20,75

+1,07%

ENBR3

R$ 21,20

-0,37%

ENGI11

R$ 41,10

-0,33%

ENEV3

R$ 12,77

-1,23%

EGIE3

R$ 39,28

+0,25%

EQTL3

R$ 21,74

-1,80%

EZTC3

R$ 19,83

-3,31%

FLRY3

R$ 18,50

-3,29%

GGBR4

R$ 27,96

+1,82%

GOAU4

R$ 11,58

+0,95%

GOLL4

R$ 16,41

-3,81%

NTCO3

R$ 23,25

+0,34%

HAPV3

R$ 11,39

-1,97%

HYPE3

R$ 29,08

-1,28%

IGTA3

R$ 33,24

+0,00%

GNDI3

R$ 65,80

-2,56%

IRBR3

R$ 3,18

-4,79%

ITSA4

R$ 9,49

-0,62%

ITUB4

R$ 23,27

-0,12%

JBSS3

R$ 35,93

-1,04%

JHSF3

R$ 5,46

-0,18%

KLBN11

R$ 24,28

-1,89%

RENT3

R$ 53,61

-2,34%

LCAM3

R$ 23,88

-2,37%

LWSA3

R$ 8,53

-5,22%

6,56

+0,30%

LREN3

R$ 26,03

-1,55%

MGLU3

R$ 6,42

-6,95%

MRFG3

R$ 23,55

+4,94%

BEEF3

R$ 9,75

-1,11%

MRVE3

R$ 11,99

-0,41%

MULT3

R$ 19,70

-1,20%

PCAR3

R$ 20,93

+7,33%

PETR3

R$ 34,62

+0,08%

PETR4

R$ 31,93

+0,50%

VBBR3

21,01

-1,82%

PRIO3

R$ 23,20

-1,69%

QUAL3

R$ 16,20

-4,76%

RADL3

R$ 20,96

-0,19%

RAIL3

R$ 16,61

-2,17%

SBSP3

R$ 35,53

-1,30%

SANB11

R$ 31,33

-0,31%

CSNA3

R$ 25,95

+0,77%

SULA11

R$ 23,09

-3,83%

SUZB3

R$ 58,11

-2,48%

TAEE11

R$ 38,10

+0,31%

VIVT3

R$ 48,22

-0,28%

TIMS3

R$ 12,79

-1,00%

TOTS3

R$ 25,86

-2,89%

UGPA3

R$ 13,53

-2,31%

USIM5

R$ 16,23

+2,33%

VALE3

R$ 83,82

-1,28%

VIIA3

R$ 4,21

-3,21%

WEGE3

R$ 29,94

-2,18%

YDUQ3

R$ 19,58

-4,11%

Calculando os retornos das ações no R

lucca

09 SET

7 MIN

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!

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

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.