# 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] "AI3USD" "COWUSD" "ABEUR"  "ZECEUR" "DYMEUR"

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
    #> 2025-09-15 15:00:00 114733.3 114997.7 114386.0 114638.5 2.5071280
    #> 2025-09-15 16:00:00 114664.8 115037.5 114438.1 114678.6 2.1961900
    #> 2025-09-15 17:00:00 114686.6 114914.9 114445.5 114872.1 1.2307027
    #> 2025-09-15 18:00:00 114831.9 114906.4 114648.9 114651.6 2.6832303
    #> 2025-09-15 19:00:00 114678.8 115127.1 114626.8 115127.1 4.1353078
    #> 2025-09-15 20:00:00 115112.8 115212.7 114898.5 114993.7 0.2579963

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
    #> 2025-09-15 15:00:00 0.7258 0.2742 2.646973
    #> 2025-09-15 16:00:00 0.7303 0.2697 2.707824
    #> 2025-09-15 17:00:00 0.7269 0.2731 2.661662
    #> 2025-09-15 18:00:00 0.7284 0.2716 2.681885
    #> 2025-09-15 19:00:00 0.7328 0.2672 2.742515
    #> 2025-09-15 20:00:00 0.7305 0.2695 2.710575

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_XMRUSD"    "PF_POPCATUSD" "PF_PIUSD"     "PF_HBARUSD"   "PF_SWARMSUSD"

## 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
      )
    )