O dia depois do fim

Pela terceira vez nesse século, a Bovespa acionou o circuit breaker, mecanismo que paralisa os negócios por 30 minutos após uma queda de 10% no índice. O movimento refletiu o aumento da incerteza nos mercados globais, por conta da guerra no mercado de petróleo entre a Arábia Saudita e a Rússia. Eventos como esse são raros de ocorrer, de modo que é possível dizer que o mercado financeiro passou ontem por um forte teste de estresse.

Para ilustrar, vamos considerar a variação percentual entre a mínima do dia e o fechamento no pregão anterior. Para isso, vamos carregar alguns pacotes e pegar os dados que precisaremos para esse comentário.


library(quantmod)
library(BatchGetSymbols)
library(ggplot2)
library(scales)
library(forecast)
library(xts)
library(gridExtra)
library(tidyverse)

## Pegar dados
getSymbols("BRL=X",src="yahoo")
getSymbols("^BVSP",src="yahoo")
getSymbols('VIXCLS', src='FRED')

## Maiores quedas no BOVESPA
first.date = as.Date('2007-01-01')
last.date = as.Date('2020-03-09')
my.assets = c('CSNA3.SA','PETR4.SA', 'MRFG3.SA', 'PETR3.SA')
my.l = BatchGetSymbols(tickers = my.assets,
first.date = first.date,
last.date = last.date)

Uma vez que pegamos os dados, nós fazemos a criação das métricas que precisaremos.


df_ibov = tibble(time=as.Date(time(BVSP)),
ibov=BVSP$BVSP.Close) %>%
mutate(dibov = (BVSP$BVSP.Close/lag(BVSP$BVSP.Close,1)-1)*100) %>%
mutate(variacao = (BVSP$BVSP.Low/lag(BVSP$BVSP.Close,1)-1)*100)

E a seguir, plotamos o gráfico com especial atenção para os eventos de circuit breaker.


ggplot(df_ibov, aes(x=time, y=variacao))+
geom_line()+
geom_hline(yintercept=-10, colour='red', linetype='dashed')+
annotate('text', x=as.Date('2017-05-18'), y=-11,
label='Joesley Day',
colour='darkblue', size=4.5)+
annotate('text', x=as.Date('2020-03-09'), y=-13,
label='Petróleo',
colour='darkblue', size=4)+
annotate('text', x=as.Date('2008-09-15'), y=-16,
label='Subprime',
colour='darkblue', size=4)+
scale_x_date(breaks = date_breaks("6 months"),
labels = date_format("%b/%Y"))+
theme(axis.text.x=element_text(angle=45, hjust=1))+
labs(x='', y='%',
title='Variação do Ibovespa: Mínima do pregão sobre fechamento do pregão anterior (%)',
caption='Fonte: analisemacro.com.br')

Quedas de mais de 10% em um pregão são raras, como é possível ver na amostra acima. Para um total de 3.268 pregões, apenas em três deles tivemos uma queda maior do que 10%. Foram causados pela crise do subprime nos Estados Unidos em 2008, pelo Joesley Day doméstico e agora pela crise entre os membros da Opep. A seguir, listamos as maiores quedas dentro da BOVESPA.


filter(my.l$df.tickers, ref.date > '2019-01-01') %>%
ggplot(aes(x = ref.date, y = price.close))+
geom_line()+facet_wrap(~ticker, scales = 'free_y')+
scale_x_date(breaks = date_breaks("30 days"),
labels = date_format("%d/%b"))+
theme(axis.text.x=element_text(angle=45, hjust=1))

As ações da Petrobras foram as que mais sofreram no pregão de ontem. A PETR3 e a PETR4 caíram 29,68% e 29,70%, respectivamente. Também sofreram perdas grandes a CSNA3 e a MRFG3, com quedas de 25,29% e 23,89%, respectivamente. Em termos gerais, o Ibovespa caiu 12,17% e a taxa de câmbio já é cotado hoje acima de 4,70 R$/US$. Ilustramos a seguir o comportamento das duas séries.


