Nº de pregões entre a compra pela abertura e a venda pelo fechamento ( day trade tem lag igual a 1): 1, 5, 10, 20, 40, 80 e 160.
lags = c(1,5,10,seq(20,160,by=20))
precos = read.csv("BOVA11.SA",row.names = 1)
cat("Primeiro pregão: ");cat(rownames(precos)[1]);cat("\n")
Primeiro pregão: 2015-08-25
cat("Último pregão: ");cat(rownames(precos)[nrow(precos)]);cat("\n")
Último pregão: 2020-08-20
Compra pela abertura em D+0 e venda pelo fechamento em D + lag - 1.
price_sell = precos$price.close
price_buy = precos$price.open
N = length(price_sell)
Avaliação dos rendimentos para cada lag. A rentabilidade total é a média geométrica das rentabilidades de cada operação, já que ocorrem consecutivamente. A anualização foi feita considerando 250 pregões em 1 ano. O risco foi mensurado pelo desvio-padrão dos retornos diários, usando a média aritmética do retorno no período. P. ex., se no lag de 40 pregões, a rentabilidade de uma operação foi 4%, seu rendimento diário foi de 0.1%, e esse valor será usado para estimar o risco.
# variáveis para armazenamento dos retornos e dos riscos
mi <- sig <- SR <- retornos <- NULL
for (i in lags) {
# Valor de 1 + rentabilidade
rend = price_sell[i:N]/price_buy[1:(N-i+1)]
hist((rend-1)/i*100,
main = paste0("lag = ",i),
xlab = "rendimentos diários (%)")
# Composição e anualização dos retornos
EAR = (pracma::geomean(rend))^(250/i) - 1
# média dos retornos
mi = c(mi,
EAR)
# desvpad dos retornos diários - risco
sig = c(sig,
(rend/i) %>% sd)
}
# Sharp Ratio: medida de risco-retorno
SR = rbind(SR,
mi/sig)
retornos = rbind(retornos,
mi)
plot(lags,retornos,type = "l",
xlab = "lags",ylab = "retorno médio anualizado (EAR)")
plot(lags,SR,type = "l",
xlab = "lags",ylab = "sharp ratio")
# papéis analisados
acoes = c("abev3","b3sa3","bbas3","bbdc4","bbse3","bova11","brfs3","brkm5",
"brml3","ccro3","ciel3","cmig4","cogn3","csan3","csna3","cyre3",
"ecor3","egie3","elet3","embr3","eqtl3","ggbr4","goau4","hype3",
"itsa4","itub4","jbss3","lame4","lren3","mglu3","mrfg3","petr4",
"qual3","radl3","rail3","rent3","sbsp3","suzb3","taee11","usim5",
"vale3","vivt4","vvar3","wege3","yduq3",
"bbdc3","brap4","enbr3","flry3","klbn4","mult3","leve3","sanb11",
"timp3","ugpa3")
acoes = paste0(acoes,".SA") %>% casefold(upper = T)
# lags
lags = c(1,5,10,20,40,80,160)
SR <- retornos <- NULL
for (papel in acoes) {
precos = read.csv(paste0(papel),row.names = 1)
price_sell = precos$price.close
price_buy = precos$price.open
N = length(price_sell)
mi <- sig <- NULL
for (i in lags) {
# rendimentos anualizados - 250 pregões/ano
rend = price_sell[i:N]/price_buy[1:(N-i+1)]
EAR = (pracma::geomean(rend))^(250/i) - 1
# retornos
mi = c(mi,
EAR)
# riscos
sig = c(sig,
(rend/i) %>% sd)
}
# sharp ratio
SR = rbind(SR,
mi/sig)
retornos = rbind(retornos,
mi)
}
colnames(SR) <- colnames(retornos) <- paste0("lag_",lags)
rownames(SR) <- rownames(retornos) <- acoes
cat("Sharp Ratio (risco-retorno): \n");print((SR %>% colMeans) %>% round(2));cat("\n")
Sharp Ratio (risco-retorno):
lag_1 lag_5 lag_10 lag_20 lag_40 lag_80 lag_160
-3.52 10.11 18.65 28.32 40.06 55.16 89.81
cat("EAR (%): \n");print(((retornos %>% colMeans)*100) %>% round(2))
EAR (%):
lag_1 lag_5 lag_10 lag_20 lag_40 lag_80 lag_160
-9.30 12.36 16.23 18.28 19.41 19.30 21.74
Retornos para cada papel, por lag e em %:
print((retornos*100) %>% round(2))
lag_1 lag_5 lag_10 lag_20 lag_40 lag_80 lag_160
ABEV3.SA -9.56 -7.78 -7.48 -6.73 -6.50 -7.44 -6.30
B3SA3.SA 40.06 41.62 42.88 43.63 43.22 39.06 37.91
BBAS3.SA -25.62 3.38 8.82 12.14 14.63 14.33 19.27
BBDC4.SA -12.82 4.38 7.79 9.80 11.11 11.25 15.97
BBSE3.SA -14.14 -4.55 -2.16 -0.61 0.14 -0.73 1.44
BOVA11.SA -13.39 10.33 13.95 15.84 16.69 15.85 18.51
BRFS3.SA -35.64 -24.53 -22.88 -22.55 -22.52 -21.27 -19.52
BRKM5.SA -14.49 6.72 8.92 9.04 7.73 4.30 2.13
BRML3.SA -4.65 2.86 5.07 5.07 6.90 5.42 8.59
CCRO3.SA -4.35 -2.61 -1.45 0.62 2.48 1.61 2.71
CIEL3.SA -41.27 -32.13 -30.35 -29.46 -29.61 -31.47 -30.38
CMIG4.SA -35.10 -3.73 2.32 6.45 8.87 9.20 13.77
COGN3.SA -30.08 -10.66 -7.08 -4.06 -2.79 -7.82 -6.77
CSAN3.SA 36.80 35.59 36.27 36.32 33.99 29.09 27.62
CSNA3.SA -46.31 13.04 21.55 21.45 21.89 18.99 18.34
CYRE3.SA 1.49 19.25 22.71 25.26 25.87 21.81 24.95
ECOR3.SA -6.83 9.89 13.21 15.93 17.03 17.34 22.91
EGIE3.SA -13.49 4.95 8.25 9.85 10.55 9.91 11.76
ELET3.SA -24.17 28.96 39.33 45.16 47.27 44.41 47.19
EMBR3.SA -41.72 -25.26 -22.77 -22.05 -21.81 -23.58 -19.54
EQTL3.SA 35.08 29.36 29.68 30.47 30.61 28.14 29.36
GGBR4.SA -33.45 14.37 20.30 21.94 22.56 22.29 28.02
GOAU4.SA -38.27 9.06 14.73 16.27 18.14 22.33 32.76
HYPE3.SA 18.16 15.00 15.80 17.94 17.40 13.36 11.12
ITSA4.SA -14.35 4.59 7.99 9.91 10.67 10.18 13.22
ITUB4.SA -10.72 4.14 6.96 8.68 9.70 9.11 11.72
JBSS3.SA -17.83 4.87 6.70 6.47 6.81 9.18 14.76
LAME4.SA -3.46 15.16 18.64 20.22 20.35 18.11 14.61
LREN3.SA 22.65 20.81 21.70 21.64 22.40 23.02 27.31
MGLU3.SA 31.47 161.41 186.54 205.69 226.34 252.03 254.10
MRFG3.SA -20.57 11.25 14.55 15.97 16.05 16.83 15.33
PETR4.SA -33.37 8.32 15.01 19.69 22.75 23.22 29.33
QUAL3.SA 3.44 8.16 9.80 10.47 12.21 11.42 17.10
RADL3.SA 1.99 19.09 21.92 23.57 24.16 24.29 25.34
RAIL3.SA 5.38 26.33 29.88 31.74 34.99 37.36 49.17
RENT3.SA 39.03 46.19 49.20 50.04 47.80 44.45 48.09
SBSP3.SA 30.27 29.70 30.44 30.99 31.13 28.00 26.33
SUZB3.SA -7.25 29.77 33.88 36.22 34.58 33.97 16.66
TAEE11.SA -22.73 2.12 6.13 7.95 8.09 8.83 10.76
USIM5.SA -56.52 2.12 11.81 13.24 15.74 18.56 33.38
VALE3.SA -19.34 19.00 23.69 25.37 26.61 29.56 34.01
VIVT4.SA -1.33 3.25 4.01 4.42 5.10 5.17 7.14
VVAR3.SA -44.46 5.71 22.66 37.22 43.83 53.08 47.74
WEGE3.SA -7.78 29.41 35.18 38.54 38.18 35.65 36.44
YDUQ3.SA 8.16 17.76 19.63 20.66 20.31 18.35 24.99
BBDC3.SA -2.81 3.97 5.84 6.89 7.48 7.09 11.43
BRAP4.SA 4.00 32.33 34.58 35.23 36.11 40.65 51.12
ENBR3.SA -12.32 4.40 7.25 8.42 9.15 8.78 10.47
FLRY3.SA -13.19 15.67 20.95 23.41 25.42 26.19 29.41
KLBN4.SA -35.20 4.76 11.17 13.85 13.83 13.02 11.28
MULT3.SA 16.24 10.36 10.73 10.13 9.94 9.29 12.18
LEVE3.SA -38.72 -11.97 -7.69 -6.00 -5.17 -6.13 -3.17
SANB11.SA 13.46 14.68 15.05 15.95 16.66 15.46 19.12
TIMP3.SA 8.16 11.00 12.01 12.14 13.58 13.47 17.22
UGPA3.SA -20.07 -11.94 -11.15 -10.89 -11.23 -12.82 -12.62
EAR buy & hold para cada papel, em %:
retornos_bh = NULL
for (papel in acoes) {
precos = read.csv(paste0(papel),row.names = 1)
N = nrow(precos)
price_sell = precos$price.close[N]
price_buy = precos$price.open[i]
rend = price_sell/price_buy
EAR = (rend)^(250/N) - 1
retornos_bh = rbind(retornos_bh,EAR)
}
rownames(retornos_bh) <- acoes
colnames(retornos_bh) <- "EAR"
print((retornos_bh*100) %>% round(2))
EAR
ABEV3.SA -7.61
B3SA3.SA 31.02
BBAS3.SA 8.48
BBDC4.SA 5.03
BBSE3.SA -4.57
BOVA11.SA 14.17
BRFS3.SA -16.03
BRKM5.SA -0.81
BRML3.SA -2.37
CCRO3.SA -1.72
CIEL3.SA -29.61
CMIG4.SA 7.69
COGN3.SA -12.13
CSAN3.SA 21.27
CSNA3.SA 2.05
CYRE3.SA 17.80
ECOR3.SA 14.39
EGIE3.SA 6.90
ELET3.SA 36.05
EMBR3.SA -20.16
EQTL3.SA 23.59
GGBR4.SA 20.80
GOAU4.SA 26.67
HYPE3.SA 2.27
ITSA4.SA 6.88
ITUB4.SA 4.11
JBSS3.SA 21.01
LAME4.SA 17.45
LREN3.SA 19.04
MGLU3.SA 191.41
MRFG3.SA 22.43
PETR4.SA 19.66
QUAL3.SA 12.73
RADL3.SA 14.73
RAIL3.SA 43.93
RENT3.SA 38.74
SBSP3.SA 15.24
SUZB3.SA 5.12
TAEE11.SA 7.37
USIM5.SA 34.48
VALE3.SA 25.53
VIVT4.SA 2.72
VVAR3.SA 50.63
WEGE3.SA 44.97
YDUQ3.SA 21.53
BBDC3.SA 1.60
BRAP4.SA 42.12
ENBR3.SA 8.02
FLRY3.SA 16.62
KLBN4.SA 15.48
MULT3.SA 3.30
LEVE3.SA -6.01
SANB11.SA 11.06
TIMP3.SA 15.11
UGPA3.SA -11.69
1 - Há uma relação diretamente proporcional entre rentabilidade e tempo posicionado até fechar a operação (lag), bem como entre risco-retorno e lag.
2 - Embora a estratégia seja a mais naïve possível, é ilustrativa sobre como o mercado, no curto prazo, assume um caráter mais aleatório que determinístico, com flutuações pontuais sendo tanto mais relevantes quanto menor for o período posicionado. No longo prazo, as distorções de mercado tendem a se cancelar.
3 - Comprar e esquecer a ação, sem considerar mudanças nos fundamentos, pode levar a resultados piores que a estratégia usada.