Visão Geral e Motivação

Este trabalho é dedicado ao curso de Finanças Corporativas na Graduação Profissional em Ciências Econômicas da Uerj, ministrado pelo professor Rafael Martins.

Neste estudo específico, vamos comparar o conceito de uma carteira de investimentos fundamentada na Teoria Moderna do Portfólio com os conceitos chaves do Livro “Fundamentos da Finanças Corporativa”.

Bibliotecas Utilizadas

Alguns pacotes foram utilizados para a realização do estudo.

library('tidyquant') #usado para buscar cotações e dados financeiros
library('tidyverse') #pacote para tratamento de dados
library('xts') #pacote de manipulação de objetos do tipo XTS
library('PerformanceAnalytics') # pacote com diversas funções de financas
library('fPortfolio') #pacote de fronteira eficiente
library("plotly") #pacote para criação de gráficos
library('RiskPortfolios')

Obtenção dos Dados para o Estudo

Definindo Parâmetros

Primeiramente, serão definidos os principais parâmetros que vão ser utilizadas. Para esse estudo, foi delimitado o período de análise, quais serão os ativos que vão compor a carteira e o rendimento diário do ativo livre de risco.

data_inicio = '2015-01-01' #data de início da análise
data_fim = '2023-12-31' #data de fim da análise
tickers = c('AAPL' , 'AMZN', 'NVDA', 'MSFT') #ações que serão analisadas
taxas_selic <- c(0.1425, 0.1365, 0.07, 0.065, 0.045, 0.02, 0.0925, 0.1375, 0.1325)  # De 2015 a 2023

# Calcular a média aritmética
taxa_media_anual <- mean(taxas_selic)

# Converter a taxa média anual para a taxa diária
di_diario_periodo <- (1 + taxa_media_anual)^(1/252) - 1

#(fonte: https://www.b3.com.br/pt_br/market-data-e-indices/indices/indices-de-segmentos-e-setoriais/serie-historica-do-di.htm)

Download dos Dados

cotacoes = tq_get(tickers , from = data_inicio , to = data_fim) %>% #baixando as cotações usando tidyquant
  dplyr::ungroup() %>% #resolve um pequeno bug da base de dados
  dplyr::select(date , symbol , adjusted) %>% #seleciona as colunas que nos interessam
  tidyr::pivot_wider(names_from = symbol, values_from = adjusted) #coloca os ativos em forma de colunas e os valores de preço ajustado nas linhas
cotacoes %>% rmarkdown::paged_table()

Visualização de Desempenho

Demonstração gráfica e interativa do desempenho das 4 Ações no período de avaliação.

cotacoes.dataframe = as.data.frame(cotacoes)

fig <- plot_ly(cotacoes.dataframe, x = ~date, y = ~AAPL, name = 'AAPL', type = 'scatter', mode = 'lines') 
fig <- fig %>% add_trace(y = ~AMZN, name = 'AMZN') #, mode = 'lines+markers') 
fig <- fig %>% add_trace(y = ~NVDA, name = 'NVDA') #, mode = 'lines+markers') 
fig <- fig %>% add_trace(y = ~MSFT, name = 'MSFT') #, mode = 'lines+markers') 

fig

Usar evidência histórica para avaliar o custo de capital atual envolve analisar as taxas de retorno médias passadas para prever retornos futuros, ajustando por fatores como a taxa livre de risco atual e o prêmio de risco médio histórico. Este método presume que padrões passados persistirão, embora deva-se considerar a volatilidade do prêmio de risco e mudanças nas expectativas econômicas ao longo do tempo. A análise sugere cautela, pois o prêmio de risco real exigido pelos investidores pode divergir das médias históricas devido a mudanças nas condições de mercado e no ambiente econômico global.

Dessa forma, embora o método de Markowitz seja altamente eficaz, o desenvolvimento deste projeto com base apenas em algumas ações listadas na NASDAQ não constitui uma recomendação de investimento segura. Para construir um portfólio robusto utilizando o método de Markowitz, seria prudente ampliar significativamente o número de ações analisadas.

Cálculo da série de retornos diários

A partir das cotações disponíveis, iremos calcular o retorno discreto de cada ação, formando uma série histórica de retornos que indica o rendimento diário de cada ação durante o período estudado.

Esse objeto que será criado vai ser do tipo XTS (eXtensible Time Series)

