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