Análise de performance com Tidyquant

O pacote Tidyquant foi criado com o objetivo de reunir os principais pacotes de análise quantitativa financeira do R em um formato tidy.  No post de hoje, apresentamos o pacote e realizamos um exemplo de análise com ações da Ibovespa.

Introdução ao Tidyquant

O pacote {tidyquant} funciona como um wrapper das funções do principais pacotes do R para análises quantitativas, isto é, ele reutiliza as funções já prontas, realizando mudanças no output para o formato do tidyverse.

Dentre os pacotes que são reunidos, encontram-se:

  • zoo: pacote criado com a finalidade de criar objetos indexados ao tempo, além de fornecer funções para a manipulação de séries no tempo.
  • xts: pacote que funciona como uma extensão do objeto 'ts' do R e também do zoo. Oferece funções para facilitar a manipulação de dados.
  • quantmod: oferece funções para coleta, tratamento e modelagem de séries financeiras. Criado com base nos objetos zoo e xts.
  • TTR: Acrônimo de "Technical Trading Rules". Criado com o objetivo de criar indicadores técnicos e facilitar a criação de janelas móveis. Também criado com base em objetos zoo e xts.
  • PerformanceAnalytics: criado para facilitar a utilização de ferramentas análises econométricas e de performance em séries financeiras. Também utiliza de objetos zoo e xts.
  • Entre outros pacotes que podem ser checados na documentação do pacote.

Todos os pacotes acima foram criados no formato zoo/xts, portanto, apesar de integráveis entre eles, não são diretamente integráveis com o universo do tidyverse, dessa forma, funções como select(), filter(), group_by(), entre outras, não podem ser utilizadas com os objetos criados/utilizados por esses pacotes.

Por isso, criou-se em torno do tidyquant, uma série de funções que possibilitou utilizar todas as funções dos universo zoo/xts, em conjunto com o tidyverse. Dentre as principais funções wrapers do tidyquant, podemos citar:

  • tq_get(): wrapers das funções de coleta de dados financeiros e econômicos - quantmod (Yahoo) , quandl (Nasdaq Data Link), alphavantager (Alpha Vantage), riing (Tiingo) e Rblpapi (Bloomberg).
  • tq_transmute e tq_mutate(): Cria e transforma as colunas já existentes de um data frame com base em uma função dos pacotes utilizados para cálculos e manipulação de dados do formato zoo e xts. O resultado é sempre um objeto tbl/data.frame.
  • tq_performance() e tq_portfolio(): Baseadas nas funções de cálculos de performance e criação de portfolio de ativos financeiros.

Abaixo, iremos seguir um workflow contendo todas essas funções, utilizando os pacotes reunidos no tidyquant.

Coleta de dados de preços

Para a coleta de preços, é possível utilizar o tq_get() para obter dados dos preços de ações e de índices através do yahoo finance, bem como também de informações disponibilizadas pelo Nasdaq Link, como por exemplo taxas de juros.

No código abaixo, capturamos os dados de três ações do Ibovespa, do próprio índice, e também da taxa de retorno do CDI mensal.

Cálculo e Manipulação

Para transformar as colunas, utilizamos a função tq_transmute() como wraper de diversas funções, podemos utilizar a função tq_mutate_fun_options() para obter uma lista de quais funções podemos utilizar.

Para conhecer sobre todas as funções, é recomendado utilizar o helper do Rstudio com ? na função.

Uma vez que tenhamos compreendido as funções, calculamos os excessos de retornos mensais das ações selecionadas e da Ibovespa, isto é, subtraímos os retornos dos ativos pelo retorno da taxa de juros livre de risco.

No código abaixo, utilizamos group_by() para juntar os tickers das ações (visto que estamos lidando com um data frame em formato long) e aplicar o cálculo de função periodReturn() do {quantmod} dentro do argumento mutate_fun. Veja que os argumentos da função podem ser utilizados dentro de tq_transmute(), como por exemplo, period = "monthly", referenciando que a função deve transformar os dados em mensais.

Quando não há mais de uma categoria do data frame, como no caso do objeto ibov_price, não é necessário a utilização de group_by().

Análise de Performance

Para realizar uma analise de performance dos dados, utilizamos a função tq_performance(). Assim, como as funções anteriores, é possível saber os wrapers dessa função através de tq_performance_fun_options().

Como exemplo, é possível calcular uma tabela de valores anualizados dos ativos.

Bem como os valores do CAPM das ações.

Com tq_portfolio(), podemos construir os retornos de um portfolio das três ações acima. Escolhemos os pesos dentro do objeto w para cada ativo.

Com a função tq_portfolio(), selecionamos as colunas de retornos, ativos e o vetor de pesos, e escolhemos wealth.index = TRUE, para que seja retornado o gross returns (retorno bruto acumulado) para obter a riqueza criada pelo portfolio no período.

Em seguida, plotamos os valores do portfolio.

_____________________________________

Se interessou? Veja mais nos nossos cursos de Finanças Quantitativas

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Análise regional do mercado de trabalho com dados do CAGED usando Python

Os microdados dos CAGED fornecem informações detalhadas a nível de cidade, sexo, raça, nível de instrução, idade, salário e outras sobre os trabalhadores formais do Brasil, possibilitando ricas análises regionais de dados. Neste artigo mostramos como acessar, processar e analisar estes dados utilizando o Python.

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.

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.