B3 - Banco do Brasil ON - BBAS3 - Candlestick + Volume

B3 - Banco do Brasil ON - BBAS3 - Candlestick
B3 - Banco do Brasil ON - BBAS3 - Candlestick
B3 - Banco do Brasil ON - BBAS3 - Volume total de títulos negociados
B3 - Banco do Brasil ON - BBAS3 - Volume total de títulos negociados

Os gráficos acima mostram, para cada dia em que foram negociadas:

  • as cotações corrigidas devido a proventos (juros e dividendos) e bonificações;
  • o volume total de títulos negociados.

das ações do Banco do Brasil ON (BBAS3), conforme obtidas na página Séries Históricas da B3 S.A. – Brasil, Bolsa, Balcão (ex BM&F BOVESPA).

O gráfico de castiçal (candlestick) mostra as cotações de abertura, fechamento, máxima e mínima para cada dia. As extremidades do castiçal correspondem às cotações máxima e mínima no dia, enquanto as extremidades do corpo do castiçal correspondem às cotações de abertura e fechamento. Se a cotação de fechamento for superior a da abertura, o castiçal é mostrado na cor azul, caso contrário na cor vermelha, indicando a ocorrência de uma alta ou baixa no dia, respectivamente. O tamanho do corpo do castiçal mostra a diferença entre as cotações de abertura e fechamento. A linha verde tracejada corresponde a média móvel simples de 14 dias.

Banco de Dados

Foi utilizado o banco de dados SQLite semelhante ao mostrado na página 7. Mercado financeiro, gerado pelo programa b3bbas3cotacoes.py

Programa

Abaixo está mostrado o código do programa, escrito em R, que gera o gráfico, mas antes de ser executado as bibliotecas utilizadas precisam ser instaladas.

#
# source('b3bbas3candlestick.R')
#
# Gerar um gráfico de castiçal (candlestick)
# e um do volume total de títulos negociados das
# ações do Banco do Brasil (BBAS3) negociadas na B3
#
# Bibliotecas
library(tidyverse)
library(tidyquant)
library(lubridate)
library(gridExtra)
library(scales)
library(RSQLite)
library(DBI)

# Conectar ao banco de dados
con <- DBI::dbConnect(RSQLite::SQLite(),
                      "~/R/mercado/B3/bbas3.sqlite")

# Maior data das cotações
qry <- "SELECT MAX(DATAPREG) AS datamax FROM bbas3"
rs <- dbSendQuery(con, qry)
res <- dbFetch(rs, n = -1)
dbHasCompleted(rs)
dbClearResult(rs)

# Datas de início e fim do gráfico
datafim <- as_date(res$datamax[1])
dataini <- datafim - 91

# Consultas
qry <- paste0(
  "SELECT DATAPREG, PREABE, PREMAX, PREMIN, PREULT, VOLTOT ",
  "FROM bbas3 ",
  "WHERE DATAPREG BETWEEN '",
  dataini,
  "' AND  '",
  datafim,
  "' ",
  "ORDER BY DATAPREG"
)

rs <- dbSendQuery(con, qry)
cot <- dbFetch(rs, n = -1)
dbHasCompleted(rs)
dbClearResult(rs)

# Desconectar do banco de dados
dbDisconnect(con)

# Converter caractere em data
cot <- cot %>% mutate(DATAPREG = as_date(DATAPREG))

# Converter inteiro em numérico
cot <- cot %>% mutate(VOLTOT = as.numeric(VOLTOT))

# Limites do gráfico
liminf <- floor(min(cot$PREMIN))
limsup <- ceiling(max(cot$PREMAX))

