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
PRwith 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.
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
)
)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_indicatorThe 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_objectAssume 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
)
)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.