Carregando os retornos (fonte economática):

retornos <- read_excel("Retornos_lista_2.xlsx")
summary(retornos[,-1])
##      RADL3                VALE3               VIVT3          
##  Min.   :-0.1283478   Min.   :-0.245236   Min.   :-0.123589  
##  1st Qu.:-0.0108766   1st Qu.:-0.011914   1st Qu.:-0.008732  
##  Median : 0.0003805   Median : 0.001653   Median : 0.000000  
##  Mean   : 0.0009523   Mean   : 0.002224   Mean   : 0.000636  
##  3rd Qu.: 0.0122921   3rd Qu.: 0.016129   3rd Qu.: 0.010060  
##  Max.   : 0.0924855   Max.   : 0.213579   Max.   : 0.123216  
##      WEGE3               YDUQ3           
##  Min.   :-0.206198   Min.   :-0.2517442  
##  1st Qu.:-0.010805   1st Qu.:-0.0165485  
##  Median : 0.001775   Median : 0.0008683  
##  Mean   : 0.001802   Mean   : 0.0016413  
##  3rd Qu.: 0.013349   3rd Qu.: 0.0192366  
##  Max.   : 0.138945   Max.   : 0.2373646

Separando os Portfólios - Estimação e Backtest:

retornos_estim <- retornos %>% dplyr::filter(Data >= "2016-01-01" & Data <= "2019-12-31")

retornos_backtest <- retornos %>% dplyr::filter(Data >= "2020-01-01" & Data <= "2021-12-31")

Questão 1 - Backtesting

Estimando a volatilidade dos ativos escolhidos

Criando variáveis para armazenar os retornos individuais dos ativos:

retornos_RADL3 <- xts(retornos_estim$RADL3, retornos_estim$Data)
retornos_VALE3 <- xts(retornos_estim$VALE3, retornos_estim$Data)
retornos_VIVT3 <- xts(retornos_estim$VIVT3, retornos_estim$Data)
retornos_WEGE3 <- xts(retornos_estim$WEGE3, retornos_estim$Data)
retornos_YDUQ3 <- xts(retornos_estim$YDUQ3, retornos_estim$Data)
RADL3
gspec <- ugarchspec(mean.model=list(
armaOrder=c(2,1)), variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
distribution="std") 

gfit <- ugarchfit(gspec, retornos_RADL3)
forc = ugarchforecast(gfit, n.ahead=21)

RADL3 <- forc@forecast$sigmaFor[21]
VALE3
gspec <- ugarchspec(mean.model=list(
armaOrder=c(2,1)), variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
distribution="std") 

gfit <- ugarchfit(gspec, retornos_VALE3)
forc = ugarchforecast(gfit, n.ahead=21)

VALE3 <- forc@forecast$sigmaFor[21]
VIVT3
gspec <- ugarchspec(mean.model=list(
armaOrder=c(2,1)), variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
distribution="std") 

gfit <- ugarchfit(gspec, retornos_VIVT3)
forc = ugarchforecast(gfit, n.ahead=21)

VIVT3 <- forc@forecast$sigmaFor[21]
WEGE3
gspec <- ugarchspec(mean.model=list(
armaOrder=c(2,1)), variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
distribution="std") 

gfit <- ugarchfit(gspec, retornos_WEGE3)
forc = ugarchforecast(gfit, n.ahead=21)

WEGE3 <- forc@forecast$sigmaFor[21]
YDUQ3
gspec <- ugarchspec(mean.model=list(
armaOrder=c(2,1)), variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
distribution="std") 

gfit <- ugarchfit(gspec, retornos_YDUQ3)
forc = ugarchforecast(gfit, n.ahead=21)

YDUQ3 <- forc@forecast$sigmaFor[21]

Juntando as volatilidades e transformando em variância:

var_estimada <- (cbind(RADL3, VALE3, VIVT3, WEGE3, YDUQ3))^2
var_estimada
##             RADL3        VALE3        VIVT3        WEGE3        YDUQ3
## [1,] 0.0002945013 0.0003283096 0.0002328512 0.0002842183 0.0007840874

Portfólio Ingênuo

retornos_backtest_ts <- xts(retornos_backtest[,-1], retornos_backtest$Data)
Pesos_Ingênuo <- rep(1/5,5)

Retorno_Ingênuo <- Return.portfolio(retornos_backtest_ts, Pesos_Ingênuo, rebalance_on = c("quarters"))
names(Retorno_Ingênuo) <- "Portfólio Ingênuo"