df_cambio = tibble(time=as.Date(time(`BRL=X`)),
cambio = `BRL=X`[,4]) %>%
mutate(log_cambio = diff(log(cambio)))

g1 = filter(df_ibov, time > '2019-05-01') %>%
drop_na() %>%
ggplot(aes(x=time, y=ibov/1000))+
annotate("rect", fill = "orange", alpha = 0.3,
xmin = as.Date('2020-01-23'),
xmax = as.Date('2020-03-09'),
ymin = -Inf, ymax = Inf)+
geom_line()+
scale_x_date(breaks = date_breaks("30 days"),
labels = date_format("%d/%b"))+
theme(axis.text.x=element_text(angle=45, hjust=1))+
labs(x='', y='Mil Pontos',
title='Índice Bovespa')

g2 = filter(df_cambio, time > '2019-05-01') %>%
drop_na() %>%
ggplot(aes(x=time, y=cambio))+
annotate("rect", fill = "blue", alpha = 0.3,
xmin = as.Date('2020-01-01'),
xmax = as.Date('2020-03-10'),
ymin = -Inf, ymax = Inf)+
geom_line()+
scale_x_date(breaks = date_breaks("30 days"),
labels = date_format("%d/%b"))+
theme(axis.text.x=element_text(angle=45, hjust=1))+
labs(x='', y='',
title='Taxa de Câmbio R$/US$')

grid.arrange(g1, g2, ncol=2, nrow=1)

E, por fim, ilustramos o comportamento da volatilidade de ações, com base no índice VIX.


df_vix = tibble(time=as.Date(time(VIXCLS)),
vix = VIXCLS)

filter(df_vix, time > '2018-01-01') %>%
ggplot(aes(x=time, y=vix))+
geom_line()+
scale_x_date(breaks = date_breaks("30 days"),
labels = date_format("%d/%b"))+
theme(axis.text.x=element_text(angle=45, hjust=1))+
labs(x='', y='',
title='VIX Index')

O cenário externo virou de vez. A volatilidade está em níveis bastante elevados. Nesse quadro, é preciso que os poderes Legislativo e Executivo se entendam e deem cabo das reformas que faltam para destravar o ambiente de negócios. Sem isso, corremos um sério risco de cair em uma nova recessão.

___________________

(*) O código completo desse comentário estará disponível logo mais no Clube do Código.

(**) Aprenda a analisar dados financeiros em nosso curso de  Econometria Financeira usando o R.

___________________


Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Como planejar um pipeline de previsão macroeconômica: da coleta ao dashboard

Montar um pipeline de previsão macroeconômica não é apenas uma tarefa técnica — é um exercício de integração entre dados, modelos e automação. Neste post, apresento uma visão geral de como estruturar esse processo de ponta a ponta, da coleta de dados até a construção de um dashboard interativo, que exibe previsões automatizadas de inflação, câmbio, PIB e taxa Selic.

Coletando e integrando dados do BCB, IBGE e IPEA de forma automatizada

Quem trabalha com modelagem e previsão macroeconômica sabe o quanto é demorado reunir dados de diferentes fontes — Banco Central, IBGE, IPEA, FRED, IFI... Cada um com sua API, formato, frequência e estrutura. Esse gargalo de coleta e padronização consome tempo que poderia estar sendo usado na análise, nos modelos ou na comunicação dos resultados.

Foi exatamente por isso que criamos uma rotina de coleta automatizada, que busca, trata e organiza séries temporais econômicas diretamente das APIs oficiais, pronta para ser integrada a pipelines de previsão, dashboards ou agentes de IA econometristas.

Criando operações SQL com IA Generativa no R com querychat

No universo da análise de dados, a velocidade para obter respostas é um diferencial competitivo. Frequentemente, uma simples pergunta de negócio — “Qual foi nosso produto mais vendido no último trimestre na região Nordeste?” — inicia um processo que envolve abrir o RStudio, escrever código dplyr ou SQL, executar e, finalmente, obter a resposta. E se pudéssemos simplesmente perguntar isso aos nossos dados em português, diretamente no nosso dashboard Shiny?

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.