Ir para o conteúdo principal

Analisando o mercado de cryptomoedas com R

Analise cryptomoedas no R com os pacotes coinmarketcapr e jsonlite: extraia preços do Bitcoin, gere treemaps e monte um monitor de cotação em tempo real.

⚠️ Aviso (2026): Os pacotes e APIs usados neste post são de 2017 e foram descontinuados: o coinmarketcapr passou a exigir chave de API paga e a API da BlinkTrade foi encerrada. A lógica de extrair, tratar e monitorar dados no R ainda é válida — veja a versão moderna com agentes de IA em Equipe Multiagente para Análise do Bitcoin.

As cryptomoedas

Quem acompanha os jornais já deve ter notado que o mercado de cryptomoedas vem crescendo rapidamente, e grandes canais de informação já cobrem o assunto. A cotação do Bitcoin já pode ser acompanhada nos maiores sites do mercado financeiro. Diante de tantas novidades, vale entender como a programação pode ajudar a explorar temas tão recentes.

Surge então a pergunta: como o R pode nos ajudar a analisar cryptomoedas? Vejamos o que encontramos no CRAN.

TL;DR

  • O pacote coinmarketcapr extrai preço e capitalização de mercado das principais cryptomoedas.
  • O jsonlite consome APIs de cotação direto no R.
  • Com um loop simples dá para montar um monitor de preços do Bitcoin que atualiza sozinho.

Pacote coinmarketcapr

Tem disponível no CRAN o pacote coinmarketcapr que nos permite extrair e monitorar o preço e o limite de mercado das cryptomoedas da API do coinmarketcap.com

Primeiramente precisamos instalar o pacote:

install.packages("coinmarketcapr")
library(coinmarketcapr)

Maiores ocorrências

O pacote conta com a função plot_top_5_currencies() que já apresenta de brinde um gráfico de barras com as 5 principais cryptomoedas do mercado, veja:

plot_top_5_currencies()
Gráfico de barras das 5 maiores cryptomoedas por capitalização, feito com coinmarketcapr

Detalhes do mercado

Os resultados ficam disponíveis para quem quiser interpretar. É importante notar que isso não nos da a imagem de como o mercado está dividido entre várias cryptomoedas, então vamos obter os dados completos de várias cryptomoedas:

mercado_hoje <- get_marketcap_ticker_all()
head(mercado_hoje[,1:8])

Tabela com dados de mercado de várias cryptomoedas no R

Visualmente

Após extrair os dados completos de várias cryptomoedas, vamos visualizar essa distribuição através de um treemap com os códigos:

library(treemap)
base <- na.omit(mercado_hoje[,c('id','market_cap_usd')])
base$market_cap_usd <- as.numeric(base$market_cap_usd)
base$formatted_market_cap <-  paste0(base$id,'\n','$',format(base$market_cap_usd,big.mark = ',',scientific = F, trim = T))
treemap(base, index = 'formatted_market_cap', vSize = 'market_cap_usd', title = 'Cryptocurrency Market Cap', fontsize.labels=c(12, 8), palette='RdYlGn')
Treemap da capitalização de mercado das cryptomoedas

Vou deixar as interpretações para os analistas de mercado, mas como um cientista de dados, muitos (muitos mesmo) insights podem ser extraídos dos dados acima e pode ser interessante analisar esse mercado

Pacote jsonlite para avaliar Bitcoins

O pacote jsonlite disponível no CRAN trás série de recursos flexíveis, robustos e de alto desempenho para trabalhar o R com JSON conjuntamente. O pacote é capaz de interagir com API da Web e isso vai ser o recurso que precisamos aqui.

Trazendo o foco para os Bitcoins, existe mais de uma maneira de se extrair os dados do mercado que possam trazer grandes insights. Vamos conferir aqui como este pacote pode ajudar nesta tarefa.

Inicialmente precisamos instalar e carregar o pacote:

#install.packages("jsonlite")
library(jsonlite)
suppressMessages(library(tidyverse)) #Para manipulação de dados

Com o pacote carregado já podemos realizar uma consulta diretamente de dentro do R com o comando safe_fromJSON().

Os preços da bitcoin são fornecidos pela API da BlinkTrade que é bem simples usar, basta pegar o json que a url do código abaixo solta.

Aproveito e dou um tapinha para deixar em forma de data.frame e com a data de consulta junto.

safe_fromJSON = safely(fromJSON, as.numneric(NA))
nova_consulta_list = safe_fromJSON("http://api.blinktrade.com/api/v1/BRL/ticker?crypto_currency=BTC")

nova_consulta = nova_consulta_list$result %>%
  as.tibble %>%
  mutate(timestamp = lubridate::now())

