Construindo uma dashboard de ações no R

O estudo da análise de dados envolve primordialmente transformar dados 'crus' em informação útil, de forma que seja comunicado de forma mais simples possível para que qualquer usuário possa entender. Um meio interessante de transformar esses dados em uma forma simples de visualização é criando uma dashboard. Esse tipo de painel interativo pode ser criado em diferentes áreas de estudos, o que não é diferente para as finanças. No post de hoje, apresentaremos uma dashboard básica para a análise de ações da bolsa de valores criada no R.

A dashboard deverá conter os principais indicadores dos quais o usuário pretende tirar seus insights. Nesta dashboard criada como exemplo, demonstramos o preço da ação, o retorno mensal, o retorno acumulado e o desvio padrão, sendo este um gráfico móvel no qual é possível ter uma estimativa do risco de mercado das ações analisadas. Podemos também colocar inputs dentro dessas dashboard de forma que seja possível ter mais flexibilidade.

Como podem ver na imagem, a barra lateral possui 3 inputs: o nome do ticker da ação (que pode ser encontrado no site do Yahoo Finanças), a data inicial de análise e a janela móvel do desvio padrão (e que funciona somente neste indicador).

Você pode conferir o resultado neste link.

Para criar a dashboard utilizou-se do seguinte YAML:

Com os seguintes pacotes:


library(tidyverse)
library(highcharter)
library(tidyquant)
library(timetk)
library(scales)

A criação da dashboard seguiu como uma junção da Flexdashboard e Shiny, além dos gráficos serem criados através do Highchart.

Sidebar {.sidebar}
=====================================

# Construção dos inputs da barra lateral do dashboard

fluidRow(
column(6,
textInput("stock1", "Stock 1", "VIVT3.SA"))
)


fluidRow(
column(6,
textInput("stock2", "Stock 2", "ITSA4.SA"))
)

fluidRow(
column(6,
textInput("stock3", "Stock 3", "TAEE4.SA"))
)

fluidRow(
column(6,
textInput("stock4", "Stock 4", "BRSR6.SA"))
)

fluidRow(
column(7,
dateInput("date", "Starting Date", "2013-01-01", format = "yyyy-mm-dd"))
)

fluidRow(
column(6,
numericInput("window", "Window", 6, min = 3, max = 20, step = 1))
)

actionButton("go", "Submit")


### Coleta, tratamento e calculos

# Coleta os preços das ações
prices <- eventReactive(input$go, {

symbols <- c(input$stock1, input$stock2, input$stock3, input$stock4)

getSymbols(symbols, src = 'yahoo', from = input$date,
auto.assign = TRUE, warnings = FALSE) %>%
map(~Ad(get(.))) %>%
reduce(merge) %>%
`colnames<-`(symbols)
})

# Transforma os preços xts em mensal

prices_monthly <- eventReactive(input$go, {

prices <- prices()

to.monthly(prices(),
indexAt = "last",
OHLC = FALSE)
})

# Calcula os retornos mensais em xts e wide

asset_returns_xts <- eventReactive(input$go, {

asset_returns_xts <- na.omit(Return.calculate(prices_monthly(),
method = "log"))
})

# Transforma os preços em tibble, mensal e long

prices_monthly_tbl_long <- eventReactive(input$go, {
prices <- prices()

asset_returns_long_tbl<- prices %>%
to.monthly(indexAt = "last",
OHLC = FALSE) %>%
tk_tbl(preserve_index = TRUE,
rename_index = "date") %>%
gather(asset,
prices,
-date)
})

# Calcula os retornos mensais em tibble e long

asset_returns_long_tbl <- eventReactive(input$go, {

prices_monthly_tbl_long <- prices_monthly_tbl_long()

prices_monthly_tbl_long %>%
group_by(asset) %>%
mutate(returns =
(log(prices) - log(lag(prices)))
) %>%
na.omit()
})

# Calcula o retornos acumulado

asset_acum_return_tbl <- eventReactive(input$go, {
asset_returns_long_tbl <- asset_returns_long_tbl()

asset_acum_return_tbl <- asset_returns_long_tbl %>%
group_by(asset) %>%
mutate(acum_return = cumsum(returns))
})

# Calcula o desvio padrão móvel das ações (volatilidade)

rolling_sd_tbl <- eventReactive(input$go, {
rolling_sd_tbl <-
rollapply(asset_returns_xts(),
FUN = sd,
width = input$window) %>%
na.omit() %>%
tk_tbl(preserve_index = TRUE,
rename_index = "date") %>%
gather(asset,
sd,
-date)
})

 

Painel de Acompanhamento
=====================================

Row {data-height=600, .tabset}
-----------------------------------------------------------------------

### Preços

renderHighchart({

hchart(prices_monthly_tbl_long(), type = "line",
hcaes(x = date,
y = prices,
group = asset)) %>%
hc_yAxis(opposite = FALSE) %>%
hc_tooltip(pointFormat = '{point.x: %Y-%m-%d}
R${point.y:.4f}')

})

### Retornos mensais

renderHighchart({

hchart(asset_returns_long_tbl(), type = "column",
hcaes(x = date,
y = returns * 100,
group = asset)) %>%
hc_yAxis(opposite = FALSE,
labels = list(format = "{value}%")) %>%
hc_tooltip(pointFormat = '{point.x: %Y-%m-%d}
{point.y:.4f}% ')

})

### Retornos Acumulados

renderHighchart({

hchart(asset_acum_return_tbl(), type = "line",
hcaes(x = date,
y = acum_return * 100,
group = asset)) %>%
hc_yAxis(opposite = FALSE,
labels = list(format = "{value}%")) %>%
hc_tooltip(pointFormat = '{point.x: %Y-%m-%d}
{point.y:.4f}% ')

})

Row {.tabset .tabset-fade}
-------------------------------------

### Desvio Padrão Móvel

renderHighchart({

hchart(rolling_sd_tbl(), type = "line",
hcaes(x = date,
y = sd * 100,
group = asset)) %>%
hc_yAxis(opposite = FALSE,
labels = list(format = "{value}%")) %>%
hc_tooltip(pointFormat = '{point.x: %Y-%m-%d}
{point.y:.4f}% ')

})

Quer aprender a criar dashboards financeiros? Veja nosso Curso de R para o Mercado Financeiro e Produção de Dashboards.

Compartilhe esse artigo

Facebook
Twitter
LinkedIn
WhatsApp
Telegram
Email
Print

Comente o que achou desse artigo

Outros artigos relacionados

Como avaliar modelos de IA na previsão macroeconômica?

Descubra como economistas e cientistas de dados estão combinando econometria e inteligência artificial para aprimorar previsões macroeconômicas. Neste post, você vai entender as principais etapas de avaliação de modelos — da preparação dos dados à validação cruzada — e conhecer as métricas e técnicas que revelam quais métodos realmente entregam as melhores previsões. Uma leitura essencial para quem quer compreender o futuro da análise econômica orientada por dados.

Análise exploratória e seleção de séries temporais econômicas para modelagem

Quer entender como transformar dados econômicos brutos em previsões macroeconômicas precisas? Neste post, mostramos passo a passo como realizar a análise exploratória e seleção de séries temporais com Python — desde o tratamento de dados e remoção de multicolinearidade até a escolha das variáveis mais relevantes usando técnicas de machine learning e econometria. Um guia essencial para quem quer unir teoria econômica e inteligência artificial na prática da previsão macroeconômica.

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

Boletim AM

Receba diretamente em seu e-mail gratuitamente nossas promoções especiais e conteúdos exclusivos sobre Análise de Dados!

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.