⚠️ 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
coinmarketcaprextrai preço e capitalização de mercado das principais cryptomoedas.- O
jsonliteconsome 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()
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])
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')
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 dadosCom 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_consultaLoop 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:

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.