nova_consulta

Loop infinito para acompanhar os preço

Existe um universo de infinitas possibilidades para acompanhar estes dados, trago aqui um loop infinito (while(TRUE)) composto por um , um data.frame histórico.RData, um tempo entre uma consulta e outra (30 segundos por padrão) e a consulta propriamente dita. Veja:

#Inicializa o historico.RData
historico = nova_consulta
save(historico, file = "historico.RData")

Dando início ao loop:

  #loop infinito
  while(TRUE){
    #pega a cotacao do bitcoin brasil (BTCBRL) da API do blinktrade
    nova_consulta_list = safe_fromJSON("http://api.blinktrade.com/api/v1/BRL/ticker?crypto_currency=BTC")
  
    #verifica se a API retornou uma lista
    if("list" %in% class(nova_consulta_list$result)){
      nova_consulta = nova_consulta_list$result %>%
        as.tibble %>%
        mutate(timestamp = lubridate::now())
      #
      #
      # espaco reservado para as regras!
      #
      #
      #guarda a consulta
      historico = bind_rows(historico, nova_consulta)
      save(historico, file = "historico.RData")
    }
    #condicoes
    #Exemplo:
    #if(nova_consulta$buy > 14600 & nova_consulta$last < 14500){
    #
    #Fazer alguma coisa
    #
    #
    #}
  }

Também podemos acompanhar graficamente incluindo um gráfico dentro do loop, veja:

while(TRUE){
    #pega a cotacao do bitcoin brasil (BTCBRL) da API do blinktrade
    nova_consulta_list = safe_fromJSON("http://api.blinktrade.com/api/v1/BRL/ticker?crypto_currency=BTC")
  
    #verifica se a API retornou uma lista
    if("list" %in% class(nova_consulta_list$result)){
      nova_consulta = nova_consulta_list$result %>%
        as.tibble %>%
        mutate(timestamp = lubridate::now())
      
      #
      #
      # espaco reservado para as regras!
      #
      #
      
      #guarda a consulta
      historico = bind_rows(historico, nova_consulta)
      save(historico, file = "historico.RData")
    }
    
    #Cria um gráfico;
    
    ggplot(historico %>%
                 gather(indicador, valor, high, low, buy, sell, last))+
      geom_line(aes(x=timestamp, y=valor, color=indicador))
    
    #condicoes
    #if(nova_consulta$buy > 14600 & nova_consulta$last < 14500){
    #
    # Fazer alguma coisa
    #
    #}
    
    
  }

Este gráfico retornará algo como:

Gráfico de linha do preço do Bitcoin atualizado em tempo real no R

Este gráfico será atualizado em tempo real!

Atualização (2026)

Nota acrescentada em 2026. Os pacotes e APIs deste post são de 2017 e mudaram bastante: o coinmarketcapr passou a exigir uma chave de API do CoinMarketCap, e a API da BlinkTrade usada para o Bitcoin foi descontinuada. A lógica continua válida: extrair dados de uma API, tratar no R e monitorar em loop. Para uma versão moderna da ideia, veja como montei um agente de IA para análise de Bitcoin.

Perguntas frequentes

Qual pacote usar para dados de cryptomoedas no R?

Para um panorama rápido do mercado (ranking e capitalização), o coinmarketcapr resolve com poucas linhas. Para consultar qualquer API de cotação e ter controle total sobre os dados, o jsonlite é o mais flexível, lendo o JSON direto para um data.frame.

Dá para monitorar o preço do Bitcoin em tempo real no R?

Sim. Um loop while(TRUE) que consulta a API de cotação a cada intervalo (por exemplo, 30 segundos), guarda o histórico e atualiza um gráfico já resolve. É a base de um monitor simples, e o ponto onde você encaixaria regras de alerta ou de compra e venda.

O código deste post ainda funciona hoje?

Em parte. A lógica continua válida, mas as fontes mudaram: o coinmarketcapr agora exige chave de API e a BlinkTrade foi descontinuada. Troque a fonte de dados por uma API atual e o restante do fluxo segue igual.

Recebe os próximos posts por email

Data science, IA e agentes. Sem spam, cancela quando quiser.

Confirmar inscrição

Fellipe Gomes
Autor
Fellipe Gomes
Data Science Specialist @ Accenture | Kaggle Master

Sou formado em estatística e atuo como cientista de dados desde 2017. Compartilho meus estudos e evolução por meio de artigos, tutoriais e projetos de código aberto. Se quiser saber mais sobre meu trabalho, sinta-se à vontade para entrar em contato através das minhas redes sociais.