Sabe-se muito bem que a escolha de ativos financeiros pode ser considerada difícil, afinal, o processo acaba seguindo alguns passos complicados, que talvez muitas pessoas não dominem: definir o objetivo de investimento; escolher a classe de ativos; a política de investimento; definir a forma de alocação dos ativos e por fim, a definição de técnicas para a avaliação de performance dos ativos financeiros escolhidos. Sabe-se que cada pessoa possui formas e gostos diferentes de investir, porém, técnicas de avaliação podem (e devem) superar a subjetividade. No post de hoje mostraremos como podemos simplificar esse processo de avaliação no R.
Assim como nos últimos posts, trabalharemos com quatro ações, apenas para exemplificar o processo. Também trabalharemos com o índice bovespa e com uma taxa de juros livre de risco. Nessa primeira parte iremos coletar o preços e transformar em retornos.
library(quantmod) library(timetk) library(tidyverse) library(PerformanceAnalytics) library(Hmisc)
</pre> # Define os ativos que irão ser coletados tickers <- c("PETR4.SA", "ITUB4.SA", "ABEV3.SA", "JBSS3.SA") # Define a data de início da coleta start <- "2020-12-01" # Realiza a coleta dos preços diários prices <- getSymbols(tickers, auto.assign = TRUE, warnings = FALSE, from = start, src = "yahoo") %>% map(~Cl(get(.))) %>% reduce(merge) %>% `colnames<-`(tickers) # Transfroma os preços diários em mensais prices_monthly <- to.monthly(prices, indexAt = "lastof", OHLC = FALSE) # Calcula os retornos mensais asset_returns <- Return.calculate(prices_monthly, method = "log") %>% na.omit() # Coleta os dados do ibovespa getSymbols("^BVSP", warnings = FALSE, from = start, src = "yahoo") # Calcula os retornos mensais bvsp_returns <- Ad(BVSP) %>% to.monthly(indexAt = "lastof", OHLC = FALSE) %>% Return.calculate(method = "log") %>% na.omit() %>% `colnames<-`("ibovespa") # Define taxa de juros livre de risco rf <- 0.0925/12 <pre>
Feito a coleta e tratamento de dados, podemos enfim analisar nossas escolhas de ativos, mas antes, iremos criar uma função para que possamos exportar nossos resultados do R para uma imagem.
</pre> # Cria uma função para transformar os resultados de um data frame para texto df_to_text <- function (result){ textplot(format.df(t(result), na.blank = TRUE, numeric.dollar = FALSE, cdec = c(3,3,1)), rmar = 0.8, cmar = 2, max.cex = 9, halign = "center", valign = "top", row.valign = "center", wrap.rownames = 20, wrap.colnames = 10, col.rownames = c(rep("darkblue", 5), rep("orange", 2)), mar = c(0, 0, 3, 0)+ 0.1) } <pre>
A análise dos ativos são facilitadas pelas funções do tipo table. do pacote PerformanceAnalytics{}. A primeira que podemos utilizar será a table.Stats, que fornece as estatísticas básicas dos nossos ativos.
</pre> # Resultados estatísticos dos ativos statistic_result <- table.Stats(asset_returns, digits = 3) df_to_text(statistic_result) title(main = list("Estatística dos ativos", cex = 1.5, col = "darkblue")) <pre>
Veja que é retornado diversas informações estatísticas, desde o número de observações, até a assimetria e curtose, cada um com sua devida interpretação.
Outra função de performance se encontra na table.AnnualizedReturns(), que demonstra o retorno, o desvio padrão e o Índice de Sharpe anualizado.
# Resultados das métricas de performance performance_result <- table.AnnualizedReturns(asset_returns, Rf = rf, digits = 2) df_to_text(performance_result) title(main = list("Performance dos ativos", cex = 2, col = "darkblue"))
Por fim, podemos avançar mais nas técnicas utilizadas, sendo possível ver resultados obtidos pelo Capital Asset Pricing Model.
# Resultados do CAPM capm_result <- table.CAPM(asset_returns, bvsp_returns, Rf = rf, digits = 2) df_to_text(capm_result) title(main = list("CAPM", cex = 2, col = "darkblue"))
Existem diversas outras funções úteis da família table. do pacote PerformanceAnalytics{}, tais como table.DownsideRisk(), table.Drawdowns() e também a função table.Arbritary(), que permite montar, a gosto de cada um, um data frame com os resultados.
________________________
(*) Para entender mais sobre Mercado Financeiro e medidas de risco, confira nosso curso de R para o Mercado Financeiro.
________________________