Portólio Volatility Timing

var <- var_estimada
wVT <- (1/var)^4/sum((1/var)^4)
Pesos_wVT <- as.vector(wVT)
names(Pesos_wVT) <- colnames(wVT)
Pesos_wVT
##      RADL3      VALE3      VIVT3      WEGE3      YDUQ3 
## 0.18591100 0.12037029 0.47570716 0.21431161 0.00369995
Retorno_wVT <- Return.portfolio(retornos_backtest_ts, Pesos_wVT, rebalance_on = c("quarters"))
names(Retorno_wVT) <- "Portfólio Volatility Timing"

Portfólio Variância Mínima

Vamos substituir a diagonal na matriz de covariâncias com as novas variâncias estimadas utilizando GARCH Assume-se que as covariâncias entre os ativos serão as mesmas.

cov_m <- cov(retornos_estim[,-1])
diag(cov_m) <- var_estimada

Pesos_PMV <- inv(cov(retornos_estim[,-1])) %*% rep(1,5)
Pesos_PMV <- t(Pesos_PMV/sum(Pesos_PMV))
Pesos_PMV <- as.vector(Pesos_PMV)
names(Pesos_PMV) <- colnames(wVT)
Pesos_PMV
##      RADL3      VALE3      VIVT3      WEGE3      YDUQ3 
## 0.25403628 0.14146684 0.32297150 0.25430254 0.02722284
Retorno_PMV <- Return.portfolio(retornos_backtest_ts, Pesos_PMV, rebalance_on = c("quarters"))
names(Retorno_PMV) <- "Portfólio VM"

table.AnnualizedReturns(Backtest, scale = 252, Rf = (1+0.0488)^(1/252)-1)
##                              Portfólio.Volatility.Timing Portfólio.Ingênuo
## Annualized Return                                 0.2787            0.3130
## Annualized Std Dev                                0.3099            0.3414
## Annualized Sharpe (Rf=4.77%)                      0.7074            0.7381
##                              Portfólio.VM
## Annualized Return                  0.3343
## Annualized Std Dev                 0.3162
## Annualized Sharpe (Rf=4.77%)       0.8611

Conclusões

As estratégias de Volatility Timing e de Variância Mínima geraram um retorno absoluto semelhante ao Portfólio Ingênuo, embora o retorno ajustado ao risco tenha sido significativamente melhor no Porfólio de Variância Mínima, sendo o portfólio de Volatility Timing com os piores indicadores, inferiores inclusive ao Portfólio Ingênuo.

Questão 2 - Contribuição de Risco e otimização por CVaR

Calculando a contribuição ao risco

Portfólio Ingênuo

Risco do Portfólio

risco_ingênuo <- (t(Pesos_Ingênuo)%*%cov(retornos_backtest[,-1])%*%Pesos_Ingênuo)^0.5
risco_ingênuo
##            [,1]
## [1,] 0.02201466
cont_marginal_ingênuo <- Pesos_Ingênuo %*% cov(retornos_backtest[,-1]) / as.numeric(risco_ingênuo)
cont_marginal_ingênuo
##           RADL3      VALE3      VIVT3      WEGE3      YDUQ3
## [1,] 0.01636975 0.02099873 0.01429566 0.02474529 0.03366387
cont_individual_ingênuo <- cont_marginal_ingênuo * Pesos_Ingênuo
cont_individual_ingênuo
##           RADL3       VALE3       VIVT3       WEGE3       YDUQ3
## [1,] 0.00327395 0.004199745 0.002859132 0.004949058 0.006732773

Fazendo a soma para checar:

sum(cont_individual_ingênuo)
## [1] 0.02201466

Portfólio Volatility Timing

risco_VT <- (t(Pesos_wVT)%*%cov(retornos_backtest[,-1])%*%Pesos_wVT)^0.5
risco_VT
##            [,1]
## [1,] 0.01958363
cont_marginal_VT <- Pesos_wVT %*% cov(retornos_backtest[,-1]) / as.numeric(risco_VT)
cont_marginal_VT
##           RADL3      VALE3      VIVT3      WEGE3      YDUQ3
## [1,] 0.01608328 0.01897323 0.01915269 0.02387854 0.02195613
cont_individual_VT <- cont_marginal_VT * Pesos_wVT
cont_individual_VT
##            RADL3       VALE3       VIVT3       WEGE3        YDUQ3
## [1,] 0.002990058 0.002283813 0.009111069 0.005117449 8.123661e-05

