logo
# Pacotes

library(BatchGetSymbols)
library(tidyquant)

## Pegando ações do índice bovespa

ibov <- GetIbovStocks()
tickets <- paste(ibov$tickers,".SA",sep = "")

## Baixando cotações

dados <- tq_get(tickets,from = Sys.Date() - 252)

Comprar ou vender, eis a questão

Essa simples pergunta faz as pessoas perderem ou ganharem muito dinheiro. E para se dar bem, é preciso não perder o seu timing.

No mercado financeiro, existem dois tipos de análise, a Fundamentalista, na qual leva em consideração os fundamentos economicos e financeiros das empresas, como DRE,BP, gestão e etc. A outra forma, a análise Técnica, leva em consideração graficos e indicadores das proprias ações, em geral, seu movimento de curto prazo.

Um dos indicadores dessa análise é a famosa média móvel, que pode ser calculada de acordo com a média dos últimos n dias de cotações. Geralmente os analistas calculam duas médias, uma que chamamos de curto prazo com normalmente 10 dias, e a que chamamos de longo prazo, com duração de 50 dias.

A posição dessas médias pode ser entendido como uma ordem de trade. Por exemplo: Se a média de longo prazo estiver acima da de curto prazo, podemos entender como a hora de vender o ativo. Já se o contrario ocorrer, podemos entender que pode ser a hora de comprar o ativo.

Vejamos uma aplicação real.

Itaú

## Media Movel

dados %>% filter(symbol == "ITUB4.SA") %>%
  ggplot(aes(x = date, y = close)) +
  geom_barchart(aes(open = open, high = high, low = low, close = close)) +
  geom_ma(ma_fun = SMA, n = 10, linetype = 5, size = 1.25) +
  geom_ma(ma_fun = SMA, n = 50, color = "red", size = 1.25) + 
  labs(title = "ITUB4 (Itaú)", 
       subtitle = "10 e 50 - dias Média Movel Simples", 
       y = "Preço de Fechamento", x = "")  + 
  theme_tq()

A média de longo prazo é representado pela linha vermelha, enquanto que a de curto prazo é representado pela linha azul. O que podemos verificar é que até meados de março, ainda tinhamos o sinal de compra ligado, porém, houve uma inversão das médias e portanto hoje estamos com uma tendencia de baixa e podemos interpretar que essa é a hora da venda.

Tabela com índice bovespa

O Índice bovespa contém os 66 ativos mais liquidos do mercado. Podemos então produzir uma tabela diariamente para nos manter informados sobre a estrategia de media movel, se é a hora de comprar ou vender cada um dos ativos.

## Construindo series de medias moveis


dados <- dados %>%
  group_by(symbol) %>% 
  tq_mutate(
    select = close, # Coluna de preçoes
    mutate_fun = rollapply, # Função de janela
    width = 7, # Tamanho da média
    align      = "right", # Alinhamento a direita na base de dados
    FUN        = mean, # Função média
    col_rename = "Media_Movel_7_dias") %>% 
  tq_mutate(
    select = close,
    mutate_fun = rollapply,
    width = 21,
    align      = "right",
    FUN        = mean,
    col_rename = "Media_Movel_21_dias")

## Criando Coluna de decisão de compra ou venda

dados <- dados %>% mutate(ordem = ifelse(Media_Movel_7_dias > Media_Movel_21_dias,"Compra","Venda"))

## Montando tabela


library(DT) 

dados %>% filter(date == max(date)) %>% # Filtrando ultimo dia de cotação
  select(date,symbol,close,ordem) %>% # Selecionando colunas da tabela
  mutate(close = round(close,1)) %>% # Arredondando os preços de fechamento
 datatable(extensions = 'Buttons', options = list( # Função geradora da tabela
   dom = 'Bfrtip',
   buttons = c('excel', 'pdf')
 )) %>% 
  formatStyle('ordem',
              color = styleEqual(c("Compra","Venda"), c('green', 'red'))
  )

Lembrando que nenhuma dessas análises estão valendo como recomendação de investimento :)