Trabalho de finanças corporativas. UERJ 2024.1 Pedro José Augusto Pessanha. M:202110016011
Nesse arquivo analiso o portifólio composto por 4 empresas:
Weg: empresa brasileira do ramo de energia elétrica
Sony: empresa japonesa de aparelhos eletrônicos e multimídia
IBM: empresa americana de computadores e software
Gerdau: empresa brasileira de siderurgia e mineração
a análise foi realisada com base no capítulo 8 do livro de principios de finanças corporativas assim como nos materiais extras fornecidos para a realização do trabalho
Das 1289 linhas do dataframe, 78 linhas não possuiam dados da Sony ou da IBM (ou de nenhuma das duas), para que o gráfico da evolução dos preços dessas empresas não fosse poluido por essas entradas N/A, filtrei as 78 linhas como indicado abaixo do comentário “removendo missing data”
a obtenção da variância e da média dos retornos de cada ativo será essencial para que possamos considerar o risco de cada ativo comparado ao seu retorno quando montarmos a carteira ótima
#media e desvio padrao das acoes
media_desvpad
## Retorno Desv
## WEGE3.SA 0.062602871 1.757164
## IBM -0.000246194 1.317424
## GGBR4.SA 0.062929249 3.024796
## SONY 0.086318452 1.917806
#covariancia
cov_acoes
## WEGE3.SA IBM GGBR4.SA SONY
## WEGE3.SA 3.0876247 0.3394321 1.4126475 0.5436011
## IBM 0.3394321 1.7356071 0.8807922 0.7837705
## GGBR4.SA 1.4126475 0.8807922 9.1493890 1.3491089
## SONY 0.5436011 0.7837705 1.3491089 3.6779812
obtidos os dados da série dos nossos ativos, podemos calcular os pesos ótimos da carteira segundo algum critério, começaremos calculando a composição da carteira com a menor variância (risco) global possivel
data = as.timeSeries(retornos_ativos)
fronteira_eficiente = fPortfolio::portfolioFrontier(data =as.timeSeries(retornos_ativos))
frontierPlot(fronteira_eficiente,
pch = 20,
cex = 1,
type = "o",
lwd = 2)
monteCarloPoints(fronteira_eficiente,
mcSteps = 1000,
pch = 20,
cex = 0.1,
col = "blue")
data =as.timeSeries(retornos_ativos)
Spec = portfolioSpec()
portifolio_eficiente = efficientPortfolio(data, spec = Spec, constraints = "LongOnly")
pesos_otimos = portifolio_eficiente@portfolio@portfolio$weights
pesos_otimos
## WEGE3.SA IBM GGBR4.SA SONY
## 0.289181290 0.545174841 0.008051781 0.157592088
##considerações sobre os pesos da carteira ótima
essa composição especifica da carteira corresponde ao ponto de menor varianca na fronteira de eficiencia, denominado de Global minimum risk ou Minimum Variance Portfolio (correspondente ao ponto vermelho no gráfico abaixo)
#algumas interpretações importantes
vale notar que as carteiras situadas abaixo do ponto vermelho (o ponto de menor risco da fronteira eficiente), contidas pela seção da fronteira com as rodelas cinzas, são carteiras indesejáveis pelo simples fato de que possuem o mesmo risco das carteiras situadas acima na parte preta da fronteira, porém com um retorno menor.
o ponto azul claro é o ponto da security market line que tangencia a fronteira eficiente, nesse ponto, a razão sharpe (a razão retorno risco) é maximizada
a curva laranja fornece todos os indices de sharpe para cada carteira correspondente da fronteira eficiente
weightsPlot(fronteira_eficiente)
tgPort=tangencyPortfolio(data)
weightsPie(tgPort)
Ao maximizar o sharpe ratio (o ponto de tangência do security market line com a fronteira eficiente) encontramos que o peso atribuido à IBM é igual a zero, isso decorre do retorno médio negativo da empresa
weightedReturnsPie(tgPort)
o retorno médio da carteira é de 7,5%, e pode ser decomposto em 3 partes vistas acima na forma de retornos ponderados (a participação do ativo na carteira vezes o retorno médio do ativo)
maxratioPort=maxratioPortfolio(data)
weightsPie(maxratioPort)
weightedReturnsPie(maxratioPort)
minriskPort=minriskPortfolio(data)
weightsPie(minriskPort)
esse gráfico indica a composição da carteira de variancia minima (ou seja risco minimo)
veremos abaixo, que essa composição possui menor risco comparada a carteira que maximiza a razaão de sharpe, a custa de um menor retorno esperado
essa gráfico de setores corresponde à primeira composição encontrada no programa (o de variancia minima global)
weightedReturnsPie(minriskPort)
apesar da IBM ter recebido a maior alocação do capital nesta carteira (já que tem o menor risco), o seu retorno médio é negativo e bem pequeno, por isso o seu retorno ponderado é quase 0.
além disso a carteira tem retorno de 3,2%, com a desagregação indicada acima
setTargetRisk(Spec) <- 1.5
restricao=c("minW[1:4]=0.01", "maxW[1:4]=0.9")
setSolver(Spec)= "solveRshortExact"
maxreturnPort=maxreturnPortfolio(data, spec = Spec, constraints=restricao)
weightsPie(maxreturnPort)
essa composição nos dá o maior retorno para um dado nivel de risco, nesse caso, um desvio padrão de 1.5
weightedReturnsPie(maxreturnPort)
para um risco de 1.5, o retorno máximo é de 8.2%
o retorno está destrinchhado no gráfico acima
## $from
## GMT
## [1] [2015-01-01] [2015-02-01] [2015-03-01] [2015-04-01] [2015-05-01]
## [6] [2015-06-01] [2015-07-01] [2015-08-01] [2015-09-01] [2015-10-01]
## [11] [2015-11-01] [2015-12-01] [2016-01-01] [2016-02-01] [2016-03-01]
## [16] [2016-04-01] [2016-05-01] [2016-06-01] [2016-07-01] [2016-08-01]
## [21] [2016-09-01] [2016-10-01] [2016-11-01] [2016-12-01] [2017-01-01]
## [26] [2017-02-01] [2017-03-01] [2017-04-01] [2017-05-01] [2017-06-01]
## [31] [2017-07-01] [2017-08-01] [2017-09-01] [2017-10-01] [2017-11-01]
## [36] [2017-12-01] [2018-01-01]
##
## $to
## GMT
## [1] [2016-12-31] [2017-01-31] [2017-02-28] [2017-03-31] [2017-04-30]
## [6] [2017-05-31] [2017-06-30] [2017-07-31] [2017-08-31] [2017-09-30]
## [11] [2017-10-31] [2017-11-30] [2017-12-31] [2018-01-31] [2018-02-28]
## [16] [2018-03-31] [2018-04-30] [2018-05-31] [2018-06-30] [2018-07-31]
## [21] [2018-08-31] [2018-09-30] [2018-10-31] [2018-11-30] [2018-12-31]
## [26] [2019-01-31] [2019-02-28] [2019-03-31] [2019-04-30] [2019-05-31]
## [31] [2019-06-30] [2019-07-31] [2019-08-31] [2019-09-30] [2019-10-31]
## [36] [2019-11-30] [2019-12-31]
##
## attr(,"control")
## attr(,"control")$start
## GMT
## [1] [2015-01-05]
##
## attr(,"control")$end
## GMT
## [1] [2019-12-30]
##
## attr(,"control")$period
## [1] "24m"
##
## attr(,"control")$by
## [1] "1m"
## $horizon
## [1] "24m"
## IBM WEGE3.SA GGBR4.SA SONY
## 2015-12-31 0.00 0.00 0.00 100.00
## 2016-01-31 0.00 100.00 0.00 0.00
## 2016-02-29 100.00 0.00 0.00 0.00
## 2016-03-31 100.00 0.00 0.00 0.00
## 2016-04-30 0.00 100.00 0.00 0.00
## 2016-05-31 100.00 0.00 0.00 0.00
## 2016-06-30 0.00 0.00 0.00 100.00
## 2016-07-31 13.08 0.00 37.18 49.73
## 2016-08-31 48.73 0.00 30.79 20.48
## 2016-09-30 44.33 13.87 14.95 26.85
## 2016-10-31 53.27 25.26 21.47 0.00
## 2016-11-30 73.30 0.00 26.70 0.00
##
## Portfolio Backtesting:
##
## Assets: IBM WEGE3.SA GGBR4.SA SONY
## Benchmark: SPI
## Start Series: 2015-01-05
## End Series: 2019-12-30
## Type: MV
## Cov Estimator: covEstimator
## Solver: solveRquadprog
## Portfolio Windows: equidistWindows
## Horizon: 12m
## Portfolio Strategy: tangencyStrategy
## Portfolio Smoother: emaSmoother
## doubleSmoothing: TRUE
## Lambda: 3m
##
## Portfolio Optimization:
## Optimization Period Target Benchmark Weights
## 2015-01-01 2015-12-31 0.008 -0.025 0 0 0 1 * 1
## 2015-02-01 2016-01-31 -0.015 -0.055 0 1 0 0 * 1
## 2015-03-01 2016-02-29 -0.046 -0.143 1 0 0 0 * 1
## 2015-04-01 2016-03-31 0.023 -0.068 1 0 0 0 * 1
## 2015-05-01 2016-04-30 -0.019 -0.071 0 1 0 0 * 1
## 2015-06-01 2016-05-31 -0.008 -0.049 1 0 0 0 * 1
## 2015-07-01 2016-06-30 0.011 -0.041 0 0 0 1 * 1
## 2015-08-01 2016-07-31 0.117 0.037 0.131 0 0.372 0.497 * 1
## 2015-09-01 2016-08-31 0.149 0.09 0.487 0 0.308 0.205 * 1
## 2015-10-01 2016-09-30 0.128 0.13 0.443 0.139 0.15 0.269 * 1
## 2015-11-01 2016-10-31 0.148 0.095 0.533 0.253 0.215 0 * 1
## 2015-12-01 2016-11-30 0.197 0.085 0.733 0 0.267 0 * 1
## 2016-01-01 2016-12-31 0.187 0.093 0.772 0 0.228 0 * 1
## 2016-02-01 2017-01-31 0.245 0.095 0.786 0 0.214 0 * 1
## 2016-03-01 2017-02-28 0.259 0.16 0.592 0 0.237 0.172 * 1
## 2016-04-01 2017-03-31 0.129 0.102 0.311 0.039 0.209 0.441 * 1
## 2016-05-01 2017-04-30 0.106 0.088 0.267 0 0.068 0.664 * 1
## 2016-06-01 2017-05-31 0.118 0.08 0 0.079 0.271 0.65 * 1
## 2016-07-01 2017-06-30 0.113 0.072 0.109 0 0.278 0.613 * 1
## 2016-08-01 2017-07-31 0.063 0.042 0 0 0.112 0.888 * 1
## 2016-09-01 2017-08-31 0.062 0.041 0 0 0.062 0.938 * 1
## 2016-10-01 2017-09-30 0.035 0.016 0 0 0.182 0.818 * 1
## 2016-11-01 2017-10-31 0.117 0.065 0.113 0 0 0.887 * 1
## 2016-12-01 2017-11-30 0.16 0.12 0 0.165 0 0.835 * 1
## 2017-01-01 2017-12-31 0.154 0.134 0 0.266 0 0.734 * 1
## 2017-02-01 2018-01-31 0.166 0.143 0 0.238 0 0.762 * 1
## 2017-03-01 2018-02-28 0.171 0.127 0 0.126 0 0.874 * 1
## 2017-04-01 2018-03-31 0.125 0.1 0 0.128 0.103 0.769 * 1
## 2017-05-01 2018-04-30 0.131 0.094 0 0.095 0.354 0.551 * 1
## 2017-06-01 2018-05-31 0.148 0.083 0 0.051 0.547 0.402 * 1
## 2017-07-01 2018-06-30 0.103 0.092 0 0.225 0.23 0.545 * 1
## 2017-08-01 2018-07-31 0.121 0.094 0 0.223 0.371 0.406 * 1
## 2017-09-01 2018-08-31 0.119 0.104 0 0.179 0.171 0.65 * 1
## 2017-10-01 2018-09-30 0.176 0.145 0 0.138 0.261 0.601 * 1
## 2017-11-01 2018-10-31 0.136 0.066 0 0.11 0.62 0.27 * 1
## 2017-12-01 2018-11-30 0.121 0.043 0 0 0.643 0.357 * 1
## 2018-01-01 2018-12-31 0.066 0.015 0 0 0.743 0.257 * 1
## 2018-02-01 2019-01-31 0.021 0.02 0 0.618 0.099 0.283 * 1
## 2018-03-01 2019-02-28 0.031 0.003 0 1 0 0 * 1
## 2018-04-01 2019-03-31 0.029 -0.016 0 1 0 0 * 1
## 2018-05-01 2019-04-30 0.044 0.04 0 0.428 0 0.572 * 1
## 2018-06-01 2019-05-31 0.013 0.011 0 0.542 0 0.458 * 1
## 2018-07-01 2019-06-30 0.076 0.046 0 0.921 0.008 0.071 * 1
## 2018-08-01 2019-07-31 0.046 0.035 0 0.775 0 0.225 * 1
## 2018-09-01 2019-08-31 0.009 0.004 0 0.695 0 0.305 * 1
## 2018-10-01 2019-09-30 0.024 -0.001 0 1 0 0 * 1
## 2018-11-01 2019-10-31 0.079 0.064 0.404 0.512 0 0.084 * 1
## 2018-12-01 2019-11-30 0.137 0.096 0.051 0.826 0 0.122 * 1
## 2019-01-01 2019-12-31 0.159 0.157 0.18 0.567 0 0.253 * 1
## Warning in portfolioSmoothing(spiPortfolios, backtest = portfolioBacktest(), : The backtest argument is obsolete and will be
## removed for the next release.
## [1] "smooth ..."
## [1] "aggregate ..."
## [1] "offset ..."
Um backtest de portfólio avalia o desempenho de uma estratégia de investimento ao longo de um período passado. a estratégia é aplicada retroativamente a dados históricos para ver como ela teria se saído em comparação com o mercado ou com outras estratégias.
O backtest de portfólio servem para simular negociações com base em regras específicas e medir o desempenho resultante.
há varias maneiras e critérios para se obter uma carteira ótima de markowitz, podemos maximizar o indice de sharpe, ou minimizar o risco ou maximizar o retorno uma vez fornecidas as metas de retorno e risco respectivamente, podemos até encontrar a composição com o menor risco possivel.