Carregando os retornos (fonte economática):

retornos <- read_excel("Retornos_lista_1.xlsx")

Separando os Portfólios:

portfolio_1 <- retornos %>% select(Data, RADL3, RENT3, SANB11, SBSP3, SULA11, TIMS3, TOTS3) %>% dplyr::filter(Data >= "2020-01-01" & Data <= "2020-12-31")

portfolio_2 <- retornos %>% select(Data, TOTS3, UGPA3, USIM5, VALE3, VIVT3, WEGE3, YDUQ3) %>% dplyr::filter(Data >= "2020-01-01" & Data <= "2020-12-31")

Questão 1

Retorno Esperado dos Ativos - Média dos Retornos

er_portfolio_1 <- colMeans(portfolio_1[,-1])
barplot(er_portfolio_1)

er_portfolio_2 <- colMeans(portfolio_2[,-1])
barplot(er_portfolio_2)

Matriz de Covariâncias e Correlação:

cov_portfolio_1 <- cov(portfolio_1[,-1])
cov_portfolio_2 <- cov(portfolio_2[,-1])
cor(portfolio_1[,-1])
##            RADL3     RENT3    SANB11     SBSP3    SULA11     TIMS3     TOTS3
## RADL3  1.0000000 0.4641709 0.3550447 0.3078389 0.4447711 0.4388609 0.4227747
## RENT3  0.4641709 1.0000000 0.5918910 0.5621843 0.6936409 0.4922572 0.6301302
## SANB11 0.3550447 0.5918910 1.0000000 0.5958579 0.5865947 0.5284372 0.4564747
## SBSP3  0.3078389 0.5621843 0.5958579 1.0000000 0.5608830 0.5883516 0.5546180
## SULA11 0.4447711 0.6936409 0.5865947 0.5608830 1.0000000 0.5022101 0.5688253
## TIMS3  0.4388609 0.4922572 0.5284372 0.5883516 0.5022101 1.0000000 0.4424766
## TOTS3  0.4227747 0.6301302 0.4564747 0.5546180 0.5688253 0.4424766 1.0000000
cor(portfolio_2[,-1])
##           TOTS3     UGPA3     USIM5     VALE3     VIVT3     WEGE3     YDUQ3
## TOTS3 1.0000000 0.5693357 0.5110237 0.5055977 0.3424556 0.5811683 0.4924619
## UGPA3 0.5693357 1.0000000 0.6092341 0.6375674 0.5411667 0.4688973 0.5694562
## USIM5 0.5110237 0.6092341 1.0000000 0.6552936 0.3050041 0.3890319 0.4781248
## VALE3 0.5055977 0.6375674 0.6552936 1.0000000 0.4392942 0.3790580 0.3738296
## VIVT3 0.3424556 0.5411667 0.3050041 0.4392942 1.0000000 0.2913505 0.3417128
## WEGE3 0.5811683 0.4688973 0.3890319 0.3790580 0.2913505 1.0000000 0.4228763
## YDUQ3 0.4924619 0.5694562 0.4781248 0.3738296 0.3417128 0.4228763 1.0000000

Assim, obtemos todos os parâmetros necessários para a estimação. Percebemos uma certa descorrelação entre os ativos e, em função das datas, retornos esperados não tão exagerados (Ibovespa não teve valorização expressiva em 2018).

Questão 2

Definindo o Portfólio de Mínima Variância e o Portfólio Tangente

Taxa livre de risco será de 3,5% a.a.

risk_free <- (1+0.035)^(1/252) - 1

Pesos dos portfólios e plotagem da fronteira - Portfólio 1:

Pesos_PMV_1 <- inv(cov_portfolio_1) %*% rep(1,7)
Pesos_PMV_1 <- Pesos_PMV_1/sum(Pesos_PMV_1)
Pesos_PMV_1
##               [,1]
## RADL3   0.53317911
## RENT3  -0.19288857
## SANB11  0.12548442
## SBSP3   0.06649908
## SULA11  0.13222382
## TIMS3   0.23996248
## TOTS3   0.09553966
Pesos_PT_1 <- inv(cov_portfolio_1) %*% (er_portfolio_1 - risk_free)
Pesos_PT_1 <- Pesos_PT_1/sum(Pesos_PT_1)
Pesos_PT_1
##              [,1]
## RADL3    3.508075
## RENT3   23.295461
## SANB11   2.840828
## SBSP3  -17.895604
## SULA11 -29.312965
## TIMS3    1.996643
## TOTS3   16.567561
##           Risco     Retorno
## RADL3  41.39976  0.08256269
## RENT3  74.69482  0.26366111
## SANB11 56.90083  0.05112432
## SBSP3  59.24377 -0.04117636
## SULA11 54.93407 -0.03471532
## TIMS3  47.06568  0.03310326
## TOTS3  59.91318  0.19091377

Pesos dos portfólios e plotagem da fronteira - Portfólio 1:

Pesos_PMV_2 <- inv(cov_portfolio_2) %*% rep(1,7)
Pesos_PMV_2 <- Pesos_PMV_2/sum(Pesos_PMV_2)
Pesos_PMV_2
##              [,1]
## TOTS3  0.09851024
## UGPA3 -0.23195207
## USIM5  0.02617738
## VALE3  0.21691478
## VIVT3  0.63198349
## WEGE3  0.20744799
## YDUQ3  0.05091819
Pesos_PT_2 <- inv(cov_portfolio_2) %*% (er_portfolio_2 - risk_free)
Pesos_PT_2 <- Pesos_PT_2/sum(Pesos_PT_2)
Pesos_PT_2
##              [,1]
## TOTS3 -0.10882453
## UGPA3 -0.51338784
## USIM5  0.25287615
## VALE3  0.72959653
## VIVT3 -0.05996756
## WEGE3  1.07799641
## YDUQ3 -0.37828916
##          Risco     Retorno
## TOTS3 59.91318  0.19091377
## UGPA3 72.80982  0.08207192
## USIM5 74.45687  0.28617312
## VALE3 55.16606  0.27473582
## VIVT3 42.26350  0.04959583
## WEGE3 57.63268  0.38449341
## YDUQ3 76.28204 -0.02427811

Questões 4 e 5

Sem vendas a descoberto e primeiro conjunto de ativos

Data = timeSeries(ts(portfolio_1[,-1], frequency=12, start=c(2019,1)))

(ndm=dim(Data))
## [1] 249   7
Spec = portfolioSpec() #Novo portf´olio
setTargetReturn(Spec) = mean(colMeans(Data,na.rm=T))
#barplot(colMeans(Data))
setRiskFreeRate(Spec) = risk_free
setNFrontierPoints(Spec) = 50 # padrão 50
Constraints = "LongOnly" 

PMV=minvariancePortfolio(Data, Spec, Constraints)
PT=tangencyPortfolio(Data, Spec, Constraints)
##      RADL3      RENT3     SANB11      SBSP3     SULA11      TIMS3      TOTS3 
## 0.53086353 0.00000000 0.08543060 0.05148291 0.04582307 0.25040363 0.03599625
##     RADL3     RENT3    SANB11     SBSP3    SULA11     TIMS3     TOTS3 
## 0.0000000 0.5833228 0.0000000 0.0000000 0.0000000 0.0000000 0.4166772
##           Risco     Retorno
## RADL3  41.39976  0.08256269
## RENT3  74.69482  0.26366111
## SANB11 56.90083  0.05112432
## SBSP3  59.24377 -0.04117636
## SULA11 54.93407 -0.03471532
## TIMS3  47.06568  0.03310326
## TOTS3  59.91318  0.19091377

Sem vendas a descoberto e segundo conjunto de ativos

Data = timeSeries(ts(portfolio_2[,-1], frequency=12, start=c(2019,1)))

