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