A regra básica de uma decisão racional é selecionar ativos que aprensentam menor risco e o maior retorno esperado. Para um mesmo nível de risco, um investidor racional seleciona o ativo de maior valor esperado.
Por meio do conceito de diversificação, é possível esperar que ativos com risco possam ser combinados no contexto de uma carteira (portfólio) de forma que se apure um risco menor que aquele calculado para cada um de seus componentes.
A proposta é avaliar uma carteira com 3 ativos, porém esta implementação pode ser adaptada para n títulos.
IMPORTANTE:
Este é um documento do tipo R Markdown. Markdown é um formato simples para formatação de arquivos HTML, PDF, and MS Word documents. Para mais detalhes veja: http://rmarkdown.rstudio.com.
Para usar o knitr, lembre-se de instalar o pacote
São selecionados 3 ações do período de Janeiro de 2014, em seguida acessamos o Yahoo Finance para a coleta dos dados dos ativos que serão analisados.
Tabela de Resumo Estatístico - Medidas de Posição
#Carregando Pacotes
#_______________________________________
library(timeSeries)
library(quantmod)
library(fPortfolio)
library(caTools)
library(dplyr)
library(PerformanceAnalytics)
library(ggplot2)
library(forecast)
library(quadprog)
library(knitr)
# Seleção de Ações
#____________________________
acoes<-c("EMBR3.SA","ABEV3.SA","ITUB4.SA")
# Overview das Ações
#__________________________________
#Carregando os dados de 2014 até a última data disponível Yahoo Finance
portfolioPrices<-NULL
startDate<-"2014-01-02"
portfolioPrices<-getSymbols(acoes,from=startDate,to=Sys.Date())
# excluindo valores NA das séries temporais
EMBR3.SA<-EMBR3.SA[apply(EMBR3.SA,1,function(x) all(!is.na(x))),]
ABEV3.SA<-ABEV3.SA[apply(ABEV3.SA,1,function(x) all(!is.na(x))),]
ITUB4.SA<-ITUB4.SA[apply(ITUB4.SA,1,function(x) all(!is.na(x))),]
# Sumário Estatístico
summary(EMBR3.SA)
## Index EMBR3.SA.Open EMBR3.SA.High EMBR3.SA.Low
## Min. :2014-01-02 Min. :13.91 Min. :14.21 Min. :13.83
## 1st Qu.:2015-03-18 1st Qu.:17.77 1st Qu.:18.03 1st Qu.:17.48
## Median :2016-06-07 Median :20.40 Median :20.58 Median :20.08
## Mean :2016-05-31 Mean :20.72 Mean :21.02 Mean :20.39
## 3rd Qu.:2017-08-15 3rd Qu.:23.47 3rd Qu.:23.82 3rd Qu.:23.05
## Max. :2018-10-25 Max. :30.49 Max. :30.81 Max. :30.09
## EMBR3.SA.Close EMBR3.SA.Volume EMBR3.SA.Adjusted
## Min. :14.01 Min. : 0 Min. :13.66
## 1st Qu.:17.75 1st Qu.: 1638500 1st Qu.:17.35
## Median :20.30 Median : 2263100 Median :19.88
## Mean :20.70 Mean : 2785845 Mean :20.17
## 3rd Qu.:23.42 3rd Qu.: 3168750 3rd Qu.:22.75
## Max. :30.40 Max. :59069704 Max. :29.48
summary(ABEV3.SA)
## Index ABEV3.SA.Open ABEV3.SA.High ABEV3.SA.Low
## Min. :2014-01-02 Min. :14.80 Min. :15.09 Min. :14.54
## 1st Qu.:2015-03-18 1st Qu.:17.07 1st Qu.:17.25 1st Qu.:16.89
## Median :2016-06-07 Median :18.60 Median :18.81 Median :18.40
## Mean :2016-05-31 Mean :18.57 Mean :18.76 Mean :18.38
## 3rd Qu.:2017-08-15 3rd Qu.:19.49 3rd Qu.:19.68 3rd Qu.:19.31
## Max. :2018-10-25 Max. :24.39 Max. :24.56 Max. :24.03
## ABEV3.SA.Close ABEV3.SA.Volume ABEV3.SA.Adjusted
## Min. :15.00 Min. : 0 Min. :13.34
## 1st Qu.:17.05 1st Qu.: 8920600 1st Qu.:15.78
## Median :18.60 Median : 11528900 Median :17.45
## Mean :18.58 Mean : 13233596 Mean :17.44
## 3rd Qu.:19.50 3rd Qu.: 15198400 3rd Qu.:18.50
## Max. :24.27 Max. :287695249 Max. :24.06
summary(ITUB4.SA)
## Index ITUB4.SA.Open ITUB4.SA.High ITUB4.SA.Low
## Min. :2014-01-02 Min. :20.91 Min. :21.11 Min. :20.74
## 1st Qu.:2015-03-18 1st Qu.:27.49 1st Qu.:27.97 1st Qu.:27.15
## Median :2016-06-07 Median :31.16 Median :31.53 Median :30.79
## Mean :2016-05-31 Mean :33.71 Mean :34.13 Mean :33.29
## 3rd Qu.:2017-08-15 3rd Qu.:39.98 3rd Qu.:40.27 3rd Qu.:39.54
## Max. :2018-10-25 Max. :53.23 Max. :53.34 Max. :52.61
## ITUB4.SA.Close ITUB4.SA.Volume ITUB4.SA.Adjusted
## Min. :20.97 Min. : 0 Min. :18.83
## 1st Qu.:27.54 1st Qu.: 9374863 1st Qu.:24.40
## Median :31.20 Median :13060300 Median :28.18
## Mean :33.71 Mean :14209622 Mean :31.75
## 3rd Qu.:39.96 3rd Qu.:17113768 3rd Qu.:39.18
## Max. :53.00 Max. :69944800 Max. :52.71
Candlecharts + Bollinger Bands dos últimos 3 meses Parâmetros da Banda média móvel:20 e Desvio_padrão : 2
Frequentemente, quando as bandas de Bollinger se aproximam da média, o preço das ações de uma companhia sofrem consideráveis alterações. Assim, movimentos fora das bandas propõem a continuação da tendência. Altas e baixas fora das bandas, seguidas de altas e baixas dentro das bandas propõem uma reversão de tendência. Em fato, quando não há tendência definida, a regra é vender quando o preço ficar acima da banda superior e comprar quando o preço ficar abaixo da banda inferior.
Exibição das Séries Temporais a partir de Jan-2014
São exibidos os gráficos com os modelos das Séries Temporais e os modelos previstos utilizando o método ARIMA. A previsão é realizada considerando a série histórica, a partir de jan/2014 do 1º dia de operação de cada mês.O objetivo é prever a abertura do 1º dia útil do mês subsequente ao mês corrente.
# Forecast Preço de Abertura do Mercado para Mês Seguinte
#_______________________________________________________
# Agrupando dados de abertura mensal
EMBR3.SA_MONTH<-to.monthly(EMBR3.SA)
ABEV3.SA_MONTH<-to.monthly(ABEV3.SA)
ITUB4.SA_MONTH<-to.monthly(ITUB4.SA)
# Estimativa de Coeficientes usando ARIMA
mod_EMBR3.SA_MONTH<-auto.arima(EMBR3.SA_MONTH$EMBR3.SA.Close,
stationary = T,seasonal = F,
ic="aic")
mod_ABEV3.SA_MONTH<-auto.arima(ABEV3.SA_MONTH$ABEV3.SA.Close,
stationary = T,seasonal = F,
ic="aic")
mod_ITUB4.SA_MONTH<-auto.arima(ITUB4.SA_MONTH$ITUB4.SA.Close,
stationary = T,seasonal = F,
ic="aic")
Gráficos de Aderência do Modelo a Série Temporal dos Preços de Abertura Mês
Previsões de Abertura de Preços do Mês Seguinte e Parâmetros de Acurácia
erro absoluto médio ( MAE ) erro percentual absoluto médio ( MAPE )
# Previsões de Abertura de Preços do Mês Seguinte e Parâmetros de Acurácia
#erro absoluto médio ( MAE )
#erro percentual absoluto médio ( MAPE )
#EMR3.SA
Predict_EMBR3.SA<-predict(mod_EMBR3.SA_MONTH,n.ahead = 1)
Accuracy_EMBR3.SA<-as.data.frame(accuracy(mod_EMBR3.SA_MONTH))
Accuracy_EMBR3.SA<-Accuracy_EMBR3.SA[,c("MAE","MAPE")]
print(Predict_EMBR3.SA$pred)
## Nov
## 5 18.86593
print(Accuracy_EMBR3.SA)
## MAE MAPE
## Training set 1.31557 6.485852
#ABEV3.SA
Predict_ABEV3.SA<-predict(mod_ABEV3.SA_MONTH,n.ahead = 1)
Accuracy_ABEV3.SA<-as.data.frame(accuracy(mod_ABEV3.SA_MONTH))
Accuracy_ABEV3.SA<-Accuracy_ABEV3.SA[,c("MAE","MAPE")]
print(Predict_ABEV3.SA$pred)
## Nov
## 5 14.63709
print(Accuracy_ABEV3.SA)
## MAE MAPE
## Training set 0.6843669 3.712941
#ITUB4.SA
Predict_ITUB4.SA<-predict(mod_ITUB4.SA_MONTH,n.ahead = 1)
Accuracy_ITUB4.SA<-as.data.frame(accuracy(mod_ITUB4.SA_MONTH))
Accuracy_ITUB4.SA<-Accuracy_ITUB4.SA[,c("MAE","MAPE")]
print(Predict_ITUB4.SA$pred)
## Nov
## 5 47.37961
print(Accuracy_ITUB4.SA)
## MAE MAPE
## Training set 2.358135 6.981341
É exibido o gráfico com o retorno simples sem custo de operação ou qualquer outro tipo de correção ou tributo.
Pré-Processamento e exibição das primeiras e últimas linhas dos fechamentos agrupados
# Pré-Processamento para cálculo de risco e retorno
#_________________________________
# Agrupando os dados de fechamento das ações
dados<-merge(EMBR3.SA,ABEV3.SA,ITUB4.SA)
dados<-as.data.frame(dados[,c("EMBR3.SA.Close",
"ABEV3.SA.Close","ITUB4.SA.Close")])
# Excluindo linhas NA
dados<-dados[apply(dados,1,function(x) all(!is.na(x))),]
# Primeiras linhas da tabela dos fechamentos agrupados
head(dados)
## EMBR3.SA.Close ABEV3.SA.Close ITUB4.SA.Close
## 2014-01-02 19.20 17.3884 23.6814
## 2014-01-03 19.12 17.0184 23.6364
## 2014-01-06 19.10 16.7985 23.6739
## 2014-01-07 19.30 17.3284 23.4936
## 2014-01-08 19.40 17.4984 23.8618
## 2014-01-09 19.10 17.0884 23.1180
tail(dados)
## EMBR3.SA.Close ABEV3.SA.Close ITUB4.SA.Close
## 2018-10-18 18.83 16.65 47.98
## 2018-10-19 18.76 16.86 47.93
## 2018-10-22 18.59 16.82 48.63
## 2018-10-23 18.51 16.63 48.80
## 2018-10-24 17.98 15.89 47.53
## 2018-10-25 18.69 15.00 48.08
GRÁFICO - RETORNO SIMPLES LONGO PRAZO
O campo “Index Date”segue como parâmetro os dia de pregão, logo:
1ano - 250 dias; 6 meses- 125 dias; 1trimestre - 63 dias; 1mês - 21 dias
Serão exibidos matriz de correlação e covariância dos ativos, Fronteira eficiente de Markowitz, a composição com menor variância e a composição ótima do portfólio
GRÁFICO DA FRONTEIRA EFICIENTE DE MARKOWITZ
Matriz de Correlação e Covariância dos Ativos
#Output Correlation and Covariance
cor_matrix <- cor(retorno_fin2)
cov_matrix <- cov(retorno_fin2)
cov_matrix
## EMBR3.SA.Close ABEV3.SA.Close ITUB4.SA.Close
## EMBR3.SA.Close 4.572576e-04 5.569299e-05 5.272684e-05
## ABEV3.SA.Close 5.569299e-05 1.803205e-04 1.165796e-04
## ITUB4.SA.Close 5.272684e-05 1.165796e-04 3.968385e-04
cor_matrix
## EMBR3.SA.Close ABEV3.SA.Close ITUB4.SA.Close
## EMBR3.SA.Close 1.0000000 0.1939534 0.1237782
## ABEV3.SA.Close 0.1939534 1.0000000 0.4358060
## ITUB4.SA.Close 0.1237782 0.4358060 1.0000000
Compasição de Portfólio de Menor Risco
#Get Minimum Variance Port, Tangency Port, etc.
mvp <- minvariancePortfolio(retorno_fin2, spec=portfolioSpec(), constraints="LongOnly")
mvp
##
## Title:
## MV Minimum Variance Portfolio
## Estimator: covEstimator
## Solver: solveRquadprog
## Optimize: minRisk
## Constraints: LongOnly
##
## Portfolio Weights:
## EMBR3.SA.Close ABEV3.SA.Close ITUB4.SA.Close
## 0.2199 0.6336 0.1464
##
## Covariance Risk Budgets:
## EMBR3.SA.Close ABEV3.SA.Close ITUB4.SA.Close
## 0.2199 0.6336 0.1464
##
## Target Returns and Risks:
## mean Cov CVaR VaR
## 0.0000 0.0120 0.0270 0.0194
##
## Description:
## Fri Oct 26 19:56:32 2018 by user: carlos falcao
** Composição da com Melhor Relação Retorno/Risco**
tangencyPort <- tangencyPortfolio(retorno_fin2, spec=portfolioSpec(), constraints="LongOnly")
tangencyPort
##
## Title:
## MV Tangency Portfolio
## Estimator: covEstimator
## Solver: solveRquadprog
## Optimize: minRisk
## Constraints: LongOnly
##
## Portfolio Weights:
## EMBR3.SA.Close ABEV3.SA.Close ITUB4.SA.Close
## 0 0 1
##
## Covariance Risk Budgets:
## EMBR3.SA.Close ABEV3.SA.Close ITUB4.SA.Close
## 0 0 1
##
## Target Returns and Risks:
## mean Cov CVaR VaR
## 0.0006 0.0199 0.0435 0.0315
##
## Description:
## Fri Oct 26 19:56:32 2018 by user: carlos falcao
Apresentação Gráfica da Composição de Ativos
Fim