(ndm=dim(Data))
## [1] 249   7
Spec = portfolioSpec() #Novo portf´olio
setTargetReturn(Spec) = mean(colMeans(Data,na.rm=T))
#barplot(colMeans(Data))
setRiskFreeRate(Spec) =  risk_free
setNFrontierPoints(Spec) = 50 # padrão 50
Constraints = "NULL" 

PMV=minvariancePortfolio(Data, Spec, Constraints)
PT=tangencyPortfolio(Data, Spec, Constraints)
##      TOTS3      UGPA3      USIM5      VALE3      VIVT3      WEGE3      YDUQ3 
## 0.06705039 0.00000000 0.00000000 0.14480122 0.58593002 0.20221838 0.00000000
##     TOTS3     UGPA3     USIM5     VALE3     VIVT3     WEGE3     YDUQ3 
## 0.0000000 0.0000000 0.0000000 0.3405208 0.0000000 0.6594792 0.0000000
Data = timeSeries(ts(portfolio_2[,-1], frequency=12, start=c(2019,1)))

(ndm=dim(Data))
## [1] 249   7
Spec = portfolioSpec() #Novo portf´olio
setTargetReturn(Spec) = mean(colMeans(Data,na.rm=T))
#barplot(colMeans(Data))
setRiskFreeRate(Spec) =  risk_free
setNFrontierPoints(Spec) = 50 # padrão 50
Constraints = "NULL" 

PMV=minvariancePortfolio(Data, Spec, Constraints)
PT=tangencyPortfolio(Data, Spec, Constraints)

Pesos_PMV_2_LO <- getWeights(PMV)
Pesos_PMV_2_LO
##      TOTS3      UGPA3      USIM5      VALE3      VIVT3      WEGE3      YDUQ3 
## 0.06705039 0.00000000 0.00000000 0.14480122 0.58593002 0.20221838 0.00000000
Pesos_PT_2_LO <- getWeights(PT)
Pesos_PT_2_LO
##     TOTS3     UGPA3     USIM5     VALE3     VIVT3     WEGE3     YDUQ3 
## 0.0000000 0.0000000 0.0000000 0.3405208 0.0000000 0.6594792 0.0000000
npf <- 60
wm <- -2

w <- sort(unique(c(0, 1, seq(wm,abs(wm), length.out=(npf-2))))) #para FE wm=-2
fe <- matrix(rep(0, 7*length(w)), nrow = length(w), ncol=7, byrow=TRUE)
colnames(fe) <- colnames(portfolio_2[,-1])

for (i in 1:7) fe[,i]=w*Pesos_PMV_2_LO[i]+(1-w)*Pesos_PT_2_LO[i] # carteiras da FE

RetEsp=rep(0,length(w)) #retorno de FE
DesPad=RetEsp #risco na FE
for (j in 1:length(w)){ RetEsp[j]=fe[j,]%*%er_portfolio_2 # retorno esperado
DesPad[j]=((t(fe[j,])%*%cov_portfolio_2%*%fe[j,])^.5)*sqrt(252) } # risco

ISharpe=(RetEsp-risk_free)/DesPad #Ind. Sharpe

dcef=c(which(w==1),which(w==0)) #PVM e PT
pvmpt=cbind(DesPad[dcef],RetEsp[dcef])
cef=RetEsp>=RetEsp[which(DesPad==min(DesPad))]
fem=data.frame(round(cbind(w,fe,DesPad,RetEsp,ISharpe),3)[cef,]) #FE
slim=c(.95*min(DesPad,na.rm=T),max(diag(cov_portfolio_2)^.5,DesPad,na.rm=T)*1.1)
rlim=c(.95*min(RetEsp,er_portfolio_2),max(RetEsp,er_portfolio_2)*1.1)