Fazendo a soma para chegar:

sum(cont_individual_VT)
## [1] 0.01958363

Portfólio Variância Mínima

risco_PMV <- (t(Pesos_PMV)%*%cov(retornos_backtest[,-1])%*%Pesos_PMV)^0.5
risco_PMV
##            [,1]
## [1,] 0.01998546
cont_marginal_PMV <- Pesos_PMV %*% cov(retornos_backtest[,-1]) / as.numeric(risco_PMV)
cont_marginal_PMV
##           RADL3      VALE3      VIVT3      WEGE3      YDUQ3
## [1,] 0.01789978 0.01938922 0.01639256 0.02651184 0.02420689
cont_individual_PMV <- cont_marginal_PMV * Pesos_PMV
cont_individual_PMV
##            RADL3       VALE3       VIVT3       WEGE3        YDUQ3
## [1,] 0.004547193 0.002742932 0.005294331 0.006742027 0.0006589802

Fazendo a soma para chegar:

sum(cont_individual_PMV)
## [1] 0.01998546

Realizando a otimização por CVaR

Juntando as séries temporais dos retornos:

retornos_ts <- cbind(retornos_RADL3, retornos_VALE3, retornos_VIVT3, retornos_WEGE3, retornos_YDUQ3)
Mport <- portfolio.spec( assets = colnames(retornos_ts))

Mport <- add.constraint( portfolio=Mport, type='box', min = 0, max=1 )

ObjSpec = add.objective( portfolio = Mport , type="risk",name="CVaR",
arguments=list(p=0.95,clean="boudt"), enabled=TRUE)

ObjSpec <- add.constraint(portfolio=ObjSpec, type="weight_sum",
min_sum=0.99, max_sum=1.01)
set.seed(15)
out <- optimize.portfolio(R=retornos_ts, portfolio=ObjSpec,
  optimize_method="DEoptim", search_size=2000,
  traceDE=5, itermax=50, trace=TRUE)
## Iteration: 5 bestvalit: 0.024095 bestmemit:    0.236785    0.183478    0.230577    0.297097    0.042974
## Iteration: 10 bestvalit: 0.024095 bestmemit:    0.236785    0.183478    0.230577    0.297097    0.042974
## Iteration: 15 bestvalit: 0.024020 bestmemit:    0.262000    0.108000    0.322000    0.216000    0.084916
## Iteration: 20 bestvalit: 0.023866 bestmemit:    0.316000    0.134000    0.280000    0.176000    0.086000
## Iteration: 25 bestvalit: 0.023866 bestmemit:    0.316000    0.134000    0.280000    0.176000    0.086000
## [1] 0.316 0.134 0.280 0.176 0.086
print(out)
## ***********************************
## PortfolioAnalytics Optimization
## ***********************************
## 
## Call:
## optimize.portfolio(R = retornos_ts, portfolio = ObjSpec, optimize_method = "DEoptim", 
##     search_size = 2000, trace = TRUE, traceDE = 5, itermax = 50)
## 
## Optimal Weights:
## retornos_RADL3 retornos_VALE3 retornos_VIVT3 retornos_WEGE3 retornos_YDUQ3 
##          0.316          0.134          0.280          0.176          0.086 
## 
## Objective Measures:
##    CVaR 
## 0.02387
out$weights
## retornos_RADL3 retornos_VALE3 retornos_VIVT3 retornos_WEGE3 retornos_YDUQ3 
##          0.316          0.134          0.280          0.176          0.086

Agora, em posse dos pesos, podemos comparar o desempenho do portfólio:

Pesos_CVaR <- out$weights
names(Pesos_CVaR) <- colnames(wVT)
Retorno_CVaR <- Return.portfolio(retornos_backtest_ts, Pesos_CVaR, rebalance_on = c("quarters"))
## Warning in Return.portfolio.geometric(R = R, weights = weights, wealth.index =
## wealth.index, : The weights for one or more periods do not sum up to 1: assuming
## a return of 0 for the residual weights
names(Retorno_CVaR) <- "Portfólio CVaR"

table.AnnualizedReturns(Backtest, scale = 252, Rf = (1+0.0488)^(1/252)-1)
##                              Portfólio.Volatility.Timing Portfólio.Ingênuo
## Annualized Return                                 0.2787            0.3130
## Annualized Std Dev                                0.3099            0.3414
## Annualized Sharpe (Rf=4.77%)                      0.7074            0.7381
##                              Portfólio.VM Portfólio.CVaR
## Annualized Return                  0.3343         0.2827
## Annualized Std Dev                 0.3162         0.3112
## Annualized Sharpe (Rf=4.77%)       0.8611         0.7166

