In [1]:
options(OutDec = ",") 
#==============================================================================
# Descricao
#==============================================================================
# Os dados a seguir correspondem aos indices diarios da BOVESPA de 3 de
# janeiro de 2011 a 10 de setembro de 2021.
#
# Os dados foram obtidos do sitio http://br.financas.yahoo.com/ 
# 
# Concentraremos nos indices (precos) de fechamento ("Close")
#
#==============================================================================
# Lendo os dados do arquivo BVSP.csv
#==============================================================================
BVSP  <- read.csv("../dados/BVSP.csv",header=TRUE,sep=",")
print(head(BVSP))
print(tail(BVSP))
        Date  Open  High   Low Close Adj.Close  Volume
1 2011-01-03 69310 70471 69305 69962     69962 1862400
2 2011-01-04 69962 70318 69560 70318     70318 2427200
3 2011-01-05 70311 71173 69802 71091     71091 2309200
4 2011-01-06 71093 71167 70469 70579     70579 2546000
5 2011-01-07 70580 70783 69718 70057     70057 1761000
6 2011-01-10 70056 70133 69666 70127     70127 1610800
           Date   Open   High    Low  Close Adj.Close   Volume
2609 2021-09-02 119394 119397 116534 116677    116677  9862800
2610 2021-09-03 116679 117396 115583 116933    116933 12517500
2611 2021-09-06 116926 117981 116156 117869    117869  5111300
2612 2021-09-08 117866 117866 113172 113413    113413 12254400
2613 2021-09-09 113413 116354 112435 115361    115361 13890600
2614 2021-09-10 115370 116896 114286 114286    114286 11155700
In [2]:
#==============================================================================
# Copiando os indices de fechamento como a serie de precos
#==============================================================================
preco <- BVSP$Close 
dias  <- as.Date(BVSP$Date) # Dias
n     <- length(preco)      # Numero de observacoes
In [3]:
#==============================================================================
# Grafico da serie de precos
#==============================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(15,5,5),
    mar=c(5,5,2,2.5),xpd=T,cex.main=2.0,bty="n")
plot(dias,preco/1000,lwd=2,col=1,main="",xlab="Dias",ylab="Preço (milhares)",
    type="l",xlim=c(as.Date("2011-01-01"),as.Date("2021-12-31")),
    ylim=c(20,140))
No description has been provided for this image
In [4]:
#==============================================================================
# Calculando o retorno de capitalizacao continua, ou simplesmente log-retorno
#==============================================================================
rt <- diff(log(preco))  # Calcula a primeira diferenca

# Grafico da serie de retornos brutos: r_t = log(1+R_t) = log(P_t)-log(P_{t-1})
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.4,lab=c(15,5,5),
    mar=c(5,5,2,2.5),xpd=T,cex.main=2.0,bty="n")
plot(dias[2:n],rt,lwd=2,col=1,main="",xlab="Dias",ylab="Log Retorno",
    type="l",xlim=c(as.Date("2011-01-01"),as.Date("2021-12-31")),
    ylim=c(-0.16,0.16))
No description has been provided for this image
In [5]:
#=========================================================================
# Grafico de dispersao entre r_t e r_{t-1}
#=========================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(9,9,9),
    mar=c(5,5,2,2.5),xpd=T,cex.main=2.0,bty="n")
plot(rt[1:(n-1)],rt[2:n],xlab=expression(r[t-1]),xlim=c(-0.16,0.16),
    ylim=c(-0.16,0.16),ylab=expression(r[t]),main="",pch=15)
No description has been provided for this image
In [6]:
#=========================================================================
# Grafico de ACF dos retornos r_t do IBOVESPA
#=========================================================================
par(mfrow=c(1,1),lwd=2.0,cex.lab=1.5,cex.axis=1.5,lab=c(10,5,5),
     mar=c(5,5,2,2.5),cex.main=2.0,bty="n")
acf(rt,lwd=2,col=1,lag.max=100,xlab="Defasagem",main="")
No description has been provided for this image
In [7]:
print(acf(rt,plot=F,lag.max=8))
Autocorrelations of series ‘rt’, by lag

     0      1      2      3      4      5      6      7      8 
 1,000 -0,099  0,046  0,001 -0,020  0,058 -0,073  0,087 -0,045 
In [8]:
#=========================================================================
# Teste de Ljung-Box
#=========================================================================
for(i in 1:floor(log(n))) # m =~ log(n) como valor mais pratico
    print(Box.test(rt, lag = i, type = "Ljung-Box"))
	Box-Ljung test

data:  rt
X-squared = 25,689, df = 1, p-value = 4,01e-07


	Box-Ljung test

data:  rt
X-squared = 31,331, df = 2, p-value = 1,572e-07


	Box-Ljung test

data:  rt
X-squared = 31,334, df = 3, p-value = 7,228e-07


	Box-Ljung test

data:  rt
X-squared = 32,406, df = 4, p-value = 1,581e-06


	Box-Ljung test

data:  rt
X-squared = 41,275, df = 5, p-value = 8,255e-08


	Box-Ljung test

data:  rt
X-squared = 55,246, df = 6, p-value = 4,135e-10


	Box-Ljung test

data:  rt
X-squared = 75,281, df = 7, p-value = 1,258e-13

In [9]:
# Conclusao: rejeitamos a hipotese nula de correlacao serial nula 
# dos log retornos. Assim, os log retornos da BOVESPA parecem ter 
# dependencia serial.