retornos_ativos = 100*xts::as.xts(cotacoes %>%
                dplyr::select(-date), order.by = cotacoes$date) %>%
  PerformanceAnalytics::Return.calculate(. ,method = 'log') %>%
  na.omit()

retornos_ativos_dataframe = as.data.frame(retornos_ativos)


retornos_ativos %>% as.data.frame(.)%>% rmarkdown::paged_table()

Visualização da Série de Retorno Diário

Segundo gráfico interativo de desempenho, dessa vez analisando o retorno diário.

retornos_ativos_dataframe = as.data.frame(retornos_ativos)
retornos_ativos_dataframe$date = index(retornos_ativos)


fig <- plot_ly(retornos_ativos_dataframe, x = ~date, y = ~AAPL, name = 'AAPL', type = 'scatter', mode = 'lines') 
fig <- fig %>% add_trace(y = ~AMZN, name = 'AMZN') #, mode = 'lines+markers') 
fig <- fig %>% add_trace(y = ~NVDA, name = 'NVDALE') #, mode = 'lines+markers') 
fig <- fig %>% add_trace(y = ~MSFT, name = 'MICROSOFT') #, mode = 'lines+markers') 

fig

O livro Princípios da Finança Corporativa destaca uma realidade crucial: enquanto muitos gestores e economistas confiam em retornos históricos para definir prêmios de risco, o ambiente de investimento atual pode ser substancialmente diferente devido a mudanças econômicas e de mercado. Isso leva à necessidade de uma avaliação crítica sobre se o passado é realmente um preditor confiável do futuro, especialmente em um mundo onde condições econômicas e mercados estão constantemente evoluindo.

Por outro lado, o método de Markowitz provou sua eficácia repetidas vezes, sendo adotado por diversas instituições analíticas. Claramente, quando se dispõe de informações adicionais que transcendem as séries de retorno histórico, é benéfico incorporá-las à análise. No entanto, a robustez do modelo de Markowitz é incontestável.

Criação da Fronteira Eficiente

Retornos Esperados e Volatilidade Diária

Para alcançar a Fronteira Eficiente e identificar a carteira ótima, que maximiza o índice de Sharpe, é essencial calcular os retornos esperados, a volatilidade diária e a matriz de covariância dos ativos. Os retornos esperados são derivados da média da série de retornos, enquanto a volatilidade é calculada a partir do desvio padrão desses retornos.

#media e desvio padrao das acoes
media_desvpad = matrix(data = NA,
                         nrow = length(tickers), 
                         ncol = 2) 

for(i in c(1:length(tickers))) {
  media_desvpad[i,1] = mean(retornos_ativos[,i]) 
  media_desvpad[i,2] = sd(retornos_ativos[,i])
}

media_desvpad = as.data.frame(media_desvpad)

media_desvpad = media_desvpad %>% rename(Retorno = V1) %>%
   rename(Desv = V2)
 
rownames(media_desvpad) = tickers

#montando matriz de covariancia 
cov_acoes = cov(retornos_ativos)
#media e desvio padrao das acoes
media_desvpad
##         Retorno     Desv
## AAPL 0.09115994 1.829963
## AMZN 0.10107960 2.087190
## NVDA 0.20457690 3.009624
## MSFT 0.09852237 1.751788

Matriz de covariância

A matriz de covariância é montada para avaliar as relações de risco e retorno entre os ativos, essencial para a diversificação efetiva da carteira.

Por se tratar de empresas em um setor comum é de se esperar uma correlação alta. Todas essas empresas são grandes participantes no setor de tecnologia. Portanto, são frequentemente afetadas por fatores comuns que impactam o setor, como mudanças regulatórias, inovações tecnológicas, e tendências de consumo digital.

cov_acoes
##          AAPL     AMZN     NVDA     MSFT
## AAPL 3.348764 2.186142 3.170639 2.238470
## AMZN 2.186142 4.356361 3.316489 2.406607
## NVDA 3.170639 3.316489 9.057836 3.302994
## MSFT 2.238470 2.406607 3.302994 3.068763

Se as ações fossem perfeitamente positivamente correlacionadas, a diversificação não reduziria o risco. Contudo, a diversificação pode ser eficaz mesmo quando os ativos têm alguma correlação, desde que não seja perfeitamente positiva.

Ademais, a diversificação é uma boa maneira de se proteger do risco, contudo, não te protege totalmente. A diversificação pode reduzir significativamente o risco não-sistemático, mas o risco sistemático, que afeta todos os tipos de ativos, não pode ser eliminado através da diversificação.