Conclusões

Para nossa amostra, que é bastante restrita, a otimização por CVaR não trouxe grandes benefícios em termos de retorno ajustado ao risco, sendo inclusive pior do que os demais portfólios.

Questão 3 - Empresas com práticas ESG x sem práticas ESG

Utilizando de um índice da Bloomberg que mede padrões ESG e selecionaram-se os seguintes ativos:

BRDT3 - 88 pontos BRFS3 - 81 pontos BTOW3 - 80 pontos CIEL3 - 87 pontos ELET3 - 90 pontos

Empresas com poucos padrões ESG:

MGLU3 - 14 pontos MRFG3 - 24 pontos TAEE11 - 9 pontos BPAC11 - 18 pontos BRAP3 - 6 pontos

A pontuação vai de 0 a 100, quanto maior a pontuação melhores os padrões de ESG da firma.

Semelhante aos primeiros 3 exercícios, trazemos os retornos do economática

retornos_Q3 <- read_excel("Retornos_lista_2_ESG_economat.xlsx")
summary(retornos_Q3[,-1])
##      BRDT3               BRFS3                BTOW3          
##  Min.   :-0.152931   Min.   :-1.975e-01   Min.   :-0.169724  
##  1st Qu.:-0.014065   1st Qu.:-1.509e-02   1st Qu.:-0.019511  
##  Median : 0.000000   Median :-1.530e-03   Median :-0.001179  
##  Mean   : 0.001239   Mean   : 4.948e-05   Mean   : 0.002052  
##  3rd Qu.: 0.015265   3rd Qu.: 1.410e-02   3rd Qu.: 0.023484  
##  Max.   : 0.167184   Max.   : 1.628e-01   Max.   : 0.273953  
##      CIEL3               ELET3                MGLU3           
##  Min.   :-0.211765   Min.   :-0.1950515   Min.   :-0.2107707  
##  1st Qu.:-0.020752   1st Qu.:-0.0173416   1st Qu.:-0.0144187  
##  Median :-0.004124   Median : 0.0001359   Median : 0.0007565  
##  Mean   :-0.001246   Mean   : 0.0020422   Mean   : 0.0030623  
##  3rd Qu.: 0.014960   3rd Qu.: 0.0207499   3rd Qu.: 0.0185819  
##  Max.   : 0.234568   Max.   : 0.2071812   Max.   : 0.2352941  
##      MRFG3              TAEE11               BPAC11          
##  Min.   :-0.23890   Min.   :-0.0786989   Min.   :-0.2686332  
##  1st Qu.:-0.01549   1st Qu.:-0.0072086   1st Qu.:-0.0114616  
##  Median : 0.00000   Median : 0.0005211   Median : 0.0006509  
##  Mean   : 0.00166   Mean   : 0.0012527   Mean   : 0.0029749  
##  3rd Qu.: 0.01655   3rd Qu.: 0.0087619   3rd Qu.: 0.0170821  
##  Max.   : 0.25204   Max.   : 0.0637119   Max.   : 0.2789409  
##      BRAP3          
##  Min.   :-0.251553  
##  1st Qu.:-0.009820  
##  Median : 0.001173  
##  Mean   : 0.001657  
##  3rd Qu.: 0.014496  
##  Max.   : 0.170168
retornos_estim_ESG <- retornos_Q3 %>% select(Data, BRDT3, BRFS3, BTOW3, CIEL3, ELET3) %>% dplyr::filter(Data >= "2016-01-01" & Data <= "2020-06-30")

retornos_estim_nao_ESG <- retornos_Q3 %>% select(Data, MGLU3, MRFG3, TAEE11, BPAC11, BRAP3) %>% dplyr::filter(Data >= "2016-01-01" & Data <= "2020-06-30")


retornos_backtest_ESG <- retornos_Q3 %>%  select(Data, BRDT3, BRFS3, BTOW3, CIEL3, ELET3) %>% dplyr::filter(Data >= "2020-07-01" & Data <= "2021-12-31")

retornos_backtest_nao_ESG <- retornos_Q3 %>%  select(Data, MGLU3, MRFG3, TAEE11, BPAC11, BRAP3) %>% dplyr::filter(Data >= "2020-07-01" & Data <= "2021-12-31")

Realizando os backtests

Portfólio Volatility Timing