# Gerar o gráfico de castiçal (candlestick)
plot_cot <- ggplot(cot, aes(x = DATAPREG, y = PREULT)) +
  geom_candlestick(aes(
    open = PREABE,
    high = PREMAX,
    low = PREMIN,
    close = PREULT
  )) +
  geom_ma(ma_fun = SMA, n = 14, color = "darkgreen") +
  scale_x_date(
    breaks = date_breaks("1 week"),
    labels = date_format("%d/%b/\n%Y"),
    limits = c(as.Date(dataini) - 1, as.Date(datafim) + 1)
  ) +
  scale_y_continuous(limits = c(liminf, limsup)) +
  ggtitle(paste0("B3 - Banco do Brasil - BBAS3 (",
                 dataini,
                 " a ",
                 datafim,
                 ")")) +
  xlab("Data do Pregão") +
  ylab("Cotação R$") +
  theme_minimal() +
  theme(
    legend.title = element_text(size = 14),
    legend.text = element_text(size = 12),
    legend.direction = "horizontal",
    legend.position = "top",
    panel.grid.major = element_line(
      size = 0.5,
      linetype = "solid",
      colour = "lightblue"
    ),
    panel.grid.minor = element_line(
      size = 0.3,
      linetype = "solid",
      colour = "lightblue"
    ),
    axis.text.x = element_text(
      size = 10,
      angle = 0,
      hjust = 0.5
    ),
    axis.text.y = element_text(size = 12),
    axis.title.x = element_text(size = 14),
    axis.title.y = element_text(size = 14),
    plot.title = element_text(size = 18),
    plot.subtitle = element_text(size = 16),
    plot.margin = unit(c(6, 12, 6, 6), "pt") # top, right, bottom, left
  )

# Gravar o gráfico de castiçal (candlestick) no disco
ggsave(
  "~/doctec/static/img/b3/b3bbas3candlestick.png",
  plot_cot,
  device = png(),
  width = 11,
  height = 6.25,
  dpi = 72
)

dev.off()

# Gerar o gráfico de volume
plot_vol <- ggplot(cot, aes(x = DATAPREG, y = VOLTOT)) +
  geom_segment(aes(xend = DATAPREG, yend = 0),
               color = "blue") +
  geom_smooth(
    method = "loess",
    se = FALSE,
    color = "darkgreen",
    size = 0.5
  ) +
  scale_x_date(
    breaks = date_breaks("1 week"),
    labels = date_format("%d/%b/\n%Y"),
    limits = c(as.Date(dataini) - 1, as.Date(datafim) + 1)
  ) +
  scale_y_continuous(limits = c(0, max(cot$VOLTOT))) +
  ggtitle(paste0("B3 - Banco do Brasil - BBAS3 (",
                 dataini,
                 " a ",
                 datafim,
                 ")")) +
  xlab("Data do Pregão") +
  ylab("Volume de títulos negociados") +
  theme_minimal() +
  theme(
    legend.title = element_text(size = 14),
    legend.text = element_text(size = 12),
    legend.direction = "horizontal",
    legend.position = "top",
    panel.grid.major = element_line(
      size = 0.5,
      linetype = "solid",
      colour = "lightblue"
    ),
    panel.grid.minor = element_line(
      size = 0.3,
      linetype = "solid",
      colour = "lightblue"
    ),
    axis.text.x = element_text(
      size = 10,
      angle = 0,
      hjust = 0.5
    ),
    axis.text.y = element_text(
      size = 10,
      angle = 60,
      hjust = 0.5
    ),
    axis.title.x = element_text(size = 14),
    axis.title.y = element_text(size = 14),
    plot.title = element_text(size = 18),
    plot.subtitle = element_text(size = 16),
    plot.margin = unit(c(6, 12, 6, 6), "pt") # top, right, bottom, left
  )

# Gravar o gráfico de volume no disco
ggsave(
  "~/doctec/static/img/b3/b3bbas3volume.png",
  plot_vol,
  device = png(),
  width = 11,
  height = 3,
  dpi = 72
)

dev.off()
Referências
Termos de Uso

O autor deste site não se responsabiliza, direta ou indiretamente, pela utilização de qualquer material apresentado. Este material é baseado na experiência pessoal do autor, obtida a partir de sites na Internet, pessoas, livros e outros materiais sobre este assunto, e deve ser visto apenas como uma base a partir da qual o leitor deve se aprofundar para desenvolver o seu próprio material. É recomendado a todos os leitores deste site estudarem bem este assunto antes de tomarem qualquer decisão porque, como se sabe, os riscos financeiros envolvidos no mercado acionário podem ser bastante elevados.