riscoretorig=data.frame(Risco=((diag(cov_portfolio_2)^.5)*sqrt(252)),Retorno=er_portfolio_2)
riscoretorig*100
##          Risco     Retorno
## TOTS3 59.91318  0.19091377
## UGPA3 72.80982  0.08207192
## USIM5 74.45687  0.28617312
## VALE3 55.16606  0.27473582
## VIVT3 42.26350  0.04959583
## WEGE3 57.63268  0.38449341
## YDUQ3 76.28204 -0.02427811
plot(DesPad,RetEsp,xlim=slim,ylim=rlim,main="")
lines(DesPad[cef],RetEsp[cef],lwd=3,col="red")
points(riscoretorig, pch =19, col = 1:7)
text(riscoretorig, colnames(portfolio_2), col= 1:7, cex = .8)
matpoints(DesPad[dcef],RetEsp[dcef], pch =22, col = c(3,4))
text(DesPad[dcef],RetEsp[dcef], c("PVM","PT"), col= 3:4, cex = 1.5)
grid()

Questão 6

Para estimar o beta, utilizaremos uma regressão linear utilizando fatores disponíveis no NEFIN

fatores <- read_excel("fatores_nefin_lista1.xlsx")

fatores <- fatores %>% select(Data, Risk_free, Rm_minus_Rf, HML, SMB, WML) %>% dplyr::filter(Data >= "2020-01-01" & Data <= "2020-12-31")

dados_capm_p1 <- as.data.frame(matrix(, nrow = ncol(portfolio_1[,-1]), ncol = 2))

retorno_ativos <- portfolio_1[,-1]

for (i in 1:ncol(retorno_ativos)) {
  #Criando um data frame de variáveis temporárias para armazenar retornos
  temp <- data.frame(retorno_ativos[,i],fatores$Risk_free, fatores$Rm_minus_Rf)
  
  #Nomeando essas variáveis
  names(temp) <- c("Ra","Rf","Rm")
  
  #Com base nos nomes, estimando MQO
  linear_model <- lm(I(temp$Ra - temp$Rf) ~ temp$Rm)
  
  #Salvando variáveis
  
  #armazenando os dados
  dados_capm_p1[i, 1] <- names(retorno_ativos)[i]
  dados_capm_p1[i,2] <- as.numeric(linear_model$coefficients[2])
  
}

names(dados_capm_p1) <- c("Ativo", "Beta")
##     Ativo      Beta
## 1   RADL3 0.5118771
## 2   RENT3 1.3058580
## 3  SANB11 1.0864964
## 4   SBSP3 1.0774220
## 5  SULA11 0.9900499
## 6   TIMS3 0.7411569
## 7   TOTS3 0.9854144
## 8   TOTS3 0.9854144
## 9   UGPA3 1.4378060
## 10  USIM5 1.2930576
## 11  VALE3 1.0009915
## 12  VIVT3 0.5557220
## 13  WEGE3 0.8496157
## 14  YDUQ3 1.1622679
Desvio Padrão dos Ativos
apply(portfolio_1[,-1], 2, sd) * sqrt(252)
##     RADL3     RENT3    SANB11     SBSP3    SULA11     TIMS3     TOTS3 
## 0.4139976 0.7469482 0.5690083 0.5924377 0.5493407 0.4706568 0.5991318
apply(portfolio_2[,-1], 2, sd) * sqrt(252)
##     TOTS3     UGPA3     USIM5     VALE3     VIVT3     WEGE3     YDUQ3 
## 0.5991318 0.7280982 0.7445687 0.5516606 0.4226350 0.5763268 0.7628204

Coeficiente de variação = desvio-padrão / média

apply(portfolio_1[,-1], 2, sd)  / er_portfolio_1
##     RADL3     RENT3    SANB11     SBSP3    SULA11     TIMS3     TOTS3 
##  31.58739  17.84613  70.11175 -90.63469 -99.68282  89.56396  19.76901
apply(portfolio_2[,-1], 2, sd)  / er_portfolio_2
##       TOTS3       UGPA3       USIM5       VALE3       VIVT3       WEGE3 
##   19.769005   55.884976   16.389875   12.649006   53.680930    9.442341 
##       YDUQ3 
## -197.927988

