Chapter 6 Trabalho

ROTEIRO DO PROJETO

Contexto: O preço de fechamento de uma ação, indicado o valor de uma ação após todo processo de fechamento da contabilização de uma empresa. Este dado é frequentemente usado para examinar retornos históricos ou fazer uma análise detalhada do desempenho de uma empresa.

Problema: Auxiliar investidores na tomada de decisão entre comprar ou vender uma ação com base em um modelo de predição do valor futuro da ação.

Descrição dos Dados: Será feito um estudo do valor médio do valor das ações de uma empresa Brasileira (Nunbank), utilizando uma fonte de dados histórica do último ano.

FONTES DOS DADOS Database do Yahoo Finança ( https://finance.yahoo.com/ )

TIPOS DE DADOS Base temporal diaria. (Date, Open, High, Low, Close, Adj Close, Volume)

6.1 Coletando dados

Coletando os dados das movimentação das ações de uma empresa

dfAcoes = read_excel("dados/NUBR33.SA.xlsx")

6.1.1 Inspecionando a Estrutura de Dados

‘data.frame’: 86 observações. 7 variaves:

#Nome das Colunas
ls(dfAcoes)
## [1] "Adj Close" "Close"     "Date"      "High"      "Low"       "Open"      "Volume"

Nome das Colunas do dataFrame

str(dfAcoes)
## tibble [86 × 7] (S3: tbl_df/tbl/data.frame)
##  $ Date     : POSIXct[1:86], format: "2022-08-08" "2022-08-09" "2022-08-10" "2022-08-11" ...
##  $ Open     : num [1:86] 3890000 3940000 3790000 3790000 3580000 3590000 4360000 4650000 4340000 4180000 ...
##  $ High     : num [1:86] 4200000 3940000 3800000 3850000 3600000 4050000 4990000 4680000 4350000 4330000 ...
##  $ Low      : num [1:86] 3830000 3550000 3650000 3520000 3430000 3510000 4290000 4290000 4040000 3980000 ...
##  $ Close    : num [1:86] 3980000 3600000 3730000 3530000 3590000 3940000 4710000 4380000 4300000 3990000 ...
##  $ Adj Close: num [1:86] 3980000 3600000 3730000 3530000 3590000 3940000 4710000 4380000 4300000 3990000 ...
##  $ Volume   : num [1:86] 6966425 12514782 8607541 11156578 10633095 ...

Tipo de dados do dataFrame

sapply(dfAcoes,typeof)
##      Date      Open      High       Low     Close Adj Close    Volume 
##  "double"  "double"  "double"  "double"  "double"  "double"  "double"

Dimensões do dataframe

dim(dfAcoes)
## [1] 86  7

Verifica se tem valores faltantes

#Verifica se valores faltantes
any(is.na(dfAcoes))
## [1] FALSE
install.packages("ggplot2")
## Error in install.packages : Updating loaded packages
library(ggplot2)
library(tidyverse)
library(dplyr)

6.2 Analise Descritiva

Analisando a performance das ações durante o Mês

plot(x=dfAcoes$Date,  y= dfAcoes$Open, type = "l", xlab = "Tempo (Meses)", ylab = "Valor da Ação",  main = "Performance Ações ao longo do tempo")
lines(x=dfAcoes$Date, y= dfAcoes$High, col = 2)
lines(x=dfAcoes$Date, y= dfAcoes$Low, col = 3)
lines(x=dfAcoes$Date, y= dfAcoes$Close, col = 4)
legend("topleft", legend = c("Open", "HIgh", "Low", "Close"), fill = c(1,2,3,4))

Selecionando um período de tempo e criando um subconjunto de dados

dataInicial = as.Date("2022-10-01")
dataFinal  = as.Date("2022-12-08")
subConjunto = filter(dfAcoes, dfAcoes$Date >= dataInicial & dfAcoes$Date <= dataFinal)
dt <- difftime(dataFinal,dataInicial, units = "days")
print( paste("Tamanho da amostra: ", dt, " dias de obervações"))
## [1] "Tamanho da amostra:  68  dias de obervações"

Modelando os dados para montar gráfico

mediaO = mean(subConjunto$Open, na.rm = T)
mediaO
## [1] 3909348
mediaH = mean(subConjunto$High, na.rm = T)
mediaH
## [1] 4019783
mediaL = mean(subConjunto$Low, na.rm = T)
mediaL
## [1] 3777826
mediaC = mean(subConjunto$Close, na.rm = T)
mediaC
## [1] 3883478
mediaA = mean(subConjunto$`Adj Close`, na.rm = T)
mediaA
## [1] 3883478
Data = subConjunto$Date
Ser = as.numeric(subConjunto$Close)

Apresentando os dados do Valor de Fechamento das Ações do NunBank para um determinado período

print( paste( "Data Inicial: ", dataInicial ))
## [1] "Data Inicial:  2022-10-01"
print( paste( "Data Final: ", dataFinal ))
## [1] "Data Final:  2022-12-08"
plot(Ser ~ Data, type = "l", xlab = "Tempo (Meses)", ylab = "Preço de Fechamento")

Apresentando as Médias dos Valores(Abertura, Maior Valor, Menor Valor e Close) em um Gráfico

plot(Ser ~ Data, type = "l", xlab = "Tempo (Meses)", ylab = "Preço de Fechamento", main= "Cenario 1 - Movimento das Ações e Média dos Valores")
abline(h = mediaA)
abline(h = mediaO, col = 2, lwd = 2)
abline(h = mediaH, col = 3, lwd = 2)
abline(h = mediaL, col = 4, lwd = 2)
abline(h = mediaC, col = 5, lwd = 2)
legend("topleft", legend = c("Adj Close", "Open", "High", "Low", "Close"), fill = c(1,2,3,4,5))

Apresentando a Média dos Valores de Fechamento e aplicando 2 (dois) Desvios Padrão

par(mfrow = c(1,2))

desvio = sd(Ser, na.rm = T)

plot(Ser ~ Data, type = "l", xlab = "Tempo (Meses)", ylab = "Preço de Fechamento Ajustado", main= "Cenario 1 - Valor de Fechamento Ajustado")
abline(h = mediaA)
abline(h = mediaA + 1*desvio, col = 2, lwd = 2)
abline(h = mediaA - 1*desvio, col = 3, lwd = 2)
abline(h = mediaA + 2*desvio, col = 4, lwd = 2)
abline(h = mediaA - 2*desvio, col = 5, lwd = 2)
legend("topleft", legend = c("Média","+1 Desvio", "-1 Desvio", "+2 Desvios", "-2 Desvios"), fill = c(1,2,3,4,5))

desvio = sd(Ser, na.rm = T)

plot(Ser ~ Data, type = "l", xlab = "Tempo (Meses)", ylab = "Preço de Fechamento", main= "Cenario 2 - Valor de Fechamento")
abline(h = mediaC)
abline(h = mediaC + 1*desvio, col = 2, lwd = 2)
abline(h = mediaC - 1*desvio, col = 3, lwd = 2)
abline(h = mediaC + 2*desvio, col = 4, lwd = 2)
abline(h = mediaC + 2*desvio, col = 5, lwd = 2)
legend("topleft", legend = c("Média","+1 Desvio", "-1 Desvio", "+2 Desvios", "-2 Desvios"), fill = c(1,2,3,4,5))

Analisando a Dispersão do Valor de Fechando versus o Valor de Fechando Ajustado

plot(subConjunto$Close, subConjunto$subConjunto$Volume, col = 2, pch = 16, xlab = "Valor de Fechamento - MIlhões", ylab = "Volume de Ações - MIlhões", main="Dispersão do Valor de Fechamento por Volume")
## Warning: Unknown or uninitialised column: `subConjunto`.

Avaliando a Correção entre os Valores (Abertura, Maior Valor, Menor Valor, Fechando e Fechando Ajustado)

dataTemp <- subConjunto
corrplot(cor(dataTemp %>% select(2:7)),method = "circle", type="upper", diag=FALSE,addCoef.col="black",tl.col="black")

Podemos observar uma correlação entre o Maior Valor e o Valor Ajustado de Fechamento.

Não identifiquei nenhum correlação entre os valores com o volume de ações transacionadas.

6.3 Modelo de Regresão Linear

md_Cen1 = lm(High ~ `Adj Close` , data = dataTemp)
summary(md_Cen1)
## 
## Call:
## lm(formula = High ~ `Adj Close`, data = dataTemp)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -136693  -63489  -21000   50393  216620 
## 
## Coefficients:
##              Estimate Std. Error t value Pr(>|t|)    
## (Intercept) 2.006e+05  2.091e+05    0.96    0.343    
## `Adj Close` 9.834e-01  5.374e-02   18.30   <2e-16 ***
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 84050 on 44 degrees of freedom
## Multiple R-squared:  0.8839, Adjusted R-squared:  0.8812 
## F-statistic: 334.8 on 1 and 44 DF,  p-value: < 2.2e-16

Aplicando a reta de regresão no Gráfico

plot(dataTemp$High ~ dataTemp$`Adj Close`, col = 2, pch = 16, xlab = "Maior Valor - MIlhões", ylab = "Valor Ajustado - MIlhões", main = "Cenário - Maior Valor vs Valor Ajustado")
abline(md_Cen1, col = 1, lwd = 2)

Se o valor médio do preço Ajustado de Fechamento da ação for X, o valor esperado de fechando da ação para o próximo dia será Y?

print( paste("X = Valor Médio de Fechamento das Ações é de ", format(round(mediaH/1e6,1), trim = TRUE) , "M") )
## [1] "X = Valor Médio de Fechamento das Ações é de  4 M"
resCen1 = round(md_Cen1$coefficients[1] + mediaH * md_Cen1$coefficients[2])
print( paste("Y = Valor Médio de Fechamento das Ações será de ~ ", format(round(resCen1/1e6,1), trim = TRUE) , "M") )
## [1] "Y = Valor Médio de Fechamento das Ações será de ~  4.2 M"

6.4 Conclusão

Vamos acompanhar o valor de fechamento das ações nos dia 12 e 13 de Dezembro de 2022, para confirmar o modelo, se em havendo necessidade fazer os ajustes.

Modelo, deve ser observador por outra variável para a tomada de decisão entre vender ou comprar ações.

Outros fatores do mercado financeiro deve ser observado.