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.
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.
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.