Skip to contents

This vignette is a short introduction to the cryptoQuotes-package, 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] "ENJUSD"   "ORCAEUR"  "REPV2USD" "ATOMGBP"  "SCUSD"

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-05-18 06:00:00 66883.7 66915.0 66743.2 66915.0  1.308908
#> 2024-05-18 07:00:00 66913.4 67176.4 66852.7 66852.7  2.838785
#> 2024-05-18 08:00:00 66864.3 67077.5 66864.3 67021.4  3.126783
#> 2024-05-18 09:00:00 67018.7 67137.4 66995.2 67120.9  1.356087
#> 2024-05-18 10:00:00 67100.0 67277.1 67100.0 67214.9 14.445524
#> 2024-05-18 11:00:00 67214.9 67340.8 67115.0 67129.1 10.169583

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"
  )
)
#> Warning in apply(X = core, MARGIN = 2, FUN = as.numeric): NAs introduced by
#> coercion
#> Warning in convert_date(x = as.numeric(dates), multiplier = ifelse(futures, :
#> NAs introduced by coercion
#> Error in xts(coredata(x), order.by = order.by, frequency = frequency,  : 
#>   NROW(x) must match length(order.by)

This gives an error. The source of the error is the ticker-naming convention; as the long to 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-05-18 06:00:00 0.7154 0.2846 2.513703
#> 2024-05-18 07:00:00 0.7095 0.2905 2.442341
#> 2024-05-18 08:00:00 0.7084 0.2916 2.429355
#> 2024-05-18 09:00:00 0.7117 0.2883 2.468609
#> 2024-05-18 10:00:00 0.7132 0.2868 2.486750
#> 2024-05-18 11:00:00 0.7066 0.2934 2.408316

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_LINAUSD"       "PF_MATICUSD"      "PF_BEAMUSD"       "PF_UNIUSD"       
#> [5] "FF_XBTUSD_240531"

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

The cryptoQuotes-package also acts as an API-client to the TTR-package, 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
  )
)