Downside Risk

Primeiro Portfólio

downside_risk <- vector(length = 7)
for(i in 2:8){
  ativo <- portfolio_1[[i]]
  ativo <- ativo[fatores$Rm_minus_Rf > 0]
  downside_risk[i - 1] <- mean(ativo)*100
}

names(downside_risk) <- names(portfolio_1[,-1])

downside_risk
##     RADL3     RENT3    SANB11     SBSP3    SULA11     TIMS3     TOTS3 
## 0.9430688 2.1907969 2.0524554 1.6618283 1.5743545 1.3056556 1.5486446

Segundo Portfólio

downside_risk <- vector(length = 7)
for(i in 2:8){
  ativo <- portfolio_2[[i]]
  ativo <- ativo[fatores$Rm_minus_Rf > 0]
  downside_risk[i - 1] <- mean(ativo)*100
}

names(downside_risk) <- names(portfolio_2[,-1])
downside_risk
##     TOTS3     UGPA3     USIM5     VALE3     VIVT3     WEGE3     YDUQ3 
## 1.5486446 2.1657826 2.5029532 1.6967632 0.9658318 1.7969947 2.0201452

CVAR

Primeiro Portfólio

cvar <- vector(length = 8)
for(i in 2:8){
  cvar[i - 1] <- CVaR(portfolio_1[[i]])*100
}

names(cvar) <- names(portfolio_1[,-1])
cvar
##      RADL3      RENT3     SANB11      SBSP3     SULA11      TIMS3      TOTS3 
##  -7.635913  -6.511857  -7.747692  -8.588800 -11.312959  -9.004000  -9.737782 
##       <NA> 
##   0.000000

Segundo Portfólio

cvar <- vector(length = 8)
for(i in 2:8){
  cvar[i - 1] <- CVaR(portfolio_2[[i]])*100
}

names(cvar) <- names(portfolio_2[,-1])
cvar
##      TOTS3      UGPA3      USIM5      VALE3      VIVT3      WEGE3      YDUQ3 
##  -9.737782  -9.116554 -10.431116  -3.849780  -5.484349 -11.992311  -8.212164 
##       <NA> 
##   0.000000

Questão 7 Calculando os Betas dos Portfólios

Betas Questão 2

PMV

sum(dados_capm_p1[,-1] * Pesos_PMV_1)
## [1] 0.6319272
sum(dados_capm_p2[,-1] * Pesos_PMV_2)
## [1] 0.6011888

PT

sum(dados_capm_p1[,-1] * Pesos_PT_1)
## [1] 4.806141
sum(dados_capm_p2[,-1] * Pesos_PT_2)
## [1] 0.654798

Betas Questão 4

PMV Long Only

sum(dados_capm_p1[,-1] * Pesos_PMV_1_LO)
## [1] 0.6864525
sum(dados_capm_p2[,-1] * Pesos_PMV_2_LO)
## [1] 0.7084393

PT Long Only

sum(dados_capm_p1[,-1] * Pesos_PT_1_LO)
## [1] 1.172336
sum(dados_capm_p2[,-1] * Pesos_PT_2_LO)
## [1] 0.9011623

Questão 8

Como prêmio de risco utilizaremos a taxa EMBI+ somada a meta de inflação do BACEN: 2.45% + 4,25% = 6,7%

Retorno Esperado dos Portfólios:

PMV_1

dados_capm_p1[,-1] * 0.067 + 0.035
## [1] 0.06929576 0.12249249 0.10779526 0.10718727 0.10133334 0.08465751 0.10102276
sum(Pesos_PMV_1 * ((dados_capm_p1[,-1] * 0.067 + 0.035)))
## [1] 0.07733912

PMV_2

