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 Criar um Agente Analista Financeiro com LangGraph e Dados da CVM

Este post apresenta a construção de um sistema multiagente para análise financeira automatizada com LangGraph. A partir dos dados das demonstrações contábeis da CVM, mostramos como agentes especializados podem interpretar perguntas, consultar bancos de dados e gerar análises financeiras, simulando o trabalho de um analista.

O que é e como funcionam Sistemas Multi-Agentes

Sistemas multi-agentes (MAS) representam uma nova forma de estruturar aplicações de inteligência artificial, especialmente úteis para lidar com problemas complexos e distribuídos. Em vez de depender de um único agente generalista, esses sistemas são compostos por múltiplos agentes especializados que colaboram, competem ou se coordenam para executar tarefas específicas. Neste post, explicamos o que são os MAS, seus principais componentes (como LLMs, ferramentas e processos) e as arquiteturas mais comuns.

Como criar um Agente de IA coletor de dados

A tecnologia de agentes de IA está democratizando o acesso e a manipulação de dados econômicos complexos, tornando-a acessível mesmo para aqueles sem experiência em programação. Neste post discutimos a criação de agentes de IA para coletar dados econômicos brasileiros usando linguagem natural, como "Qual é a expectativa do IPCA para 2025?".

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.