Extrair informações da web sobre o preço das stocks de alguns dos principais bancos americanos e realizar a Análise Exploratória para entender melhor o movimento dos preços. As empresas analisadas, serão:
Para extrair os dados, usaremos a técnica de Web Scraping. Para realizar a Análise Exploratória, lançaremos mão da plotagem de gráficos e de algumas das principais medidas resumo da estatística descritiva.
library(tidyquant)
library(timetk)
library(tidyverse)
library(corrplot)
#web scraping
jpm <- tq_get("JPM", from = "2010-01-01", to = "2022-12-30", get = "stock.prices")
head(jpm)
## # A tibble: 6 × 8
## symbol date open high low close volume adjusted
## <chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
## 1 JPM 2010-01-04 41.8 43.0 41.7 42.8 35460500 30.1
## 2 JPM 2010-01-05 42.8 43.8 42.8 43.7 41208300 30.7
## 3 JPM 2010-01-06 43.5 44.1 43.3 43.9 27729000 30.8
## 4 JPM 2010-01-07 43.8 45.1 43.6 44.8 44864700 31.4
## 5 JPM 2010-01-08 44.4 44.7 44.1 44.7 33110100 31.4
## 6 JPM 2010-01-11 45.1 45.2 44.3 44.5 31878700 31.3
Antes de iniciar a análise, precisamos calcular o retorno diário e o retorno mensal.
#cálculo do retorno diário
jpm_retorno_diario <- jpm %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "daily",
col_rename = "jpm_retorno")
#calculo dos retornos mensais
jpm_retorno_mensal <- jpm %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "jpm_retorno")
Com os retornos definidos, vamos começar a análise plotando o gráfico de evolução de preços da stock do banco JP.Morgan Chase.
jpm %>%
ggplot(aes(x = date, y = adjusted)) +
geom_line() +
theme_bw() +
ggtitle("JPMorgan Chase & Co. 2010 - 2022") +
scale_x_date(date_breaks = "years", date_labels = "%Y") +
labs(x = "Ano", y = "Preco Ajustado")
Plot dos retornos diários:
jpm_retorno_diario %>%
ggplot(aes(x = date, y = jpm_retorno)) +
geom_line() +
theme_classic() +
labs(x = "ano") +
ggtitle("JPMorgan Chase & Co. Retorno Diario") +
scale_x_date(date_breaks = "years", date_labels = "%Y") +
scale_y_continuous(breaks = seq(-0.5, 0.6, 0.05), labels = scales::percent)
Nota-se que o maior pico de volatilidade ocorreu no início do ano de 2020, indicando que os maiores retornos (positivos ou negativos) ocorreram por conta da pandemia de covid-19.
Vamos verificar com um pouco mais de detalhe os tais retornos extremos.
jpm_retorno_diario %>%
ggplot(aes(x = jpm_retorno)) +
geom_histogram(bins = 57) +
theme_classic() +
labs(x = "Retorno Diario") +
ggtitle("JPMorgan Chase & Co. Retorno Diario 2") +
scale_x_continuous(breaks = seq(-0.5,0.6,0.05), labels = scales::percent)
Perceba que os retornos extremos positivos diários tem valor aproximado de 20% positivo. Os retornos extremos negativos diários, por sua vez, possuem valor aproximado de -15%.
Agora, vamos verificar a data exata em que tais valores ocorreram.
#checando a data dos valores extremos negativos
jpm_retorno_diario %>%
filter(jpm_retorno < -0.10)
## # A tibble: 3 × 2
## date jpm_retorno
## <date> <dbl>
## 1 2020-03-09 -0.135
## 2 2020-03-16 -0.150
## 3 2020-03-18 -0.105
jpm_retorno_diario %>%
filter(jpm_retorno > 0.1)
## # A tibble: 3 × 2
## date jpm_retorno
## <date> <dbl>
## 1 2020-03-13 0.180
## 2 2020-03-24 0.119
## 3 2020-11-09 0.135
De fato, exceto por um retorno extremo que ocorreu no mês de setembro, os demais foram registrados no início do período da pandemia, março de 2020. Um dos grandes fatores responsáveis pelo choque de volatidade nos mercados no início do período de pandemia, antes mesmo de qualquer estudo ou medida tomada pelos governos, foi a incerteza gerada nos agentes de mercado.
O leitor pode verificar neste link uma breve referência sobre o comportamento do mercado no mês de março de 2020.
Plot dos retornos mensais:
jpm_retorno_mensal %>%
ggplot(aes(x = date, y = jpm_retorno)) +
geom_bar(stat = "identity") +
theme_classic() +
labs(x = "Ano", y = "Retorno Mensal") +
ggtitle("JPMorgan Chase & Co. Retorno Mensal") +
geom_hline(yintercept = 0) +
scale_x_date(date_breaks = "year", date_labels = "%Y") +
scale_y_continuous(breaks = seq(-0.6, 0.8, 0.1), labels = scales::percent)
A partir daqui, iremos fazer o mesmo processo feito para a stock do JP. Morgan mas, dessa vez vamos incluir as stocks dos outros bancos para uma análise conjunta.
#web scraping
tickers <- c("WFC", "C", "BAC", "MS", "JPM")
stocks <- tq_get(tickers,
from = "2010-01-01",
to = "2022-12-30",
get = "stock.prices")
#calculo dos retornos diarios
stocks_retorno_diario <- stocks %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "daily",
col_rename = "retorno")
#calculo dos retornos mensais
stocks_retorno_mensal <- stocks %>%
group_by(symbol) %>%
tq_transmute(select = adjusted,
mutate_fun = periodReturn,
period = "monthly",
col_rename = "retorno")
#plot da evolucao dos precos
stocks %>%
ggplot(aes(x = date, y = adjusted, color = symbol)) +
geom_line() +
labs(x = "Ano", y = "Preco Ajustado") +
ggtitle("Stock dos Principais Bancos Americanos") +
scale_x_date(date_breaks = "year", date_labels = "%Y") +
theme_bw()
O gráfico nos mostra que o JP. Morgan teve uma valorização muito maior em relação aos outros bancos americanos. Faz sentido, se observarmos que a instituição é a maior em ativos sob gestão, chagando a ultrapassar a marca dos 2 trilhões de doláres. Mais detalhes neste link.
stocks %>%
ggplot(aes(x = date, y = adjusted)) +
geom_line() +
facet_wrap(~symbol, scales = "free_y") +
theme_classic() +
labs(x = "Ano", y = "Preco Ajustado") +
ggtitle("Stock dos Principais Bancos Americanos")
#plot retorno diario
stocks_retorno_diario %>%
ggplot(aes(x = date, y = retorno)) +
geom_line() +
facet_wrap(~symbol, scales = "free_y") +
theme_classic() +
geom_hline(yintercept = 0) +
scale_y_continuous(labels = scales::percent) +
ggtitle("Retorno Diario dos Principais Bancos Americanos") +
labs(x = "Ano")
#plot retorno mensal
stocks_retorno_mensal %>%
ggplot(aes(x = date, y = retorno)) +
geom_bar(stat = 'identity') +
geom_hline(yintercept = 0) +
facet_wrap(~symbol, scales = "free_y") +
scale_y_continuous(labels = scales::percent, breaks = seq(-0.5, 0.75, 0.05)) +
theme_classic() +
ggtitle("Retorno Mensal Dos Principais Bancos Americanos") +
labs(x = "Ano")
Nesse tópico, vamos trabalhar com algumas das principais medidas de tendência central e medidas de dispersão na tentativa de sumarizar os dados.
Inicialmente, além de calcular a média e o desvio padrão para os diferentes bancos, iremos organizar os dados, em relação à média, do maior para o menor. O objetivo é verificar qual ativo tem o maior retorno médio. Todavia, durante a escolha de ativos é importante levar em conta outras métricas, como desvio padrão e outros índices que avaliam a relação entre risco e retorno.
#para retornos diarios
stocks_retorno_diario %>%
group_by(symbol) %>%
summarise(media = mean(retorno), desvio_padrao = sd(retorno)) %>%
arrange(desc(media))
## # A tibble: 5 × 3
## symbol media desvio_padrao
## <chr> <dbl> <dbl>
## 1 MS 0.000627 0.0220
## 2 JPM 0.000610 0.0180
## 3 BAC 0.000522 0.0219
## 4 WFC 0.000411 0.0190
## 5 C 0.000388 0.0220
O maior retorno médio diário é dado pelo Morgan Stanley, seguido pelo JP. Morgan.
Vamos avaliar para o caso dos retornos médio mensais. Porém, desta vez, vamos organizar os dados por ano e por instituição. Além da classificação pela média de retornos.
#para retornos mensais
stocks_retorno_mensal %>%
mutate(year = year(date)) %>%
group_by(symbol, year) %>%
summarise(media = mean(retorno), desvio_padrao = sd(retorno)) %>%
arrange(desc(media))
## # A tibble: 65 × 4
## # Groups: symbol [5]
## symbol year media desvio_padrao
## <chr> <dbl> <dbl> <dbl>
## 1 BAC 2012 0.0712 0.130
## 2 MS 2013 0.0458 0.0835
## 3 WFC 2021 0.0433 0.0802
## 4 C 2019 0.0429 0.0978
## 5 C 2012 0.0407 0.113
## 6 BAC 2021 0.0368 0.0777
## 7 MS 2020 0.0365 0.141
## 8 BAC 2019 0.0356 0.0864
## 9 JPM 2019 0.0347 0.0654
## 10 MS 2021 0.0344 0.0669
## # ℹ 55 more rows
Notamos que o maior retorno médio mensal foi dado pelo Bank of America no ano de 2012, seguido pelo Morgan Stanley no ano de 2013.
Para facilitar a visualização das estatísticas calculadas, vamos plotar as medidas resumo.
stocks_retorno_mensal %>%
mutate(year = year(date)) %>%
group_by(symbol, year) %>%
summarise(media = mean(retorno), desvio_padrao = sd(retorno)) %>%
ggplot(aes(x = year, y = media, fill = symbol)) +
geom_bar(stat = 'identity', position = "dodge", width = 0.7) +
scale_y_continuous(breaks = seq(-0.1, 0.4, 0.02), labels = scales::percent) +
scale_x_continuous(breaks = seq(2009, 2023, 1)) +
geom_hline(yintercept = 0) +
labs(x = "Ano", y = "Media dos Retornos Mensais") +
theme_bw() +
theme(legend.position = "top") +
scale_fill_brewer(palette = "Set1", name = "Stocks") +
ggtitle("Retorno Medio Mensal Dos Princiapais Bancos Americanos")
stocks_retorno_mensal %>%
mutate(year = year(date)) %>%
group_by(symbol, year) %>%
summarise(media = mean(retorno), desvio_padrao = sd(retorno)) %>%
ggplot(aes(x = year, y = desvio_padrao, fill = symbol)) +
geom_bar(stat = 'identity', position = "dodge", width = 0.7) +
scale_y_continuous(breaks = seq(-0.1, 0.4, 0.02), labels = scales::percent) +
scale_x_continuous(breaks = seq(2009, 2023, 1)) +
geom_hline(yintercept = 0) +
labs(x = "Ano", y = "Desvio dos Retornos Mensais") +
theme_bw() +
theme(legend.position = "top") +
scale_fill_brewer(palette = "Set1", name = "Stocks") +
ggtitle("Desvio Padrao Mensal Dos Princiapais Bancos Americanos")
Para finalizar, vamos plotar a matriz de correlação entre as stocks.
stocks_retorno_mensal %>%
spread(symbol, value = retorno) %>%
tk_xts(silent = TRUE) %>%
cor() %>%
corrplot()
Como era esperado, os ativos possuem correlação próxima de 1. Isso se deve ao fato de todos serem ativos de empresas do mesmo setor que executam as mesmas atividades, ações de bancos.
Para todos os bancos analisados, observamos picos de volatilidade nos retornos no mês de março de 2020. Outra informação importante que retiramos dos gráficos é que no mesmo período, início da pandamia, houve uma queda abrupta dos preços das stocks, em grande parte tal variação foi causada pela incerteza e aversão a risco dos agentes de mercado.
É relevante mencionar que o maior banco, em ativos sob gestão, JP. Morgan, foi a stock que mais se valorizou durante o período observado. Além disso, a ação teve o segundo maior retorno médio diário, perdendo apenas para o Morgan Stanley.
Na parte final do script, analisamos a correlação entre os ativos. Percebemos que todos têm correlação próximas a 1, o que era esperado, dado que todas as empresas são do mesmo setor.
E, por fim, devemos lembrar que esse script objetiva a familiaridade com o comportamento dos ativos através da uma introdução à análise exploratória de dados. Durante o processo de seleção de ativos e avaliação de carteiras de investimentos, devemos considerar métricas mais robustas, principalmente aquelas que levam em consideração a relação entre risco e retorno, tais como: indíce de sharp, Traynor, coeficiente de variação e etc. Sem esquecermos, é claro, de observamos a correlação entre os ativos, objetivando a descorrelação ou a correlação negativa em detrimento da positiva.