Analisando a performance de ativos financeiros

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.
________________________

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Transfer Learning: mostrando porque o Python está na ponta do desenvolvimento

A aprendizagem por transferência (transfer learning) é o reuso de um modelo pré-treinado em um novo problema. Portanto, sua utilização torna-se um avanço enorme para a previsão de diferentes tipos de variáveis, principalmente para aquelas ordenadas no tempo. Mostramos nesta postagem o uso do Transfer Learning com o Python para o caso de Séries Temporais.

Criando Tabelas com o Python: mostrando o poder da linguagem sobre o Excel

Nos dias atuais, pessoas que trabalham com dados estão constantemente confrontados com um dilema: criar uma tabela não tão genial no Excel ou manter em um formato ainda pior, como um dataframe, mas mantendo a flexibilidade de obtenção dos dados. Podemos resolver esse grande problema, unindo a flexibilidade e beleza ao usar a biblioteca great_tables do Python.

como podemos ajudar?

Preencha os seus dados abaixo e fale conosco no WhatsApp

Boletim AM

Preencha o formulário abaixo para receber nossos boletins semanais diretamente em seu e-mail.