Fazemos os cálculos para ativos ESG e ativos não ESG e plotamos os retornos e tabela de resultados utilizando o Portfolio Analytics

Primeiro, o portfólio ESG

var_ESG <- diag(cov(retornos_estim_ESG[,-1]))
wVT_ESG <- (1/var_ESG)^4/sum((1/var_ESG)^4)
Pesos_wVT_ESG <- as.vector(wVT_ESG)
names(Pesos_wVT_ESG) <- names(wVT_ESG)
Pesos_wVT_ESG
##      BRDT3      BRFS3      BTOW3      CIEL3      ELET3 
## 0.46988194 0.30411803 0.05128786 0.13031099 0.04440119
Retorno_wVT_ESG <- Return.portfolio(xts(retornos_backtest_ESG[,-1],retornos_backtest_ESG$Data), Pesos_wVT_ESG, rebalance_on = c("quarters"))

names(Retorno_wVT_ESG) <- "Portfólio Volatility Timing ESG"
var_nao_ESG <- diag(cov(retornos_estim_nao_ESG[,-1]))
wVT_nao_ESG <- (1/var_nao_ESG)^4/sum((1/var_nao_ESG)^4)
Pesos_wVT_nao_ESG <- as.vector(wVT_nao_ESG)
names(Pesos_wVT_nao_ESG) <- names(wVT_nao_ESG)
Pesos_wVT_nao_ESG
##        MGLU3        MRFG3       TAEE11       BPAC11        BRAP3 
## 0.0007094066 0.0006590154 0.9942876617 0.0005961118 0.0037478045
Retorno_wVT_nao_ESG <- Return.portfolio(xts(retornos_backtest_nao_ESG[,-1],retornos_backtest_nao_ESG$Data), Pesos_wVT_nao_ESG, rebalance_on = c("quarters"))

names(Retorno_wVT_nao_ESG) <- "Portfólio Volatility Timing Não ESG"

O retorno dos portfólios:

Nesse primeiro momento, o portfólio não ESG superou com bastante folga os demais ativos.

Otimização por CVaR

Primeiro para ativos ESG

retornos_ts_ESG <- cbind(retornos_BRDT3, retornos_BRFS3, retornos_BTOW3, retornos_CIEL3, retornos_ELET3)
Mport <- portfolio.spec( assets = colnames(retornos_ts_ESG))

Mport <- add.constraint( portfolio=Mport, type='box', min = 0, max=1 )

ObjSpec <- add.objective(portfolio=ObjSpec, type="risk_budget_objective",
name="CVaR", max_prisk=0.35,
arguments=list(p=0.95, clean="boudt"))

ObjSpec <- add.constraint(portfolio=ObjSpec, type="weight_sum",
min_sum=0.99, max_sum=1.01)
set.seed(15)
out <- optimize.portfolio(R=retornos_ts_ESG, portfolio=ObjSpec,
  optimize_method="DEoptim", search_size=2000,
  traceDE=5, itermax=50, trace=TRUE)
## Iteration: 5 bestvalit: 0.062567 bestmemit:    0.328000    0.134000    0.212000    0.328000    0.000000
## Iteration: 10 bestvalit: 0.061926 bestmemit:    0.196115    0.086786    0.242936    0.388000    0.079782
## Iteration: 15 bestvalit: 0.061926 bestmemit:    0.196115    0.086786    0.242936    0.388000    0.079782
## [1] 0.19611527 0.08678622 0.24293592 0.38800000 0.07978212
out$weights
## retornos_BRDT3 retornos_BRFS3 retornos_BTOW3 retornos_CIEL3 retornos_ELET3 
##     0.19611527     0.08678622     0.24293592     0.38800000     0.07978212

Agora, em posse dos pesos, calculamos os retornos dos portfólios:

Pesos_CVaR_ESG <- out$weights
names(Pesos_CVaR_ESG) <- c("BRDT3", "BRFS3", "BTOW3", "CIEL3", "ELET3")
Retorno_CVaR_ESG <- Return.portfolio(xts(retornos_backtest_ESG[,-1],retornos_backtest_ESG$Data), Pesos_CVaR_ESG, rebalance_on = c("quarters"))
## Warning in Return.portfolio.geometric(R = R, weights = weights, wealth.index =
## wealth.index, : The weights for one or more periods do not sum up to 1: assuming
## a return of 0 for the residual weights
names(Retorno_CVaR_ESG) <- "Portfólio CVaR ESG"

