Criando uma função de correlação móvel entre ativos financeiros

No post de hoje, iremos mostrar como é possível calcular a correlação móvel entre ativos financeiros. O objetivo do calculo é acompanhar a relação entre os ativos ao longo do tempo, de forma que, para quem possua uma carteira de ativos saiba quais deles eventualmente se tornem negativamente correlacionado, e portanto, tenham uma carteira diversificada e com baixo risco.

Para quem não sabe, a correlação mede a associação linear entre duas variáveis, ou seja, se há uma correlação positiva entre dois ativos, então ambos, eventualmente se direcionam para a mesma direção, e vice-versa. Importante lembrar que isto não significa qualquer ideia de causalidade.

Para uma carteira de investimentos, estamos obviamente interessados em ativos que se correlacionam negativamente, afim de diminuir o risco da carteira.

Carregamos os pacotes essenciais.

library(Quandl)
library(quantmod)
library(tidyverse)
library(timetk)
library(tidyquant)

Para nosso código, primeiro, devemos buscar os preços dos nossos ativos. Neste post, buscamos 3 ações, o dólar e também a ibovespa.

# Define os tickers das ações coletadas

tickers = c('PETR4.SA', 'ABEV3.SA', 'BBDC4.SA')

# Define o período da coleta

start = '2016-01-01'

# Coleta os preços das ações

prices = getSymbols(tickers, src='yahoo',
                    from= start,
                    warning=FALSE) %>%
  map(~Ad(get(.))) %>%
  reduce(merge) %>%
  `colnames<-` (tickers)

# Transforma os preços diários em mensais, e os transforma em tibble

prices_monthly <- prices %>% 
  to.monthly(indexAt = "lastof",
             OHLC = FALSE) %>% 
  tk_tbl(preserve_index = TRUE,
         rename_index = "date")


# Coleta os dados do IBOVESPA

ibov <- getSymbols("^BVSP", src = "yahoo",
                   from = start,
                   warning = FALSE,
                   auto.assign = FALSE) %>% 
  Ad()


# Transforma o IBOV diário em mensal, e o transforma em tibble

ibov_monthly <- ibov %>% 
  to.monthly(indexAt = "lastof",
             OHLC = FALSE) %>% 
  tk_tbl(preserve_index = TRUE,
         rename_index = "date")


# Coleta o preço do Dólar e o transforma em tibble

cambio = Quandl('BCB/3697',
                order='asc', 
                start_date = start) %>% 
  as.tibble()
  


# Junta todos os preços em um tibble

all_prices <- ibov_monthly %>% 
  inner_join(cambio, by = c("date" = "Date")) %>% 
  inner_join(prices_monthly) %>% 
  rename(cambio = "Value",
         ibov = "BVSP.Adjusted") 

Após realizar toda a coleta e tratamento dos dados, iremos calcular os retornos desses ativos.

# Calcula o retorno contínuo

returns_long <- all_prices %>% 
  pivot_longer(names_to = "asset",
               values_to = "prices",
               -date) %>% 
  group_by(asset) %>% 
  tq_transmute(mutate_fun = periodReturn,
               type = "log")

Por fim, criamos a nossa função de correlação móvel, utilizando a função slidify do pacote {timetk}. Em seguida, calculamos a correlação dos ativos em relação ao Ibovespa e visualizamos no gráfico o resultado.

# Cria uma função de correlação móvel

rolling_cor <- slidify(~cor(.x, .y, use = "complete.obs"), .period = 6, .align = "right")


# Transforma em formato wide

returns_wide <- returns_long %>% 
  pivot_wider(names_from = "asset",
                       values_from = "monthly.returns") 


# Calcula a correlação móvel de cada ativo em relação ao Ibovespa

corr_ibov <- returns_wide %>% 
  transmute(date  = date,
    Dólar = rolling_cor(ibov, cambio),
         PETR4 = rolling_cor(ibov, PETR4.SA),
         ABEV3 = rolling_cor(ibov, ABEV3.SA),
         BBDC4 = rolling_cor(ibov, BBDC4.SA))


# Plota

corr_ibov %>% 
  drop_na() %>% 
  pivot_longer(-date) %>% 
ggplot(aes(x = date, y = value, color = name))+
  geom_line(size = 1)+
  theme_minimal()+
  labs(x = "",
       y = "Correlação",
       title = " Correlação móvel com o IBOVESPA Mensal",
       cation = "Dados: Yahoo Finance e Banco Central do Brasil | Elaboração: analisemacro.com.br",
       color = "Ativo")

________________________

(*) Quer saber mais sobre Mercado Financeiro? Confira nossos curso de Finanças Quantitativas.

________________________

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.

Análise do Censo Demográfico com o R

Como podemos analisar dados do Censo Demográfico para produzir pesquisas e implementar políticas públicas? Mostramos nesta postagem o resultado de uma breve análise dos dados preliminares do Censo Demográfico de 2022 usando o R.

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.