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.
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
plotly::layout(
chart_object <-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
data.frame(
sin_indicator <-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
plotly::layout(
sin_indicator <-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
plotly::subplot(
chart_object <-# 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
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
data.frame(
lm_indicator <-y = fitted(
lm(
~ time,
close 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
::add_lines(
plotlyp = 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
::layout(
plotlymargin = list(l = 5, r = 5, b = 5, t = 65),
::add_lines(
plotlyp = 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.