Nos últimos anos há uma coleção de comparadores de fundos de investimentos aparecendo na internet, ainda que a coleta dos dados não seja algo trivial. A CVM avançou bastante em liberar os dados dos fundos em um site http://www.cvm.gov.br/menu/regulados/fundos/consultas/fundos.html, no qual você consegue dados cadastrais, cotas diárias, informações do administrador, do gestor e etc.
É possível fazer a raspagem desses dados por conta própria, mas há também uma alternativa mais fácil (e que por ora está de graça): O API da Okanebox. Abaixo alguns exemplos que criei para baixar os dados e as possibilidades rápidas do que fazer com ele.
Para baixar o dado de um fundo, é necessário saber o seu CNPJ. No script abaixo baixo o zip da CVM que é atualizado diariamente com os dados dos fundos, sobretudo seu CNPJ. Nesse sentido, basta buscar o nome do fundo na função abaixo (sempre com letra maiúscula) e ver o fundo do seu interesse na tabela. Claro, você pode simplesmentar Googlar e pegar o CNPJ.
library(httr)
library(xts)
library(dplyr)
library(PerformanceAnalytics)
library(quantmod)
library(stringr)
library(tidyr)
library(knitr)
NomeFundo<-function(x){
temp <- tempfile()
download.file("http://dados.cvm.gov.br/dados/FI/CAD/DADOS/cad_fi_hist.zip",temp)
data <- read.table(unz(temp, "cad_fi_hist_denom_social.csv"),sep=';')%>% filter(str_detect(V3, x))%>% select(V1,V3)
}
df<-NomeFundo('VERDE')## função para buscar o nome
DT::datatable(head(df), editable = 'cell')
Agora utilizando o API, coletando as cotas e demais informações do fundo desde 2017
cnpj<-23243536000133 ## esse é o CNPJ do Long Bias do Verde Asset
data_inicial<-20170101 #de 2017 para frente
data_final<-20201210 #provavelmente não terá informações do dia corrente, há delay na CVM
fundosBR<-function(cnpj,data_inicial,data_final){
df<-GET(paste0('https://www.okanebox.com.br/api/fundoinvestimento/hist/',cnpj,'/',data_inicial,'/',data_final,'/')) %>%
content() %>% do.call(rbind.data.frame,.)
df<-xts(df[,4:8],order.by = as.POSIXct(df$DT_COMPTC))
colnames(df)<-c('Quota','PL_liquido','Capt_dia','Resg_dia','N_cotista')
return(df)
}
base1<-fundosBR(cnpj,data_inicial,data_final) # baixando os dados do CNPJ e do período selecionado
head(base1)
## Quota PL_liquido Capt_dia Resg_dia N_cotista
## 2017-02-21 1.0000000 10000000 1e+07 0 1
## 2017-02-22 0.9999185 9999185 0e+00 0 1
## 2017-02-23 0.9967447 9967447 0e+00 0 1
## 2017-02-24 0.9845934 9845934 0e+00 0 1
## 2017-03-01 0.9874963 9874963 0e+00 0 1
## 2017-03-02 0.9817820 9917820 1e+05 0 2
Pronto, agora que você tem a evolução no tempo dos dados de Cota, Patrimônio Líquido, Captação Diária e número de Cotista, o céu é o limite.
Agora aproveitando o pacote \(PerformanceAnalytics\) vamos ver algumas funções básicas.
chart.CumReturns(dailyReturn(base1$Quota),main="Cumulative Returns",begin='2020-01-01') ## retorno acumulado em 2020
chart.Drawdown(dailyReturn(base1$Quota))## evolução do drawdown
chart.RollingPerformance(dailyReturn(base1$Quota),width = 252) #performance móvel em 252 dias (1 ano)
charts.PerformanceSummary((dailyReturn(base1$Quota)),main='Sumário do Fundo') ## gráfico que summariza tudo
n = table.Drawdowns(dailyReturn(base1$Quota),top=5)
DT::datatable((n), editable = 'cell')
chart.Events(Drawdowns(dailyReturn(base1$Quota)),
dates = n$Trough,
prior=max(na.omit(n$"To Trough")),
post=max(na.omit(n$Recovery)),
lwd=2, colorset=redfocus, legend.loc=NULL,
main = "Piores Drawdowns")
Agora a criatividade é com vocês. Há o pacote \(quantmod\) para baixar cotação de moedas e índices, dá para estimar vários outros indicadores de performance e de alocação.