knitr::opts_chunk$set(
  collapse = TRUE,
  comment = "#>",
  fig.path = "man/figures/README-"
)

crypto2

Project Status R-CMD-check test-coverage pr-commands CRAN_latest_release_date CRAN status CRAN downloads CRAN downloads last month CRAN downloads last week Lifecycle: stable Website - pkgdown

Historical Cryptocurrency Prices for Active and Delisted Tokens!

This is a modification of the original crypto package by jesse vent. It is entirely set up to use means from the tidyverse and provides tibbles with all data available via the web-api of coinmarketcap.com. It does not require an API key but in turn only provides information that is also available through the website of coinmarketcap.com.

It allows the user to retrieve

Update

Version 2.0.2 (August 2024)

Slight change in api output broke crypto_info() (new additional column). Fixed.

Version 2.0.1 (July 2024)

Slight change in api output broke crypto_info(). Fixed.

Version 2.0.0 (May 2024)

After a major change in the api structure of coinmarketcap.com, the package had to be rewritten. As a result, many functions had to be rewritten, because data was not available any more in a similar format or with similar accuracy. Unfortunately, this will potentially break many users implementations. Here is a detailed list of changes:

Version 1.4.7

Since version 1.4.6 I have added the possibility to "sort" the historical crypto_listings() in _asc_ending or _desc_ending order ("sort_dir") to allow for the possibility to download only the top x crypto currencies using "limit" based on the requested sort (not available for "new" sorting). Also corrected some problems when sourcing lists that now do not have the "last_historical_data" field available any more.

Since version 1.4.5 I have added a new function crypto_global_quotes() which retrieves global aggregate market statistics for CMC. There also were some bugs fixed.

Since version 1.4.4 a new function crypto_listings() was introduced that retrieves new/latest/historical listings and listing information at CMC. Additionally some aspects of the other functions have been reworked. We noticed that finalWait = TRUE does not seem to be necessary at the moment, as well as sleep can be set to '0' seconds. If you experience strange behavior this might be due to the the api sending back strange (old) results. In this case let sleep = 60 (the default) and finalWait = TRUE (the default).

Since version 1.4.0 the package has been reworked to retrieve as many assets as possible with one api call, as there is a new "feature" introduced by CMC to send back the initially requested data for each api call within 60 seconds. So one needs to wait 60s before calling the api again. Additionally, since version v1.4.3 the package allows for a data interval larger than daily (e.g. '2d' or '7d' or 'weekly')

Installation

You can install crypto2 from CRAN with

install.packages("crypto2")

or directly from github with:

# install.packages("devtools")
devtools::install_github("sstoeckl/crypto2")

Package Contribution

The package provides API free and efficient access to all information from https://coinmarketcap.com that is also available through their website. It uses a variety of modification and web-scraping tools from the tidyverse (especially purrr).

As this provides access not only to active coins but also to those that have now been delisted and also those that are categorized as untracked, including historical pricing information, this package provides a valid basis for any Asset Pricing Studies based on crypto currencies that require survivorship-bias-free information. In addition to that, the package maintainer is currently working on also providing delisting returns (similarly to CRSP for stocks) to also eliminate the delisting bias.

Package Usage

First we load the crypto2-package and download the set of active coins from https://coinmarketcap.com (additionally one could load delisted coins with only_Active=FALSE as well as untracked coins with add_untracked=TRUE).

library(crypto2)
library(dplyr)

# List all active coins
coins <- crypto_list(only_active=TRUE)

Next we download information on the first three coins from that list.

# retrieve information for all (the first 3) of those coins
coin_info <- crypto_info(coins, limit=3, finalWait=FALSE)

# and give the first two lines of information per coin
coin_info

In a next step we show the logos of the three coins as provided by https://coinmarketcap.com.

coin_info$logo %>% knitr::include_graphics(.)

In addition we show tags provided by https://coinmarketcap.com.

coin_info %>% select(slug,tags) %>% tidyr::unnest(tags) %>% group_by(slug) %>% slice(1,n())

Additionally: Here are some urls pertaining to these coins as provided by https://coinmarketcap.com.

coin_info %>% pull(urls) %>% .[[1]] |> unlist()

In a next step we download time series data for these coins.

# retrieve historical data for all (the first 3) of them
coin_hist <- crypto_history(coins, limit=3, start_date="20210101", end_date="20210105", finalWait=FALSE)

# and give the first two times of information per coin
coin_hist %>% group_by(slug) %>% slice(1:2)

Similarly, we could download data on an hourly basis.

# retrieve historical data for all (the first 3) of them
coin_hist_m <- crypto_history(coins, limit=3, start_date="20210101", end_date="20210102", interval ="1h", finalWait=FALSE)

# and give the first two times of information per coin
coin_hist_m %>% group_by(slug) %>% slice(1:2)

Alternatively, we could determine the price of these coins in other currencies. A list of such currencies is available as fiat_list()

fiats <- fiat_list()
fiats

So we download the time series again depicting prices in terms of Bitcoin and Euro (note that multiple currencies can be given to convert, separated by ",").

# retrieve historical data for all (the first 3) of them
coin_hist2 <- crypto_history(coins, convert="USD", limit=3, start_date="20210101", end_date="20210105", finalWait=FALSE)

# and give the first two times of information per coin
coin_hist2 %>% group_by(slug,ref_cur_name) %>% slice(1:2)

As a new features in version 1.4.4. we introduced the possibility to download historical listings and listing information (add quote = TRUE).

latest_listings <- crypto_listings(which="latest", limit=10, quote=TRUE, finalWait=FALSE)
latest_listings

An additional feature that was added in version 1.4.5 retrieves global aggregate market statistics for CMC.

all_quotes <- crypto_global_quotes(which="historical", quote=TRUE)
all_quotes

We can use those quotes to plot information on the aggregate market capitalization:

all_quotes %>% select(timestamp, USD_total_market_cap, USD_altcoin_market_cap) %>% 
  tidyr::pivot_longer(cols = 2:3, names_to = "Market Cap", values_to = "bn. USD") %>% 
  tidyr::separate(`Market Cap`,into = c("Currency","Type","Market","Cap")) %>% 
  dplyr::mutate(`bn. USD`=`bn. USD`/1000000000) %>% 
  ggplot2::ggplot(ggplot2::aes(x=timestamp,y=`bn. USD`,color=Type)) + ggplot2::geom_line() +
  ggplot2::labs(title="Market capitalization in bn USD", subtitle="CoinMarketCap.com")

Last and least, one can get information on exchanges. For this download a list of active/inactive/untracked exchanges using exchange_list():

exchanges <- exchange_list(only_active=TRUE)
exchanges

and then download information on "binance" and "bittrex":

ex_info <- exchange_info(exchanges %>% filter(slug %in% c('binance','kraken')), finalWait=FALSE)
ex_info

Then we can access information on the fee structure,

ex_info %>% select(contains("fee"))

or the fiat currencies allowed:

ex_info %>% select(slug,fiats) %>% tidyr::unnest(fiats)

Author/License

This project is licensed under the MIT License - see the file for details

Acknowledgments



sstoeckl/crypto2 documentation built on Feb. 25, 2025, 7:06 p.m.