Repetindo todo o processo, código ocultado para simplificação:

retornos_ts_nao_ESG <- cbind(retornos_MGLU3, retornos_MRFG3, retornos_TAEE11, retornos_BPAC11, retornos_BRAP3)
Mport <- portfolio.spec( assets = colnames(retornos_ts_nao_ESG))

Mport <- add.constraint( portfolio=Mport, type='box', min = 0, max=1 )

ObjSpec <- add.objective(portfolio=ObjSpec, type="risk_budget_objective",
name="CVaR", max_prisk=0.35,
arguments=list(p=0.95, clean="boudt"))

ObjSpec <- add.constraint(portfolio=ObjSpec, type="weight_sum",
min_sum=0.99, max_sum=1.01)
set.seed(15)
out <- optimize.portfolio(R=retornos_ts_nao_ESG, portfolio=ObjSpec,
  optimize_method="DEoptim", search_size=2000,
  traceDE=5, itermax=50, trace=TRUE)
## Iteration: 5 bestvalit: 0.042325 bestmemit:    0.235591    0.002000    0.512000    0.014000    0.230434
## Iteration: 10 bestvalit: 0.041991 bestmemit:    0.178000    0.064000    0.574000    0.002000    0.176000
## Iteration: 15 bestvalit: 0.041991 bestmemit:    0.178000    0.064000    0.574000    0.002000    0.176000
## Iteration: 20 bestvalit: 0.041773 bestmemit:    0.227539    0.013078    0.528177    0.006263    0.216681
## Iteration: 25 bestvalit: 0.041773 bestmemit:    0.227539    0.013078    0.528177    0.006263    0.216681
## [1] 0.227538768 0.013077593 0.528176803 0.006263268 0.216681143
out$weights
##  retornos_MGLU3  retornos_MRFG3 retornos_TAEE11 retornos_BPAC11  retornos_BRAP3 
##     0.227538768     0.013077593     0.528176803     0.006263268     0.216681143

Finalmente, calculando o retorno e plotando o gráfico:

Pesos_CVaR_nao_ESG <- out$weights
names(Pesos_CVaR_nao_ESG) <- c("MGLU3", "MRFG3", "TAEE11", "BPAC11", "BRAP3")
Retorno_CVaR_nao_ESG <- Return.portfolio(xts(retornos_backtest_nao_ESG[,-1],retornos_backtest_nao_ESG$Data), Pesos_CVaR_nao_ESG, rebalance_on = c("quarters"))
## Warning in Return.portfolio.geometric(R = R, weights = weights, wealth.index =
## wealth.index, : The weights for one or more periods do not sum up to 1: assuming
## a return of 0 for the residual weights
names(Retorno_CVaR_nao_ESG) <- "Portfólio CVaR Não ESG"

O retorno dos portfólios:

Conclusões

Em uma primeira análise e provavelmente cheia de viéses, principalmente o de seleção de ativos, os considerados ESG underperformaram os ativos não-ESG de forma significativa. Assim, pode-se concluir, somente com os dados utilizados, que não é considerado como um critério quantitativamente interessante na seleção de ativos para compor o portfólio, quando analisado de forma isolada.

Questão 4 - Markov

Tem-se como aproximação de risco a volatilidade dos retornos dos ativos financeiros líquidos negociados em bolsa. Assim, utilizaria-se da volatilidade para prever em qual estado o índice Ibovespa iria se encontrar, permitindo a venda a descoberto de uma cesta de ativos em momentos de maior volatilidade (e possivelmente correção nos preços) e também a compra em momentos de menor volatilidade (e provavelmente maiores retornos).

Questão 5 - Exercícios, Desafios e Conclusões

Respondendo a questão considerando que se trata da disciplina em si, embora meus desafios e dificuldades sejam bastante similares entre as avaliações, leituras e exercícios.

Acredito que um dos pontos de dificuldade que foram se resolvendo com o tempo era a falta de costume em lidar com as ferramentas presentes no R para a facilitação das análises e também da análise dos resultados por si só. Parte da teoria de finanças que foi aplicada eu desconhecia ou possuía algum conhecimento superficial do que se tratava, não conseguindo exercer uma aplicação prática.

Uma possível análise adicional que poderia ser feita é sobre como melhor estimar os retornos esperandos, tendo em vista que são muito relevantes em algumas das técnicas de otimização. Além disso, estratégias que começam com vários ativos e terminam na seleção de 10 a 15 deles também seriam válidas, embora mais difíceis de serem feitas.