R/suggestStopLoss.R

#' Estimate Stop Loss Parameter based on Volatility of Time Series Data
#'
#' @param data OHLC object
#'
#' @return list containing 5 stop loss / trailing stop loss pairs
#' @importFrom magrittr %>%
#' @importFrom quantmod OHLC
#' @importFrom TTR volatility
#' @export suggestStopLoss
#'
#' @examples suggestStopLoss(msci_world)
suggestStopLoss <- function (data) {

  mean_volatility <- mean( TTR::volatility(OHLC(data)), n = 30, na.rm=TRUE )
  x <- c(0.01, 0.025, 0.05, 0.075, 0.1, 0.15, 0.2, 0.25, 0.3, 0.35, 0.4, 0.5)
  mean_volatility <- x[which.min(abs(x - mean_volatility))]

  SL_min = x[which.min(abs(x - mean_volatility * 0.25))]
  SL_max = x[which.min(abs(x - mean_volatility * 0.75))]
  TS_min = x[which.min(abs(x - mean_volatility * 0.5))]
  TS_max = x[which.min(abs(x - mean_volatility * 1.5))]

  SL_sequence <- subset(x, x>=SL_min & x<=SL_max)
  TS_sequence <- subset(x, x>=TS_min & x<=TS_max)

  list(c(SL_sequence[1], TS_sequence[1]),
       c(SL_sequence[2], TS_sequence[2]),
       c(SL_sequence[2], TS_sequence[length(TS_sequence)-1]),
       c(tail(SL_sequence, 1), TS_sequence[length(TS_sequence)-1]),
       c(tail(SL_sequence, 1), tail(TS_sequence, 1))
  ) %>% unique(.)

}
rengelke/quantTraiding_trato documentation built on Oct. 13, 2020, 12:01 p.m.