dados_capm_p2[,-1] * 0.067 + 0.035
## [1] 0.10102276 0.13133300 0.12163486 0.10206643 0.07223338 0.09192425 0.11287195
sum(Pesos_PMV_2 * ((dados_capm_p2[,-1] * 0.067 + 0.035)))
## [1] 0.07527965

PT_1

dados_capm_p1[,-1] * 0.067 + 0.035
## [1] 0.06929576 0.12249249 0.10779526 0.10718727 0.10133334 0.08465751 0.10102276
sum(Pesos_PT_1 * ((dados_capm_p1[,-1] * 0.067 + 0.035)))
## [1] 0.3570115

PT_2

dados_capm_p2[,-1] * 0.067 + 0.035
## [1] 0.10102276 0.13133300 0.12163486 0.10206643 0.07223338 0.09192425 0.11287195
sum(Pesos_PT_2 * ((dados_capm_p2[,-1] * 0.067 + 0.035)))
## [1] 0.07887146

Portfólios Long Only

PMV_1_LO

dados_capm_p1[,-1] * 0.067 + 0.035
## [1] 0.06929576 0.12249249 0.10779526 0.10718727 0.10133334 0.08465751 0.10102276
sum(Pesos_PMV_1_LO * ((dados_capm_p1[,-1] * 0.067 + 0.035)))
## [1] 0.08099232

PMV_2_LO

dados_capm_p2[,-1] * 0.067 + 0.035
## [1] 0.10102276 0.13133300 0.12163486 0.10206643 0.07223338 0.09192425 0.11287195
sum(Pesos_PMV_2_LO * ((dados_capm_p2[,-1] * 0.067 + 0.035)))
## [1] 0.08246543

PT_1_LO

dados_capm_p1[,-1] * 0.067 + 0.035
## [1] 0.06929576 0.12249249 0.10779526 0.10718727 0.10133334 0.08465751 0.10102276
sum(Pesos_PT_1_LO * ((dados_capm_p1[,-1] * 0.067 + 0.035)))
## [1] 0.1135465

PT_2_LO

dados_capm_p2[,-1] * 0.067 + 0.035
## [1] 0.10102276 0.13133300 0.12163486 0.10206643 0.07223338 0.09192425 0.11287195
sum(Pesos_PT_2_LO * ((dados_capm_p2[,-1] * 0.067 + 0.035)))
## [1] 0.09537787

Questões 9 e 10

Portfolio 1

## [1] 249   7
Pesos_PMV_1_Q9 <- getWeights(PMV)
Pesos_PMV_1_Q9 
##      RADL3      RENT3     SANB11      SBSP3     SULA11      TIMS3      TOTS3 
## 0.40000000 0.00000000 0.10031582 0.03862677 0.07913068 0.31548491 0.06644183
Pesos_PT_1_Q9 <- getWeights(PT)
Pesos_PT_1_Q9
##  RADL3  RENT3 SANB11  SBSP3 SULA11  TIMS3  TOTS3 
##    0.2    0.4    0.0    0.0    0.0    0.0    0.4
npf <- 60
wm <- -2

w <- sort(unique(c(0, 1, seq(wm,abs(wm), length.out=(npf-2))))) #para FE wm=-2
fe <- matrix(rep(0, 7*length(w)), nrow = length(w), ncol=7, byrow=TRUE)
colnames(fe) <- colnames(portfolio_1[,-1])

for (i in 1:7) fe[,i]=w*Pesos_PMV_1_Q9[i]+(1-w)*Pesos_PT_1_Q9[i] # carteiras da FE

RetEsp=rep(0,length(w)) #retorno de FE
DesPad=RetEsp #risco na FE
for (j in 1:length(w)){ RetEsp[j]=fe[j,]%*%er_portfolio_1 # retorno esperado
DesPad[j]=((t(fe[j,])%*%cov_portfolio_1%*%fe[j,])^.5)*sqrt(252) } # risco

