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