Visualização da Fronteira Eficiente

Com os dados coletados até o momento, podemos construir a Fronteira Eficiente de Markowitz. Para simplificar esse processo, utilizaremos o pacote fPortfolio.

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")

Calculando o Portfólio Eficiente

data = as.timeSeries(retornos_ativos)
Spec = portfolioSpec()
tgPort=tangencyPortfolio(data)

Definindo os Pesos Ótimos

Os pesos ótimos indicam o percentual de cada ação que deverá compor o portfólio tangente

pesos_otimos = tgPort@portfolio@portfolio$weights
pesos_otimos
##       AAPL       AMZN       NVDA       MSFT 
## 0.08192744 0.12908388 0.52377884 0.26520984

Fronteira Eficiente

frontierPlot(fronteira_eficiente)
grid()
minvariancePoints(fronteira_eficiente,col='red',pch=20)
cmlPoints(fronteira_eficiente,col='blue',pch=20)
tangencyPoints(fronteira_eficiente,col='yellow',pch=4)
tangencyLines(fronteira_eficiente,col='blue')
sharpeRatioLines(fronteira_eficiente,col='orange',lwd=2)
twoAssetsLines(fronteira_eficiente,col='green',lwd=2)
singleAssetPoints(fronteira_eficiente,col='black',pch=20)

Gráfico de Alocação de Pesos na Fronteira Eficiente

O gráfico mostra a proporção de cada ativo no portfólio para vários portfólios ao longo da fronteira eficiente. Cada cor representa um ativo diferente, e a altura dos segmentos coloridos indica o peso desse ativo no portfólio.

O eixo X do gráfico representa o retorno esperado do portfólio, enquanto o eixo superior (Target Risk) representa o risco associado a esses retornos. O gráfico permite aos investidores visualizar como a composição do portfólio muda em resposta a diferentes níveis de retorno e risco.

weightsPlot(fronteira_eficiente)

A análise de risco, como parte do processo de avaliação de investimentos, envolve avaliar essas incertezas e determinar a probabilidade de diferentes cenários de resultado. Isso ajuda na tomada de decisões informadas sobre se um investimento deve ser aceito ou rejeitado, com base nos riscos comparados aos retornos potenciais.

Portfólio Tangente

weightsPie(tgPort)

weightedReturnsPie(tgPort)

A carteira tangente é esperada ter um retorno maior que a carteira de equal weights, apesar de assumir um risco mais elevado. No entanto, esse retorno adicional compensa o risco, tornando-a mais eficiente.

De acordo com os princípios de finanças corporativas, a relação entre risco e retorno é central. A ideia de que “quanto maior o risco, maior o retorno esperado” reflete uma das teorias fundamentais da economia e finanças chamada “trade-off risco-retorno”

O que diferencia essa carteira das demais, é que o retorno não escala de acordo com o risco de forma comum. Por se tratar de uma carteira de Markowitz, esse portfólio alcança uma relação entre retorno esperado e risco, superior a qualquer outra.

Portifólio de Risco Mínimo

minriskPort=minriskPortfolio(data)
weightsPie(minriskPort)

Esse portfólio confirma a importância da variação. Por se tratar de um portfólio de risco mínimo, há quem pense que ele deveria ser composto excluvivamente pelo ativo com menor desvio padrão. É verdade que o ativo com menor desvio padrão pode ser predominante na formação desse portfólio, contudo, a variação do portfólio é um importante escudo de proteção contra o risco e não pode ser subestimado.

Ademais a contribuição de uma ação para o risco do portfólio também depende de sua correlação com outros ativos no portfólio, não apenas de seu desvio padrão.

weightedReturnsPie(minriskPort)

Conclusão

Em conclusão, a aplicação da teoria de portfólio de Markowitz demonstrou ser uma ferramenta valiosa na otimização da relação entre risco e retorno esperado de um portfólio. Este estudo prático confirmou que, através da diversificação e da alocação estratégica de ativos com base em suas covariâncias e variâncias, é possível alcançar um equilíbrio mais eficiente. A minimização do risco, sem sacrificar os retornos potenciais.

Contudo, é importante ressaltar que há fatores importantes que não foram mencionados, como o Beta, que é um indicador financeiro que mede a volatilidade ou o risco sistemático de um ativo (como ações) em relação ao mercado como um todo.