Introduction: Cryptocurrency Market Data in R

library(cryptoQuotes)

This vignette is a short introduction to {cryptoQuotes}, for a more extensive introduction on its usecase and limitations please refer to the wiki.

NOTE: This vignette is limited by geolocation due to various country specific cryptocurrency laws. The introduction, therefore, is limited to what is available in the US.

Throughout this vignette we will explore the Bitcoin market data using the Kraken exchange. All available tickers and its notation various across exchangs, so if you are unfamiliar with the exchange specific notation please use the available_intervals()-functions,

# show a sample of 
# the available tickers
sample(
  x = available_tickers(
    source  = "kraken",
    futures = FALSE
  ),
  size = 5
)
#> [1] "PERPUSD" "ZEXEUR"  "SOLAUD"  "C98EUR"  "GHSTUSD"

These available tickers can be passed into the ticker-argument of all the get_*-functions with the appropriate source and futures-argument which, in this case, is kraken and FALSE.

Cryptocurrency market data in R

Open, High, Low, Close an Volume

We will extract the Bitcoin market data in hourly intervals, and store it as BTC,

## extract Bitcoin
## market on the hourly 
## chart
BTC <- get_quote(
  ticker   = "XBTUSDT",
  source   = "kraken",
  futures  = FALSE, 
  interval = "1h"
)
#>                        open    high     low   close     volume
#> 2024-11-07 08:00:00 74764.1 75044.0 74675.1 74784.6 18.7599878
#> 2024-11-07 09:00:00 74784.7 75100.0 74683.8 75099.9  8.0232923
#> 2024-11-07 10:00:00 75099.9 75100.0 74827.6 74939.9 18.0727223
#> 2024-11-07 11:00:00 74915.8 74985.6 74767.5 74972.5 15.8467740
#> 2024-11-07 12:00:00 74991.1 75037.1 74696.9 74739.8 13.2389040
#> 2024-11-07 13:00:00 74749.1 74894.6 74749.1 74894.5  0.2593407

The market data can be extracted in different intervals using the interval-argument. To see available intervals, the available_intervals()-function can be used,

## get available
## intervals for OHLC
## on Kraken
available_intervals(
  source  = "kraken",
  type    = "ohlc",
  futures = FALSE
)
#> ℹ Available Intervals at "kraken" (spot):
#> ✔ 1m, 5m, 15m, 30m, 1h, 4h, 1d, 1w, 2w

Sentiment Data

To put the Bitcoin price action in perspective, an interesting sentiment indicator like the long to short ratio can be extracted,

## extract long-short
## ratio on Bitcoin
## using the hourly chart
LS_BTC <- try(
   get_lsratio(
    ticker   = "XBTUSDT",
    source   = "kraken",
    interval = "1h"
  )
)
#> Error in tools::buildVignettes(dir = ".", tangle = TRUE) : 
#>   ✖ Couldn't find "XBTUSDT" on "kraken".
#> ✔ Run available_tickers(source = 'kraken', futures = TRUE) to see available
#>   tickers.
#> ℹ If the error persists please submit a bug report.

This gives an error. The source of the error is the ticker-naming convention; as the long-short ratio is specific to the perpetual futures market, and the current ticker is specific to the spot-market, the endpoint throws an error.

To circumvent this, we can either use perpetual futures throughout the script, or modify the ticker-argument as follows,

## extract long-short
## ratio on Bitcoin
## using the hourly chart
LS_BTC <- get_lsratio(
  ticker   = "PF_XBTUSD",
  source   = "kraken",
  interval = "1h"
)
#>                       long  short ls_ratio
#> 2024-11-07 08:00:00 0.7219 0.2781 2.595829
#> 2024-11-07 09:00:00 0.7228 0.2772 2.607504
#> 2024-11-07 10:00:00 0.7235 0.2765 2.616637
#> 2024-11-07 11:00:00 0.7187 0.2813 2.554924
#> 2024-11-07 12:00:00 0.7222 0.2778 2.599712
#> 2024-11-07 13:00:00 0.7230 0.2770 2.610108

The ticker specific to the perpetual futures market can be extracted using the available_tickers with futures = TRUE as follows,

# show a sample of 
# the available tickers
sample(
  x = available_tickers(
    source  = "kraken",
    futures = TRUE
  ),
  size = 5
)
#> [1] "PF_SEIUSD"    "PF_GMXUSD"    "PF_BADGERUSD" "PF_ZEUSUSD"   "PF_ASTRUSD"

Charting cryptocurrency market data

The Bitcoin market data can be charted using the chart()-function, which uses {plotly} as backend,

# candlestick chart with
# volume and Long to Short Ratio
chart(
  ticker = BTC,
  main   = kline(),
  sub    = list(
    volume(),
    lsr(ratio = LS_BTC)
  ),
  options = list(
    dark = FALSE
  )
)

Adding indicators

{cryptoQuotes} also acts as an API-client to {TTR}, and supports most of its functions. We can add Moving Average indicators, and Bollinger Bands to the chart using the indicator-argument,

# candlestick chart with
# volume and Long to Short Ratio
chart(
  ticker = BTC,
  main   = kline(),
  sub    = list(
    volume(),
    lsr(ratio = LS_BTC)
  ),
  indicator = list(
    sma(n = 7),
    sma(n = 14),
    sma(n = 21),
    bollinger_bands(
      color = "steelblue"
    )
  ),
  options = list(
    dark = FALSE
  )
)