ISharpe=(RetEsp-risk_free)/DesPad #Ind. Sharpe

dcef=c(which(w==1),which(w==0)) #PVM e PT
pvmpt=cbind(DesPad[dcef],RetEsp[dcef])
cef=RetEsp>=RetEsp[which(DesPad==min(DesPad))]
fem=data.frame(round(cbind(w,fe,DesPad,RetEsp,ISharpe),3)[cef,]) #FE
slim=c(.95*min(DesPad,na.rm=T),max(diag(cov_portfolio_1)^.5,DesPad,na.rm=T)*1.1)
rlim=c(.95*min(RetEsp,er_portfolio_1),max(RetEsp,er_portfolio_1)*1.1)

riscoretorig=data.frame(Risco=((diag(cov_portfolio_1)^.5)*sqrt(252)),Retorno=er_portfolio_1)
riscoretorig*100
##           Risco     Retorno
## RADL3  41.39976  0.08256269
## RENT3  74.69482  0.26366111
## SANB11 56.90083  0.05112432
## SBSP3  59.24377 -0.04117636
## SULA11 54.93407 -0.03471532
## TIMS3  47.06568  0.03310326
## TOTS3  59.91318  0.19091377
plot(DesPad,RetEsp,xlim=slim,ylim=rlim,main="")
lines(DesPad[cef],RetEsp[cef],lwd=3,col="red")
points(riscoretorig, pch =19, col = 1:7)
text(riscoretorig, colnames(portfolio_1), col= 1:7, cex = .8)
matpoints(DesPad[dcef],RetEsp[dcef], pch =22, col = c(3,4))
text(DesPad[dcef],RetEsp[dcef], c("PVM","PT"), col= 3:4, cex = 1.5)
grid()

Portfolio 2

Data = timeSeries(ts(portfolio_2[,-1], frequency=12, start=c(2019,1)))

(ndm=dim(Data))
## [1] 249   7
Spec = portfolioSpec() #Novo portf´olio
setTargetReturn(Spec) = mean(colMeans(Data,na.rm=T))
#barplot(colMeans(Data))
setRiskFreeRate(Spec) = risk_free
setNFrontierPoints(Spec) = 50 # padrão 50
Constraints = c( "maxW = c(0.4, 0.4, 0.4, 0.4, 0.4, 0.4, 0.4)", "maxsumW[1:7] = 1.1")


PMV=minvariancePortfolio(Data, Spec, Constraints)
PT=tangencyPortfolio(Data, Spec, Constraints)
Pesos_PMV_2_Q9 <- getWeights(PMV)
Pesos_PMV_2_Q9 
##      TOTS3      UGPA3      USIM5      VALE3      VIVT3      WEGE3      YDUQ3 
## 0.09029531 0.00000000 0.00000000 0.23735093 0.40000000 0.24798636 0.02436741
Pesos_PT_2_Q9 <- getWeights(PT)
Pesos_PT_2_Q9
##      TOTS3      UGPA3      USIM5      VALE3      VIVT3      WEGE3      YDUQ3 
## 0.03305052 0.00000000 0.14193132 0.40000000 0.02501816 0.40000000 0.00000000
w <- sort(unique(c(0, 1, seq(wm,abs(wm), length.out=(npf-2))))) #para FE wm=-2
fe <- matrix(rep(0, 7*length(w)), nrow = length(w), ncol=7, byrow=TRUE)
colnames(fe) <- colnames(portfolio_2[,-1])

for (i in 1:7) fe[,i]=w*Pesos_PMV_2_Q9[i]+(1-w)*Pesos_PT_2_Q9[i] # carteiras da FE

RetEsp=rep(0,length(w)) #retorno de FE
DesPad=RetEsp #risco na FE
for (j in 1:length(w)){ RetEsp[j]=fe[j,]%*%er_portfolio_2 # retorno esperado
DesPad[j]=((t(fe[j,])%*%cov_portfolio_2%*%fe[j,])^.5)*sqrt(252) } # risco

