# Intervalo de Tempo dos dadosdataini <-"2024-04-24"datafim <-"2024-07-22"
Criação dos Indicadores
Retorno, média dos Retornos, Desvio Padrão, Coeficiente de Variação e Beta Mercado.
Código
# Lista de Empresas que serão Requeridasempresas <-list(ibov ="^BVSP",vivo ="vivt3.sa", totvs ="tots3.sa", weg ="wege3.sa", tim ="tims3.sa", localiza ="rent3.sa", transmissao_paulista ="trpl3.sa", cemig ="cmig3.sa",engie ="egie3.sa", taesa ="taee3.sa", cpfl ="cpfe3.sa", cyrela ="cyre3.sa", aliansce ="alos3.sa", ccr ="ccro3.sa", multiplan ="mult3.sa", eztc ="eztc3.sa", suzano ="suzb3.sa", vibra ="vbbr3.sa", klabin ="klbn3.sa", csn_mineracao ="cmin3.sa", gerdau ="ggbr3.sa",slc ="slce3.sa",fleury ="flry3.sa",hypera ="hype3.sa",minerva ="beef3.sa",arezo ="arzz3.sa")# Loop de busca para obter os dados e calcular os retornosretornos <-lapply(empresas, function(ticker) { data <-na.omit(get.hist.quote(instrument = ticker, quote ="Close", start = dataini, end = datafim))diff(log(data))})
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
Código
# Checar o tamanho da amostra para 'vivo'length(retornos$vivo)
[1] 60
Código
# Calcular indicadores de desempenhocalcular_indicadores <-function(retorno) { risco <-sd(retorno) /mean(retorno) retorno_medio <-mean(retorno) *100 volatilidade <- (sd(retorno) *100) *sqrt(252)list(risco = risco, retorno_medio = retorno_medio, volatilidade = volatilidade)}# Calcular indicadores para todas as empresasindicadores <-lapply(retornos, calcular_indicadores)# Criar data frame final com os resultadosdf2 <-data.frame(Empresas =c("Ibov", "Vivo", "Totvs", "Weg", "Tim", "Localiza", "Transmissão Paulista", "Cemig", "Engie", "Taesa", "CPFL", "Cyrela", "Aliansce", "CCR", "Multiplan", "EZTec", "Suzano", "Vibra Energia", "Klabin", "CSN Mineração", "Gerdau", "Slc", "Fleury","Hypera", "Minerva", "Arezo"),Retorno =sapply(indicadores, `[[`, "retorno_medio"),Risco =sapply(indicadores, `[[`, "risco")# Volatilidade = sapply(indicadores, `[[`, "volatilidade"))# Usar kable para criar a tabela e kableExtra para formatá-lakable(df2[,-1], format ="html") |>kable_styling(bootstrap_options =c("striped", "hover", "condensed")) |>row_spec(0, background ="#2166AC") |># Cabeçalho da tabela em azulrow_spec(2:6, background ="#C7EAE5") |># Linhas em diferentes tons de azulrow_spec(7:11, background ="#92C5DE") |>row_spec(12:16, background ="#D1E5F0") |>row_spec(17:21, background ="#E7D4E8") |>row_spec(22:26, background ="#FFAABB")
Retorno
Risco
ibov
0.0379769
18.214420
vivo
0.0388613
42.230186
totvs
-0.0029673
-503.682618
weg
0.3544639
3.167515
tim
-0.0499303
-33.052475
localiza
-0.2194780
-8.653851
transmissao_paulista
-0.0460049
-30.983748
cemig
0.1968771
8.337587
engie
0.2263159
5.286272
taesa
-0.0622991
-14.191695
cpfl
-0.0993705
-14.953551
cyrela
-0.1018746
-19.862232
aliansce
0.0070475
241.499458
ccr
0.0148388
93.363825
multiplan
0.0550332
30.767545
eztc
0.0791515
29.385511
suzano
-0.2034760
-13.574925
vibra
0.0438815
40.975063
klabin
0.0000000
Inf
csn_mineracao
0.0229436
100.080600
gerdau
0.0469226
29.728891
slc
0.0409822
38.199974
fleury
0.1194938
10.966891
hypera
-0.0239141
-82.878390
minerva
0.1323446
18.689462
arezo
0.0015944
942.785491
Código
# Definir as empresas e seus tickersempresas2 <-c(ibov ="^BVSP",vivo ="vivt3.sa", totvs ="tots3.sa", weg ="wege3.sa", tim ="tims3.sa", localiza ="rent3.sa", transmissao_paulista ="trpl3.sa", cemig ="cmig3.sa",engie ="egie3.sa", taesa ="taee3.sa", cpfl ="cpfe3.sa", cyrela ="cyre3.sa", aliansce ="alos3.sa", ccr ="ccro3.sa", multiplan ="mult3.sa", eztc ="eztc3.sa", suzano ="suzb3.sa", vibra ="vbbr3.sa", klabin ="klbn3.sa", csn_mineracao ="cmin3.sa", gerdau ="ggbr3.sa",slc ="slce3.sa",fleury ="flry3.sa",hypera ="hype3.sa",minerva ="beef3.sa",arezo ="arzz3.sa")# Função para calcular beta e p-valor para uma empresa específicacalcular_beta <-function(ticker, index_ticker, dataini, datafim) {# Obter dados de fechamento para a empresa e o índice preco_empresa <-na.omit(get.hist.quote(instrument = ticker, quote ="Close", start = dataini, end = datafim, retclass ="zoo")) preco_indice <-na.omit(get.hist.quote(instrument = index_ticker, quote ="Close", start = dataini, end = datafim, retclass ="zoo"))# Calcular retornos diários retorno_empresa <-diff(log(preco_empresa)) retorno_indice <-diff(log(preco_indice))# Ajustar comprimentos se necessário n <-min(length(retorno_empresa), length(retorno_indice)) retorno_empresa <- retorno_empresa[1:n] retorno_indice <- retorno_indice[1:n]# Calcular beta e p-valor usando regressão linear simples modelo <-lm(retorno_empresa ~ retorno_indice) beta <-coef(modelo)[2] pvalor <-summary(modelo)$coefficients[2, 4]list(beta = beta, pvalor = pvalor)}# Calcular beta e p-valor para cada empresa em relação ao índice Bovesparesultados <-lapply(empresas2[-1], function(ticker) {calcular_beta(ticker, empresas2["ibov"], dataini, datafim)})
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
time series ends 2024-07-19
Código
# Criar data frame com os resultadosdf_resultados <-data.frame(Empresa =names(resultados),Beta =sapply(resultados, function(res) res$beta),P_valor =sapply(resultados, function(res) res$pvalor)) %>%arrange(desc(Beta)) # Ordenar por beta decrescente# Exibir a tabela de resultados com kablekable(df_resultados[,-1], caption ="Beta Mercado", format ="html") |>kable_styling(bootstrap_options =c("striped", "hover", "condensed"))
Beta Mercado
Beta
P_valor
eztc.retorno_indice
2.0432259
0.0000003
cyrela.retorno_indice
1.8756348
0.0000000
localiza.retorno_indice
1.7458951
0.0000000
multiplan.retorno_indice
1.6489462
0.0000000
csn_mineracao.retorno_indice
1.5730156
0.0001311
minerva.retorno_indice
1.5138134
0.0007508
vibra.retorno_indice
1.4081974
0.0000078
hypera.retorno_indice
1.3559927
0.0001341
ccr.retorno_indice
1.0950261
0.0000062
fleury.retorno_indice
1.0354156
0.0000063
vivo.retorno_indice
0.9462028
0.0015976
gerdau.retorno_indice
0.9109368
0.0002914
tim.retorno_indice
0.8951672
0.0031374
cemig.retorno_indice
0.8416580
0.0054265
cpfl.retorno_indice
0.7892085
0.0038814
arezo.retorno_indice
0.7745893
0.0051837
totvs.retorno_indice
0.7389855
0.0074777
engie.retorno_indice
0.6797449
0.0018942
suzano.retorno_indice
0.6077161
0.2457088
aliansce.retorno_indice
0.6034199
0.0589438
taesa.retorno_indice
0.5920593
0.0001938
klabin.retorno_indice
0.5254745
0.0119201
slc.retorno_indice
0.4423381
0.1345073
weg.retorno_indice
0.2655299
0.2116855
transmissao_paulista.retorno_indice
0.2169622
0.4233427
Histogramas dos Retornos das Empresas
Código
# Função para criar histogramas usando 'hist' do R basecriar_histograma <-function(retorno, nome) {hist(retorno, breaks =30, main = nome, xlab ="Retorno", ylab ="Frequência", col ="#006860", border ="#40A8A0")}# Definir layout para exibir múltiplos histogramaspar(mfrow =c(3, 2))# Criar histogramas para todas as empresas, agrupando em conjuntos de 5 empresas mais o IBOVfor (i inseq(1, length(empresas) -1, by =5)) {criar_histograma(retornos[[1]], "IBOV")for (j in i:min(i+4, length(empresas) -1)) {criar_histograma(retornos[[j +1]], names(empresas)[j +1]) }# Esperar antes de mostrar o próximo conjuntoif (i +5<length(empresas)) {readline(prompt="Conjunto de 5 Empresas + IBOV") }}