A análise de ações e investimentos é um tema que pode ser muito bem explorado com técnicas de análise e tendência, além de avaliar o quanto ganhou ou perdeu ao investir em ações é preciso aprender a tomar decisões de compra e venda usando alguma técnica.
A ação aqui analisada é da Johson e Johnson (JNJ) com dados extraídos do site Yahoo Finance por meio do pacote quantmod que é bastante utilizado para a modelagem quantitativa de dados financeiros. Além disso, o pacote ggplot2 será utilizado para a visualização dos dados.
rm(list=ls())
#install.packages("quantmod") pacote quantmod
#install.packages("ggplot2") pacote ggplot2
library(quantmod)
library(ggplot2)
O código abaixo nomeia as ações de Johnson & Johnson de jnj e puxa automaticamente e em tempo real todos os dados de 01-01-2021 ao dia atual, no caso 24-01-2025
Vamos agora plotar os preços diários, utilizando a coluna de Preço Ajustado, visto que ela incorpora eventos como splits e distribuição de dividendos, que podem afetar a série.
ggplot(jnj, aes(x = index(jnj), y = jnj[,6])) + geom_line(color = "darkblue") +
ggtitle("Série de preços da JNJ") +
xlab("Data") + ylab("Preço ($)") + theme(plot.title = element_text(hjust = 0.5)) +
scale_x_date(date_labels = "%b %y", date_breaks = "3 months")
Em Análise Técnica de ações, uma técnica muito utilizada é a plotagem de médias móveis nos gráficos de preços. Uma média móvel simples é a média aritmética dos últimos \(q\) dias de uma série \(x_t\) no período de tempo \(t\). Assim, a média móvel é dada por:
\[MM_t^t = \frac{1}{q} \sum_{i=0}^{q-1} x_{t-1} \] Esse indicador é interessante pois ajuda a identificar tendências e suaviza ruídos dos preços. Isto é, quanto maior a janela de dias para o cálculo da média, menor é a responsividade da MM à variação no preço. Quanto menor a janela, mais rápido à média móvel se ajusta às mudanças. Vamos então calcular agora duas médias móveis para a série de preços da Johnson & Johnson, uma com janela de 10 dias e outra com janela de 30 dias:
jnj_mm <- subset(jnj, index(jnj) >= "2024-01-01")
jnj_mm10 <- rollmean(jnj_mm[,6], 10, fill = list(NA, NULL, NA), align = "right")
jnj_mm30 <- rollmean(jnj_mm[,6], 30, fill = list(NA, NULL, NA), align = "right")
jnj_mm$mm10 <- coredata(jnj_mm10)
jnj_mm$mm30 <- coredata(jnj_mm30)
Primeiro dividimos a base para dados a partir de 2024 utilizando a função subset(). Em seguida, usamos a função rollmean(), que toma como argumento a série (\(x_t\)), no caso o preço ajustado; a janela de períodos (\(q\)); um argumento opcional de preenchimento, que é utilizado para completar os dias em que ainda não é possível calcular a média móvel, ou seja, quando não se passaram dias suficiente para completar a janela desejada; e, por último, o argumento align, que indica se a média móvel deve ser calculada usando os períodos à esquerda, ao centro ou à direita do dia \(t\) da série. Por último, acrescentamos as médias móveis a duas novas colunas na base inicial.
Para a análise, calculamos utilizando 10 e 30 dias de janela, preenchendo os valores com NA e utilizando os períodos à esquerda do dia em questão. Em seguida, podemos plotar ambas as séries no mesmo gráfico de preços para identificar tendências.
Uma teoria existente na Análise Técnica é a de que quando duas médias móveis de janelas de curto e longo prazo se cruzam, há uma indicação de compra ou de venda.
Caso a MM de menor período cruze de baixo para cima a MM de maior período, há uma indicação de compra.
Se o cruzamento for o contrário, é um sinal de venda.
Plotando a série de preços e as médias móveis para todos os dias a partir de 2023, temos:
ggplot(jnj_mm, aes(x = index(jnj_mm))) + geom_line(aes(y = jnj_mm[,6], color = "JNJ")) +
ggtitle("Série de preços da JNJ") +
geom_line(aes(y = jnj_mm$mm10, color = "MM10")) +
geom_line(aes(y = jnj_mm$mm30, color = "MM30")) +
xlab("Data") + ylab("Preço ($)") +
theme(plot.title = element_text(hjust = 0.5), panel.border = element_blank()) +
scale_x_date(date_labels = "%b %y", date_breaks = "3 months") +
scale_colour_manual("Séries", values=c("JNJ"="gray40", "MM10"="firebrick4", "MM30"="darkcyan"))
#
Há 8 pontos que as médias se cruzam.
Em 80% dos casos a tendência é de acerto, ou seja, nos pontos que a curva vermelha cruza com a verde de baixo para cima = compra as ações subiram depois, e quando a curva vermelha cruzou com a verde de cima para baixo, as ações na maioria das vezes cairam.