The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.

A Guide on Charting and Custom Indicators

library(cryptoQuotes)

Trading indicators comes in various forms; from the alignment of the moon relative to the sun, to sophisticated trading rules based on neural networks which incorporates classified features; It is not possible to cover them all in an R package.

In this vignette an introduction to the construction of charts and chart indicators are given, and is recommended for those who would want to chart indicators not otherwise found in {cryptoQuotes}. The vignette uses the built-in BTC-object.

Note: Feel free to make a PR with your indicators that you wish to share with the rest of the community.

As the charts in {cryptoQuotes} uses {plotly} as backend, the chart-objects complies with it’s syntax.

Custom Indicators

We start by creating a simple chart-object with volume as it’s only indicator,

# 1) create a simple chart
# object
# 
# NOTE: The chart is wrapped in
# plotly::layout() to avoid
# duplicating xaxis when the
# custom indicators are added
chart_object <- plotly::layout(
  chart(
    ticker = BTC,
    main   = kline(),
    sub    = list(
      volume()
    ),
    options = list(
      dark = FALSE
    )
  ),
  xaxis = list(
    showticklabels = FALSE
  )
)

Sine-oscillator

Assume a trading strategy that follows a sin()-curve throughout the period of interest. The starting point is generating the indicator,

# 1) generate sin-indicator
sin_indicator <- data.frame(
    index         = zoo::index(BTC),
    sin_indicator = sin(seq(0,8*pi,length.out=nrow(BTC)))
  
)

The sin_indicator in it’s basic form can be charted as follows,

# 1) create a plotly-object
# with the sin-indicator
sin_indicator <- plotly::layout(
   margin= list(l = 5, r = 5, b = 5),
  p = plotly::plot_ly(
    data = sin_indicator,
    y    = ~sin_indicator,
    x    = ~index,
    type = "scatter",
    mode = "lines",
    name = "sin"
  ),
  yaxis = list(
    title = NA
  ),
  xaxis = list(
    title = NA
  )
)
# 2) display the 
# indicator
sin_indicator

The sin_indicator can be added to the chart_object using plotly::subplot which also handles the theming,

# 1) append the sin_indicator
# to the chart object
chart_object <- plotly::subplot(
  # ensures that plots are 
  # vertically aligned
  nrows = 2,
  heights = c(
    0.7,
    0.2
  ),
  chart_object,
  sin_indicator,
  shareX = FALSE,
  titleY = FALSE
)

# 2) display the chart
# object
chart_object

Linear Regression Line

Assume a trading strategy that goes long (short) every time the price is below (above) the linear regression line. This indicator can be defined as follows,

# 1) linear regression
# line
lm_indicator <- data.frame(
  y = fitted(
    lm(
      close ~ time,
      data = data.frame(
        time = 1:nrow(BTC),
        close = BTC$close
      )
    )
  ),
  index = zoo::index(BTC)
)

The lm_indicator in it’s basic form can be charted as follows,

# 1) display the linear
# regression line on
# an empty chart
plotly::add_lines(
  p    = plotly::plotly_empty(),
  data = lm_indicator,
  y    = ~y,
  x    = ~index,
  inherit = FALSE,
  xaxis = "x1",
  yaxis = "y2",
  name  = "regression"
)

The lm_indicator can be added to the chart_object using plotly::add_lines which also handles the theming,

# 1) add the regression
# line to the chart_object
plotly::layout(
  margin = list(l = 5, r = 5, b = 5, t = 65),
  plotly::add_lines(
    p       = chart_object,
    data    = lm_indicator,
    y       = ~y,
    x       = ~index,
    inherit = FALSE,
    xaxis   = "x1",
    yaxis   = "y2",
    name    = "regression"
  ),
  yaxis = list(
    title = NA
  ),
  xaxis = list(
    title = NA
  )
)

Summary

Creating custom indicators for the chart()-functions follows standard {plotly} syntax. Two examples of how these are charted in {cryptoQuotes} have been covered.

Note: A full pipeline of charting indicators, custom and built-in, will be released sometime in the future.

These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.