Comparação de riscos e performance em dois periodos
Authors
Prof.Dr.Sinézio Fernandes Maia
Gabriel Barros Teixeira
1 Importando os dados
Code
#Remoção de objetos anteriores#remove(list = ls())gc()par(mfrow =c(1, 1))options(scipen =999, max.print =100000)date()# Diretório de trabalhoknitr::opts_chunk$set(echo =TRUE,root.dir ="C:/Users/gabri/Documents")# Carregamento do pacotelibrary(tseries)dataini <-"2023-10-27"datafim <-"2024-01-27"dataini2 <-"2025-04-08"datafim2 <-"2025-07-08"ativos <-c("CMIG4.SA", "VAMO3.SA", "BRFS3.SA", "CSNA3.SA", "LREN3.SA","^BVSP")## Periodo 1cotacoes <-list()for (ativo in ativos) { cotacoes[[ativo]] <-get.hist.quote(instrument = ativo,quote ="Close",start = dataini,end = datafim,retclass ="zoo")}# Junta as séries (por data)cotacoes <-do.call(merge, cotacoes)
2 De 27/10/2023 até 26/01/2024
Comportamento das cotações dos ativos e do indice de referência no primeiro período análisado
Code
colnames(cotacoes)[colnames(cotacoes) =="Close.CMIG4.SA"] <-"CMIG4"colnames(cotacoes)[colnames(cotacoes) =="Close.LREN3.SA"] <-"LREN3"colnames(cotacoes)[colnames(cotacoes) =="Close.CSNA3.SA"] <-"CSNA3"colnames(cotacoes)[colnames(cotacoes) =="Close.VAMO3.SA"] <-"VAMO3"colnames(cotacoes)[colnames(cotacoes) =="Close.BRFS3.SA"] <-"BRFS3"colnames(cotacoes)[colnames(cotacoes) =="Close.^BVSP"] <-"IBOV"plot(cotacoes, main ="Preços de Fechamento")
3 De 08/04/2025 até 07/08/2025
Comportamentos das cotações dos ativos e do indice de referência no segundo período análisado
Code
colnames(cotacoes2)[colnames(cotacoes2) =="Close.CMIG4.SA"] <-"CMIG4"colnames(cotacoes2)[colnames(cotacoes2) =="Close.LREN3.SA"] <-"LREN3"colnames(cotacoes2)[colnames(cotacoes2) =="Close.CSNA3.SA"] <-"CSNA3"colnames(cotacoes2)[colnames(cotacoes2) =="Close.VAMO3.SA"] <-"VAMO3"colnames(cotacoes2)[colnames(cotacoes2) =="Close.BRFS3.SA"] <-"BRFS3"colnames(cotacoes2)[colnames(cotacoes2) =="Close.^BVSP"] <-"IBOV"plot(cotacoes2, main ="Preços de Fechamento")
4 Média diária dos retornos
Code
# Periodo 1rcotacoes <-lapply(cotacoes, function(x) diff(log(x)))rcotacoes <-do.call(cbind, rcotacoes)mrcotacoes <-sapply(rcotacoes, mean, na.rm =TRUE)print("Media dos retornos na primeira janela")
# Periodo 2rcotacoes2 <-lapply(cotacoes2, function(x) diff(log(x))) rcotacoes2 <-do.call(cbind, rcotacoes2)mrcotacoes2 <-sapply(rcotacoes2, mean, na.rm =TRUE)print("Media dos retornos na segunda janela")
# Cria o gráfico e armazena as posições das barrasbpVol2 <-barplot(Volcotacoes2,main ="Volatilidade periodo 08/04/2025 - 07/07/2025",ylab ="Percentual %",col ='blue',ylim =c(0, max(Volcotacoes2) *1.2))# Adiciona os rótulos no topo das barrastext(x = bpVol2,y = Volcotacoes2,label =round(Volcotacoes2, 2), # Rótulos com 2 casas decimaispos =3,col ="black",cex =0.8)
8 Comparação do Beta Mercado calculado
9 Indicadores de performance
Code
bpTreynor<-barplot(TREYNOR, main="Indicador de Performance: Treynor 27/10/2023 - 26/01/2024", ylim=c(-10,1),names.arg=names, ylab="Percentual %", cex.names=1)text(x =as.vector(bpTreynor), y = TREYNOR, label =round(TREYNOR, 4), pos =3, col ="black", cex =0.8)
Code
bpTreynor<-barplot(TREYNOR2, main="Indicador de Performance: Treynor 08/04/2025 - 07/07/2025", ylim=c(-10,1),names.arg=names, ylab="Percentual %", cex.names=1)text(x =as.vector(bpTreynor), y = TREYNOR2, label =round(TREYNOR2, 4), pos =3, col ="black", cex =0.8)
Code
bpSharpe<-barplot(SHARPE, main="Indicador de Performance: Sharpe 27/10/2023 - 26/01/2024", ylim=c(-4,1),names.arg=names, ylab="Percentual %", cex.names=1)text(x =as.vector(bpSharpe), y = SHARPE, label =round(SHARPE, 4), pos =3, col ="black", cex =0.8)
Code
bpSharpe<-barplot(SHARPE2, main="Indicador de Performance: Sharpe 08/04/2025 - 07/07/2025", ylim=c(-4,1),names.arg=names, ylab="Percentual %", cex.names=1)text(x =as.vector(bpSharpe), y = SHARPE2, label =round(SHARPE2, 4), pos =3, col ="black", cex =0.8)
Code
bpJensen<-barplot(JENSEN, main="Indicador de Performance: Jensen 27/10/2023 - 26/01/2024", ylim=c(-0.02,0.09),names.arg=names, ylab="Percentual %", cex.names=0.7)text(x =as.vector(bpJensen), y = JENSEN, label =round(JENSEN, 4), pos =3, col ="black", cex =0.7)
Code
bpJensen<-barplot(JENSEN2, main="Indicador de Performance: Jensen 08/04/2025 - 07/07/2025", ylim=c(-0.02,0.09),names.arg=names, ylab="Percentual %", cex.names=0.7)text(x =as.vector(bpJensen), y = JENSEN2, label =round(JENSEN2, 4), pos =3, col ="black", cex =0.7)
10 Conclusão
O beta de mercado mede a exposição de um ativo ao risco sistemático. Quando está próximo de 1, os retornos do ativo tendem a acompanhar os retornos do mercado; quando é superior a 1, uma variação no mercado gera uma volatilidade ainda maior no ativo; e, quando é inferior a 1, o ativo apresenta menor volatilidade em relação ao mercado.
O beta é um componente central do modelo CAPM, que estima o retorno esperado de um ativo a partir do prêmio de risco, definido pela diferença entre o retorno do mercado e a taxa livre de risco. O modelo assume a inexistência de custos de transação e a disponibilidade das mesmas informações para todos os investidores. Nessas condições, o risco de qualquer ativo corresponde ao risco incremental que ele adiciona ao portfólio de mercado (Damodaran).
Os diferentes betas observado nas janelas se explica por dois motivos principais:
Se a covariância muda (ativo passa a se mover mais ou menos junto ao mercado), o Beta muda, com as diefrentes volatilidades. Ou Se a variância do mercado muda (mercado fica mais ou menos volátil).
\[
E(R_i) = r_f + \beta_i \cdot [E(R_m) - r_f]
\]
E(Ri) = retorno esperado do ativo
Rf = taxa livre de risco
βi= beta do ativo i, que mede sua sensibilidade em relação ao mercado
E(Rm)= retorno esperado do mercado (benchmark)
(E(Rm)−Rf) = prêmio de risco do mercado
Os indicadores de performance, de treynor, sharpe e jensen observados têm o intuito de auxiliar o investidor e os gestores de carteiras a mensurar o retorno de um ativo ou de uma carteira de ativos, levando em consideração não apenas sua valorização e retorno individual, mas também a comparação com a taxa livre de risco e o risco assumido na operação. Dessa forma, é possível verificar se foi gerado alfa no período e foi possível superar o retorno do benchmark, ou seja, se houve prêmio pelo risco assumido ou se o risco tomado foi desproporcional ao retorno obtido. Em suma os indicadores acima tem esse objetivo, embora cada um deles envolvam caracteristicas diferentes, e por tanto resultando em valores diferentes.
Tanto o indice de Treynor como o de Sharpe medem o retorno descontado de um benchmark, nesse caso, a taxa livre risco, ou seja, o premio observado para cada unidade de risco, porém o que difere um do outro está no denominador. O treynor considera como medidade de risco o beta mercado, enquanto o sharpe considera o desvio padrão.
Já o indice de Jensen é obtido quando se isola o alfa da equação do capm observando exatamente o retorno acima do mercado observado, considerado como alfa, portanto, Seu cálculo é dado pela diferença entre o retorno de fato apresentado pela carteira e o retorno que deveria ter sido apresentado nas condições do CAPM.
Como mencionado por Damodaran, o Beta representa o risco sistemático e, na teoria moderna de portfólio, é utilizado considerando uma carteira diversificada, uma vez que os riscos específicos de cada ativo já foram eliminados pela diversificação. Na equação do CAPM, a diversificação está representada no termo de erro; quando a carteira não é diversificada, esse termo de erro, que sintetiza as variáveis omitidas no modelo, tende a se elevar.
Não é à toa que o Beta estimado de um ativo individual apresenta, na maioria dos casos, um R² baixo, indicando que apenas uma pequena parcela de seu retorno é explicada pelas variáveis do modelo.
Portanto, ao avaliar os índices para cada ativo específico e estabelecer a prioridade dos indicadores no processo de seleção da nossa carteira, o Índice de Treynor ocupará a última posição, pois utiliza como medida de risco o Beta de mercado do ativo individual.
Diferentemente do abordado pelo Índice de Treynor, o Sharpe leva em consideração o desvio-padrão do ativo, entendendo que a volatilidade e o risco do ativo são capturados pelas oscilações em torno da média especificamente do ativo analisado. Dessa forma, torna-se mais viável utilizá-lo nesse contexto, justificando a elevação de sua prioridade no processo de seleção da carteira.
Por fim, o Índice de Jensen mede o excesso de retorno em relação ao retorno esperado pelo CAPM. Ou seja, avalia se o ativo conseguiu gerar retorno acima do esperado para o risco sistemático assumido. Sendo um bom indicador para analisar o prêmio e o retorno em comparação ao esperado para o próprio ativo, mostra-se apropriado para ocupar um nível de prioridade superior, equivalente ao do índice de Sharpe.
Source Code
---title: "Quiz 1"subtitle: "Comparação de riscos e performance em dois periodos"author: - name: "Prof.Dr.Sinézio Fernandes Maia" - name: "Gabriel Barros Teixeira"format: html: code-fold: true code-tools: true toc: true toc-depth: 3 number-sections: trueeditor: visual---## Importando os dados```{r}#| message: false#| warning: false#| results: hide#Remoção de objetos anteriores#remove(list = ls())gc()par(mfrow =c(1, 1))options(scipen =999, max.print =100000)date()# Diretório de trabalhoknitr::opts_chunk$set(echo =TRUE,root.dir ="C:/Users/gabri/Documents")# Carregamento do pacotelibrary(tseries)dataini <-"2023-10-27"datafim <-"2024-01-27"dataini2 <-"2025-04-08"datafim2 <-"2025-07-08"ativos <-c("CMIG4.SA", "VAMO3.SA", "BRFS3.SA", "CSNA3.SA", "LREN3.SA","^BVSP")## Periodo 1cotacoes <-list()for (ativo in ativos) { cotacoes[[ativo]] <-get.hist.quote(instrument = ativo,quote ="Close",start = dataini,end = datafim,retclass ="zoo")}# Junta as séries (por data)cotacoes <-do.call(merge, cotacoes)``````{r}#| echo: false#| message: false#| warning: false#| results: hide## Periodo 2cotacoes2 <-list()for (ativo in ativos) { cotacoes2[[ativo]] <-get.hist.quote(instrument = ativo,quote ="Close",start = dataini2,end = datafim2,retclass ="zoo")}# Junta as séries (por data)cotacoes2 <-do.call(merge, cotacoes2)```## De 27/10/2023 até 26/01/2024Comportamento das cotações dos ativos e do indice de referência no primeiro período análisado```{r}colnames(cotacoes)[colnames(cotacoes) =="Close.CMIG4.SA"] <-"CMIG4"colnames(cotacoes)[colnames(cotacoes) =="Close.LREN3.SA"] <-"LREN3"colnames(cotacoes)[colnames(cotacoes) =="Close.CSNA3.SA"] <-"CSNA3"colnames(cotacoes)[colnames(cotacoes) =="Close.VAMO3.SA"] <-"VAMO3"colnames(cotacoes)[colnames(cotacoes) =="Close.BRFS3.SA"] <-"BRFS3"colnames(cotacoes)[colnames(cotacoes) =="Close.^BVSP"] <-"IBOV"plot(cotacoes, main ="Preços de Fechamento")```## De 08/04/2025 até 07/08/2025Comportamentos das cotações dos ativos e do indice de referência no segundo período análisado```{r}colnames(cotacoes2)[colnames(cotacoes2) =="Close.CMIG4.SA"] <-"CMIG4"colnames(cotacoes2)[colnames(cotacoes2) =="Close.LREN3.SA"] <-"LREN3"colnames(cotacoes2)[colnames(cotacoes2) =="Close.CSNA3.SA"] <-"CSNA3"colnames(cotacoes2)[colnames(cotacoes2) =="Close.VAMO3.SA"] <-"VAMO3"colnames(cotacoes2)[colnames(cotacoes2) =="Close.BRFS3.SA"] <-"BRFS3"colnames(cotacoes2)[colnames(cotacoes2) =="Close.^BVSP"] <-"IBOV"plot(cotacoes2, main ="Preços de Fechamento")```## Média diária dos retornos```{r}# Periodo 1rcotacoes <-lapply(cotacoes, function(x) diff(log(x)))rcotacoes <-do.call(cbind, rcotacoes)mrcotacoes <-sapply(rcotacoes, mean, na.rm =TRUE)print("Media dos retornos na primeira janela")mrcotacoes *100# Retorno médio diário em %# Periodo 2rcotacoes2 <-lapply(cotacoes2, function(x) diff(log(x))) rcotacoes2 <-do.call(cbind, rcotacoes2)mrcotacoes2 <-sapply(rcotacoes2, mean, na.rm =TRUE)print("Media dos retornos na segunda janela")mrcotacoes2 *100# Retorno médio diário em %```## Desvio padrão dos retornos```{r}# Periodo 1Drcotacoes <-sapply(rcotacoes, sd, na.rm =TRUE)print("Desvio padrao na primeira janela")Drcotacoes # Desvio padrão dos retornos# Periodo 2Drcotacoes2 <-sapply(rcotacoes2, sd, na.rm =TRUE)print("Desvio padrao na segunda janela")Drcotacoes2 # Desvio padrão dos retornos```## Coeficiente de variação```{r}#| message: false#| warning: false#| results: hide# Periodo 1cvrcotacoes <- Drcotacoes / (mrcotacoes *100)cvrcotacoes *100# Coeficiente de variação dos retornos em %cvrcotacoes <-abs(cvrcotacoes)*100# barplot(cvrcotacoes, main = "Coeficiente de variação dos retornos 27/10/2023 - 26/01/2024", col='blue')bpCVR <-barplot(cvrcotacoes,main ="Coeficiente de variação dos retornos 08/04/2025 - 07/07/2025",ylab ="Percentual %",col ="blue",names.arg =names(cvrcotacoes),cex.names =1,ylim =c(0, max(cvrcotacoes) *1.2))text(x = bpCVR,y = cvrcotacoes,label =round(cvrcotacoes, 2), # Rótulos com 2 casas decimaispos =3,col ="black",cex =0.8)# Periodo 2cvrcotacoes2 <- Drcotacoes2 / (mrcotacoes2 *100)cvrcotacoes2 *100# Coeficiente de variação dos retornos em %cvrcotacoes2 <-abs(cvrcotacoes2)*100# barplot(cvrcotacoes2, main = "Coeficiente de variação dos retornos 08/04/2025 - 07/07/2025", col='blue')bpCVR <-barplot(cvrcotacoes2,main ="Coeficiente de variação dos retornos 08/04/2025 - 07/07/2025",ylab ="Percentual %",col ="blue",names.arg =names(cvrcotacoes2),cex.names =1,ylim =c(0, max(cvrcotacoes2) *1.2))text(x = bpCVR,y = cvrcotacoes2,label =round(cvrcotacoes2, 2), # Rótulos com 2 casas decimaispos =3,col ="black",cex =0.8)```## Volatilidade```{r}#| message: false#| warning: false#| results: hide# Periodo 1Volcotacoes <- (Drcotacoes *100) *sqrt(252)Volcotacoes # Volatilidade anualizada em %# barplot(Volcotacoes, main = "Volatilidade 27/10/2023 - 26/01/2024", col='blue')# Periodo 1Volcotacoes <- (Drcotacoes *100) *sqrt(252)Volcotacoes # Volatilidade anualizada em %# Cria o gráfico e armazena as posições das barrasbpVol1 <-barplot(Volcotacoes,main ="Volatilidade 27/10/2023 - 26/01/2024",ylab ="Percentual %",col ='blue',ylim =c(0, max(Volcotacoes) *1.2))# Adiciona os rótulos no topo das barrastext(x = bpVol1,y = Volcotacoes,label =round(Volcotacoes, 2), # Rótulos com 2 casas decimaispos =3,col ="black",cex =0.8)# Periodo 2Volcotacoes2 <- (Drcotacoes2 *100) *sqrt(252)Volcotacoes2 # Volatilidade anualizada em %# barplot(Volcotacoes2,main = "Volatilidade periodo 08/04/2025 - 07/07/2025", col='blue')# Periodo 2Volcotacoes2 <- (Drcotacoes2 *100) *sqrt(252)Volcotacoes2 # Volatilidade anualizada em %# Cria o gráfico e armazena as posições das barrasbpVol2 <-barplot(Volcotacoes2,main ="Volatilidade periodo 08/04/2025 - 07/07/2025",ylab ="Percentual %",col ='blue',ylim =c(0, max(Volcotacoes2) *1.2))# Adiciona os rótulos no topo das barrastext(x = bpVol2,y = Volcotacoes2,label =round(Volcotacoes2, 2), # Rótulos com 2 casas decimaispos =3,col ="black",cex =0.8)``````{r}#| echo: false#| message: false#| warning: false#| results: hidecmig4 <-get.hist.quote("cmig4.sa", quote ="Close", start = dataini, end = datafim)vamo3 <-get.hist.quote("vamo3.sa", quote ="Close", start = dataini, end = datafim)brfs3 <-get.hist.quote("brfs3.sa", quote ="Close", start = dataini, end = datafim);csna3 <-get.hist.quote("csna3.sa", quote ="Close", start = dataini, end = datafim)lren3 <-get.hist.quote("lren3.sa", quote ="Close", start = dataini, end = datafim)Ibov <-get.hist.quote("^BVSP",quote ="Close", start = dataini, end = datafim)library(rbcb)selic <-get_series(11, start_date = dataini,end_date =datafim);seliclibrary(zoo)Selic=zoo(selic$'11')index(Selic)=selic$dateSelic; plot(Selic)dados2=na.omit(merge(Ibov,Selic))dados2=data.frame(index(dados2), dados2)names(dados2)=c("Data", "Ibovespa", "SELIC")attach(dados2); dados2library(zoo)Ativos=merge(cmig4, vamo3, brfs3, csna3,lren3,Ibov,Selic)length(na.omit(Ativos[,1]))Data1=index(na.omit(Ativos));length(Data1)CarteiraBETA=data.frame(na.omit(Ativos),na.omit(Data1))names(CarteiraBETA)=c("cmig4", "vamo3", "brfs3", "csna3", "lren3","Ibovespa","Selic", "Data1")attach(CarteiraBETA)options(max.print=99999)CarteiraBETAn=length(CarteiraBETA[,1]); nCarteiraBETA[n,]write.table(CarteiraBETA, file="BetaCarteira.txt")CarteiraBETA <-read.table("BetaCarteira.txt", head=T)names(CarteiraBETA) <-c("cmig4", "vamo3", "brfs3", "csna3", "lren3", "Ibovespa", "Selic", "Data")attach(CarteiraBETA)CarteiraBETA; length((CarteiraBETA$Selic))CarteiraBETA$Ibovespa; length(CarteiraBETA$Ibovespa)CarteiraBETA$cmig4; length(CarteiraBETA$cmig4)CarteiraBETA$Selic; length(CarteiraBETA$Selic)# --- CORREÇÃO AQUI ---# A forma correta é garantir que todos os vetores de retorno# e a taxa Selic tenham o mesmo tamanho.rIbov =diff(log(Ibovespa)); rIbov; length(rIbov)RIbov = rIbov *100; RIbov; mean(RIbov)RSelic = CarteiraBETA$Selic[-1]; length(CarteiraBETA$Selic[-1])RSelic# Calculando os retornos corretamente (removendo o [-1])rcmig4 =diff(log(CarteiraBETA$cmig4)); length(rcmig4)rvamo3 =diff(log(CarteiraBETA$vamo3)); length(rvamo3)rbrfs3 =diff(log(CarteiraBETA$brfs3)); length(rbrfs3)rcsna3 =diff(log(CarteiraBETA$csna3)); length(rcsna3)rlren3 =diff(log(CarteiraBETA$lren3)); length(rlren3)RIbov = (rIbov - RSelic); length(RIbov); RIbov# Calculando os prêmios de risco corretamente (removendo o [-1] do RSelic)Rcmig4 = rcmig4 - RSelicRcmig4; length(Rcmig4)Rvamo3 = rvamo3 - RSelicRbrfs3 = rbrfs3 - RSelicRcsna3 = rcsna3 - RSelicRlren3 = rlren3 - RSelic# --- FIM DA CORREÇÃO ---# Cálculo do Beta cmig4, vamo3, brfs3, csna3 e lren3# As regressões agora funcionarão pois os vetores estão alinhadosBetacmig4 =lm(Rcmig4 ~ RIbov); Betacmig4Betavamo3 =lm(Rvamo3 ~ RIbov); Betavamo3Betabrfs3 =lm(Rbrfs3 ~ RIbov); Betabrfs3Betacsna3 =lm(Rcsna3 ~ RIbov); Betacsna3Betalren3 =lm(Rlren3 ~ RIbov); Betalren3TREYNOR=c(mean(Rcmig4)*100/Betacmig4$coef[2],mean(Rvamo3)*100/Betavamo3$coef[2],mean(Rbrfs3)*100/Betabrfs3$coef[2],mean(Rcsna3)*100/Betacsna3$coef[2],mean(Rlren3)*100/Betalren3$coef[2]);names;SHARPE=c(mean(Rcmig4)/sd(Rcmig4),mean(Rvamo3)/sd(Rvamo3),mean(Rbrfs3)/sd(Rbrfs3),mean(Rcsna3)/sd(Rcsna3),mean(Rlren3)/sd(Rlren3));names;JENSEN=c(Betacmig4$coef[1],Betavamo3$coef[1],Betabrfs3$coef[1],Betacsna3$coef[1],Betalren3$coef[1]);names;JENSEN``````{r}#| echo: false#| message: false#| warning: false#| results: hide# Periodo 2cmig4 <-get.hist.quote("cmig4.sa", quote ="Close", start = dataini2, end = datafim2)vamo3 <-get.hist.quote("vamo3.sa", quote ="Close", start = dataini2, end = datafim2)brfs3 <-get.hist.quote("brfs3.sa", quote ="Close", start = dataini2, end = datafim2);csna3 <-get.hist.quote("csna3.sa", quote ="Close", start = dataini2, end = datafim2)lren3 <-get.hist.quote("lren3.sa", quote ="Close", start = dataini2, end = datafim2)Ibov <-get.hist.quote("^BVSP",quote ="Close", start = dataini2, end = datafim2)library(rbcb)selic <-get_series(11, start_date = dataini2,end_date =datafim2);seliclibrary(zoo)Selic=zoo(selic$'11')index(Selic)=selic$dateSelic; plot(Selic)dados2=na.omit(merge(Ibov,Selic))dados2=data.frame(index(dados2), dados2)names(dados2)=c("Data", "Ibovespa", "SELIC")attach(dados2); dados2library(zoo)Ativos=merge(cmig4, vamo3, brfs3, csna3,lren3,Ibov,Selic)length(na.omit(Ativos[,1]))Data1=index(na.omit(Ativos));length(Data1)CarteiraBETA=data.frame(na.omit(Ativos),na.omit(Data1))names(CarteiraBETA)=c("cmig4", "vamo3", "brfs3", "csna3", "lren3","Ibovespa","Selic", "Data1")attach(CarteiraBETA)options(max.print=99999)CarteiraBETAn=length(CarteiraBETA[,1]); nCarteiraBETA[n,]write.table(CarteiraBETA, file="BetaCarteira.txt")CarteiraBETA <-read.table("BetaCarteira.txt", head=T)names(CarteiraBETA) <-c("cmig4", "vamo3", "brfs3", "csna3", "lren3", "Ibovespa", "Selic", "Data")attach(CarteiraBETA)CarteiraBETA; length((CarteiraBETA$Selic))CarteiraBETA$Ibovespa; length(CarteiraBETA$Ibovespa)CarteiraBETA$cmig4; length(CarteiraBETA$cmig4)CarteiraBETA$Selic; length(CarteiraBETA$Selic)rIbov =diff(log(Ibovespa)); rIbov; length(rIbov)RIbov = rIbov *100; RIbov; mean(RIbov)RSelic = CarteiraBETA$Selic[-1]; length(CarteiraBETA$Selic[-1])RSelic# CORREÇÃO AQUI - Apenas a parte do Rcmig4, rvamo3, etc. foi alterada# O diff() já removeu um elemento, então você não precisa usar [-1] aqui.rcmig4 =diff(log(CarteiraBETA$cmig4)); length(rcmig4)rvamo3 =diff(log(CarteiraBETA$vamo3)); length(rvamo3)rbrfs3 =diff(log(CarteiraBETA$brfs3)); length(rbrfs3)rcsna3 =diff(log(CarteiraBETA$csna3)); length(rcsna3)rlren3 =diff(log(CarteiraBETA$lren3)); length(rlren3)RIbov = (rIbov - RSelic); length(RIbov); RIbov# CORREÇÃO AQUI - Removido o [-1] de RSelic para manter o alinhamentoRcmig4 = rcmig4 - RSelicRcmig4; length(Rcmig4)Rvamo3 = rvamo3 - RSelicRbrfs3 = rbrfs3 - RSelicRcsna3 = rcsna3 - RSelicRlren3 = rlren3 - RSelic# Cálculo do Beta cmig4, vamo3, brfs3, csna3 e lren3Beta2cmig4 =lm(Rcmig4 ~ RIbov);Beta2vamo3 =lm(Rvamo3 ~ RIbov);Beta2brfs3 =lm(Rbrfs3 ~ RIbov);Beta2csna3 =lm(Rcsna3 ~ RIbov);Beta2lren3 =lm(Rlren3 ~ RIbov);TREYNOR2=c(mean(Rcmig4)*100/Beta2cmig4$coef[2],mean(Rvamo3)*100/Beta2vamo3$coef[2],mean(Rbrfs3)*100/Beta2brfs3$coef[2],mean(Rcsna3)*100/Beta2csna3$coef[2],mean(Rlren3)*100/Beta2lren3$coef[2]);names;SHARPE2=c(mean(Rcmig4)/sd(Rcmig4),mean(Rvamo3)/sd(Rvamo3),mean(Rbrfs3)/sd(Rbrfs3),mean(Rcsna3)/sd(Rcsna3),mean(Rlren3)/sd(Rlren3));names;JENSEN2=c(Beta2cmig4$coef[1],Beta2vamo3$coef[1],Beta2brfs3$coef[1],Beta2csna3$coef[1],Beta2lren3$coef[1]);names;```## Comparação do Beta Mercado calculado```{r}#| echo: false#| message: false#| warning: false#| results: hide# Perido 1names =c("cmig4", "vamo3", "brfs3", "csna3", "lren3")BETA.Mercado =c(Betacmig4$coef[2], Betavamo3$coef[2], Betabrfs3$coef[2], Betacsna3$coef[2], Betalren3$coef[2])names; BETA.Mercadobpb <-barplot(BETA.Mercado, main ="Gráf.4:Cálculo do Beta-Mercado da Carteira 27/10/2023 - 26/01/2024", ylim =c(0,3.0), names.arg = names, ylab ="Percentual %", cex.names =1, col ="darkgreen")text(x =as.vector(bpb), y = BETA.Mercado,label =round(BETA.Mercado, 2), pos =3,col ="black", cex =0.8)# Periodo 2names =c("cmig4", "vamo3", "brfs3", "csna3", "lren3")BETA.Mercado =c(Beta2cmig4$coef[2], Beta2vamo3$coef[2], Beta2brfs3$coef[2], Beta2csna3$coef[2], Beta2lren3$coef[2])names; BETA.Mercadobpb <-barplot(BETA.Mercado, main ="Gráf.4:Cálculo do Beta-Mercado da Carteira 08/04/2025 - 07/07/2025", ylim =c(0,3.0), names.arg = names, ylab ="Percentual %", cex.names =1, col ="darkgreen")text(x =as.vector(bpb), y = BETA.Mercado,label =round(BETA.Mercado, 2), pos =3,col ="black", cex =0.8)```## Indicadores de performance```{r}bpTreynor<-barplot(TREYNOR, main="Indicador de Performance: Treynor 27/10/2023 - 26/01/2024", ylim=c(-10,1),names.arg=names, ylab="Percentual %", cex.names=1)text(x =as.vector(bpTreynor), y = TREYNOR, label =round(TREYNOR, 4), pos =3, col ="black", cex =0.8)bpTreynor<-barplot(TREYNOR2, main="Indicador de Performance: Treynor 08/04/2025 - 07/07/2025", ylim=c(-10,1),names.arg=names, ylab="Percentual %", cex.names=1)text(x =as.vector(bpTreynor), y = TREYNOR2, label =round(TREYNOR2, 4), pos =3, col ="black", cex =0.8)``````{r}bpSharpe<-barplot(SHARPE, main="Indicador de Performance: Sharpe 27/10/2023 - 26/01/2024", ylim=c(-4,1),names.arg=names, ylab="Percentual %", cex.names=1)text(x =as.vector(bpSharpe), y = SHARPE, label =round(SHARPE, 4), pos =3, col ="black", cex =0.8)bpSharpe<-barplot(SHARPE2, main="Indicador de Performance: Sharpe 08/04/2025 - 07/07/2025", ylim=c(-4,1),names.arg=names, ylab="Percentual %", cex.names=1)text(x =as.vector(bpSharpe), y = SHARPE2, label =round(SHARPE2, 4), pos =3, col ="black", cex =0.8)``````{r}bpJensen<-barplot(JENSEN, main="Indicador de Performance: Jensen 27/10/2023 - 26/01/2024", ylim=c(-0.02,0.09),names.arg=names, ylab="Percentual %", cex.names=0.7)text(x =as.vector(bpJensen), y = JENSEN, label =round(JENSEN, 4), pos =3, col ="black", cex =0.7)bpJensen<-barplot(JENSEN2, main="Indicador de Performance: Jensen 08/04/2025 - 07/07/2025", ylim=c(-0.02,0.09),names.arg=names, ylab="Percentual %", cex.names=0.7)text(x =as.vector(bpJensen), y = JENSEN2, label =round(JENSEN2, 4), pos =3, col ="black", cex =0.7)```## Conclusão**O beta de mercado mede a exposição de um ativo ao risco sistemático. Quando está próximo de 1, os retornos do ativo tendem a acompanhar os retornos do mercado; quando é superior a 1, uma variação no mercado gera uma volatilidade ainda maior no ativo; e, quando é inferior a 1, o ativo apresenta menor volatilidade em relação ao mercado.****O beta é um componente central do modelo CAPM, que estima o retorno esperado de um ativo a partir do prêmio de risco, definido pela diferença entre o retorno do mercado e a taxa livre de risco. O modelo assume a inexistência de custos de transação e a disponibilidade das mesmas informações para todos os investidores. Nessas condições, o risco de qualquer ativo corresponde ao risco incremental que ele adiciona ao portfólio de mercado (Damodaran).****Formula do Beta mercado:**$$\beta_i = \frac{\text{Cov}(R_i, R_m)}{\text{Var}(R_m)}$$**Os diferentes betas observado nas janelas se explica por dois motivos principais:****Se a covariância muda (ativo passa a se mover mais ou menos junto ao mercado), o Beta muda, com as diefrentes volatilidades. Ou Se a variância do mercado muda (mercado fica mais ou menos volátil).**$$E(R_i) = r_f + \beta_i \cdot [E(R_m) - r_f]$$- **E(Ri) = retorno esperado do ativo**- Rf **= taxa livre de risco**- βi**= beta do ativo i, que mede sua sensibilidade em relação ao mercado**- E(Rm)**= retorno esperado do mercado (benchmark)**- **(**E**(**Rm**)−**Rf**) = prêmio de risco do mercado****Os indicadores de performance, de treynor, sharpe e jensen observados têm o intuito de auxiliar o investidor e os gestores de carteiras a mensurar o retorno de um ativo ou de uma carteira de ativos, levando em consideração não apenas sua valorização e retorno individual, mas também a comparação com a taxa livre de risco e o risco assumido na operação. Dessa forma, é possível verificar se foi gerado alfa no período e foi possível superar o retorno do benchmark, ou seja, se houve prêmio pelo risco assumido ou se o risco tomado foi desproporcional ao retorno obtido. Em suma os indicadores acima tem esse objetivo, embora cada um deles envolvam caracteristicas diferentes, e por tanto resultando em valores diferentes.****Tanto o indice de Treynor como o de Sharpe medem o retorno descontado de um benchmark, nesse caso, a taxa livre risco, ou seja, o premio observado para cada unidade de risco, porém o que difere um do outro está no denominador. O treynor considera como medidade de risco o beta mercado, enquanto o sharpe considera o desvio padrão.****Já o indice de Jensen é obtido quando se isola o alfa da equação do capm observando exatamente o retorno acima do mercado observado, considerado como alfa, portanto, Seu cálculo é dado pela diferença entre o retorno de fato apresentado pela carteira e o retorno que deveria ter sido apresentado nas condições do CAPM.****Como mencionado por Damodaran, o Beta representa o risco sistemático e, na teoria moderna de portfólio, é utilizado considerando uma carteira diversificada, uma vez que os riscos específicos de cada ativo já foram eliminados pela diversificação. Na equação do CAPM, a diversificação está representada no termo de erro; quando a carteira não é diversificada, esse termo de erro, que sintetiza as variáveis omitidas no modelo, tende a se elevar.****Não é à toa que o Beta estimado de um ativo individual apresenta, na maioria dos casos, um R² baixo, indicando que apenas uma pequena parcela de seu retorno é explicada pelas variáveis do modelo.****Portanto, ao avaliar os índices para cada ativo específico e estabelecer a prioridade dos indicadores no processo de seleção da nossa carteira, o Índice de Treynor ocupará a última posição, pois utiliza como medida de risco o Beta de mercado do ativo individual.****Diferentemente do abordado pelo Índice de Treynor, o Sharpe leva em consideração o desvio-padrão do ativo, entendendo que a volatilidade e o risco do ativo são capturados pelas oscilações em torno da média especificamente do ativo analisado. Dessa forma, torna-se mais viável utilizá-lo nesse contexto, justificando a elevação de sua prioridade no processo de seleção da carteira.****Por fim, o Índice de Jensen mede o excesso de retorno em relação ao retorno esperado pelo CAPM. Ou seja, avalia se o ativo conseguiu gerar retorno acima do esperado para o risco sistemático assumido. Sendo um bom indicador para analisar o prêmio e o retorno em comparação ao esperado para o próprio ativo, mostra-se apropriado para ocupar um nível de prioridade superior, equivalente ao do índice de Sharpe.**