ISharpe=(RetEsp-risk_free)/DesPad #Ind. Sharpe

dcef=c(which(w==1),which(w==0)) #PVM e PT
pvmpt=cbind(DesPad[dcef],RetEsp[dcef])
cef=RetEsp>=RetEsp[which(DesPad==min(DesPad))]
fem=data.frame(round(cbind(w,fe,DesPad,RetEsp,ISharpe),3)[cef,]) #FE
slim=c(.95*min(DesPad,na.rm=T),max(diag(cov_portfolio_2)^.5,DesPad,na.rm=T)*1.1)
rlim=c(.95*min(RetEsp,er_portfolio_2),max(RetEsp,er_portfolio_2)*1.1)

riscoretorig=data.frame(Risco=((diag(cov_portfolio_2)^.5)*sqrt(252)),Retorno=er_portfolio_2)
riscoretorig*100
##          Risco     Retorno
## TOTS3 59.91318  0.19091377
## UGPA3 72.80982  0.08207192
## USIM5 74.45687  0.28617312
## VALE3 55.16606  0.27473582
## VIVT3 42.26350  0.04959583
## WEGE3 57.63268  0.38449341
## YDUQ3 76.28204 -0.02427811
plot(DesPad,RetEsp,xlim=slim,ylim=rlim,main="")
lines(DesPad[cef],RetEsp[cef],lwd=3,col="red")
points(riscoretorig, pch =19, col = 1:7)
text(riscoretorig, colnames(portfolio_2), col= 1:7, cex = .8)
matpoints(DesPad[dcef],RetEsp[dcef], pch =22, col = c(3,4))
text(DesPad[dcef],RetEsp[dcef], c("PVM","PT"), col= 3:4, cex = 1.5)
grid()

Questão 12

Pegando a série de retornos para o backtest

retornos_teste_1 <- retornos %>% select(Data, RADL3, RENT3, SANB11, SBSP3, SULA11, TIMS3, TOTS3) %>% dplyr::filter(Data >= "2021-01-01" & Data <= "2021-12-31")

R_teste <- xts(retornos_teste_1[,-1], retornos_teste_1$Data)

Portfólio Ingênuo

Pesos_Ingênuo <- matrix(rep(1/7,7), nrow = 20, ncol = 7)

Retorno_Ingênuo <- Return.portfolio(R_teste, as.ts(Pesos_Ingênuo), rebalance_on = c("weeks"))
names(Retorno_Ingênuo) <- "Portfólio Ingênuo"

Portfólio de VM

var <- diag(cov_portfolio_1)
wVT <- (1/var)^4/sum((1/var)^4)

Pesos_wVT <- matrix(wVT, nrow = 20, ncol = 7)

Retorno_wVT <- Return.portfolio(R_teste, as.ts(Pesos_wVT), rebalance_on = c("months"))
names(Retorno_wVT) <- "Portfólio Volatility Timing"

Portfólio de MV

Pesos_PMV_1 <- matrix( Pesos_PMV_1, nrow = 20, ncol = 7)

Retorno_PMV_1 <- Return.portfolio(R_teste, as.ts(Pesos_PMV_1), rebalance_on = c("months"))
names(Retorno_PMV_1) <- "Portfólio VM"
Retornos_backtest <- cbind(Retorno_wVT, Retorno_Ingênuo, Retorno_PMV_1)

table.AnnualizedReturns(Retornos_backtest)
##                           Portfólio.Volatility.Timing Portfólio.Ingênuo
## Annualized Return                             -0.1924           -0.0918
## Annualized Std Dev                             0.2371            0.2456
## Annualized Sharpe (Rf=0%)                     -0.8115           -0.3737
##                           Portfólio.VM
## Annualized Return              -0.0915
## Annualized Std Dev              0.2471
## Annualized Sharpe (Rf=0%)      -0.3702