library(tradingview)
library(tidyverse)
library(tidyquant)

tq_sma <- function(., select, n = 14, ...) {
  tq_mutate(
    .,
    select = select,
    mutate_fun = SMA,
    n = n,
    col_rename = paste0("sma.", n)
  )
}

aapl <- tq_get("AAPL") %>%
  tq_sma(n = 14, select = "adjusted") %>%
  tq_sma(n = 28, select = "adjusted") %>%
  na.omit() %>%
  mutate(
    direction = if_else(sma.14 > sma.28, "up", "down"),
    marker = if_else(
      direction != lag(direction),
      if_else(direction == "up", "arrowUp", "arrowDown"),
      NULL
    )
  )
aapl
tradingview(aapl, height = 400) %>%
  tv_chart(decimals = 2, time = "date") %>%
  tv_candles(priceLine = FALSE, markers = tv_markers(shape = "marker"))
tradingview(aapl, height = 400) %>%
  tv_chart(decimals = 2, time = "date") %>%
  tv_line(
    priceLine = FALSE,
    value = "adjusted",
    markers = tv_markers(shape = "marker")
  )
tradingview(aapl, height = 400) %>%
  tv_chart(decimals = 2, time = "date") %>%
  tv_histogram(
    priceLine = FALSE,
    color = "rgba(255,0,0,0.2)",
    value = "adjusted",
    markers = tv_markers(shape = "marker")
  )
LS0tCnRpdGxlOiAiVHJhZGluZ1ZpZXcgbWFya2VycyIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3Igc2V0dXB9CmxpYnJhcnkodHJhZGluZ3ZpZXcpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHRpZHlxdWFudCkKCnRxX3NtYSA8LSBmdW5jdGlvbiguLCBzZWxlY3QsIG4gPSAxNCwgLi4uKSB7CiAgdHFfbXV0YXRlKAogICAgLiwKICAgIHNlbGVjdCA9IHNlbGVjdCwKICAgIG11dGF0ZV9mdW4gPSBTTUEsCiAgICBuID0gbiwKICAgIGNvbF9yZW5hbWUgPSBwYXN0ZTAoInNtYS4iLCBuKQogICkKfQoKYWFwbCA8LSB0cV9nZXQoIkFBUEwiKSAlPiUKICB0cV9zbWEobiA9IDE0LCBzZWxlY3QgPSAiYWRqdXN0ZWQiKSAlPiUKICB0cV9zbWEobiA9IDI4LCBzZWxlY3QgPSAiYWRqdXN0ZWQiKSAlPiUKICBuYS5vbWl0KCkgJT4lCiAgbXV0YXRlKAogICAgZGlyZWN0aW9uID0gaWZfZWxzZShzbWEuMTQgPiBzbWEuMjgsICJ1cCIsICJkb3duIiksCiAgICBtYXJrZXIgPSBpZl9lbHNlKAogICAgICBkaXJlY3Rpb24gIT0gbGFnKGRpcmVjdGlvbiksCiAgICAgIGlmX2Vsc2UoZGlyZWN0aW9uID09ICJ1cCIsICJhcnJvd1VwIiwgImFycm93RG93biIpLAogICAgICBOVUxMCiAgICApCiAgKQpgYGAKCmBgYHtyfQphYXBsCmBgYAoKCmBgYHtyfQp0cmFkaW5ndmlldyhhYXBsLCBoZWlnaHQgPSA0MDApICU+JQogIHR2X2NoYXJ0KGRlY2ltYWxzID0gMiwgdGltZSA9ICJkYXRlIikgJT4lCiAgdHZfY2FuZGxlcyhwcmljZUxpbmUgPSBGQUxTRSwgbWFya2VycyA9IHR2X21hcmtlcnMoc2hhcGUgPSAibWFya2VyIikpCmBgYAoKYGBge3J9CnRyYWRpbmd2aWV3KGFhcGwsIGhlaWdodCA9IDQwMCkgJT4lCiAgdHZfY2hhcnQoZGVjaW1hbHMgPSAyLCB0aW1lID0gImRhdGUiKSAlPiUKICB0dl9saW5lKAogICAgcHJpY2VMaW5lID0gRkFMU0UsCiAgICB2YWx1ZSA9ICJhZGp1c3RlZCIsCiAgICBtYXJrZXJzID0gdHZfbWFya2VycyhzaGFwZSA9ICJtYXJrZXIiKQogICkKYGBgCgpgYGB7cn0KdHJhZGluZ3ZpZXcoYWFwbCwgaGVpZ2h0ID0gNDAwKSAlPiUKICB0dl9jaGFydChkZWNpbWFscyA9IDIsIHRpbWUgPSAiZGF0ZSIpICU+JQogIHR2X2hpc3RvZ3JhbSgKICAgIHByaWNlTGluZSA9IEZBTFNFLAogICAgY29sb3IgPSAicmdiYSgyNTUsMCwwLDAuMikiLAogICAgdmFsdWUgPSAiYWRqdXN0ZWQiLAogICAgbWFya2VycyA9IHR2X21hcmtlcnMoc2hhcGUgPSAibWFya2VyIikKICApCmBgYAo=