# initiateStrategy --------------------------------------------------------
#' Initiate Trading Strategy
#'
#' @param name strategy name
#'
#' @return Empty strategy object
#' @export initiateStrategy
#'
#' @examples initiateStrategy("CCI_pullback")
initiateStrategy <- function (name) {
return(strategy <- list(name=name))
}
# addRule -----------------------------------------------------------------
#' Add Rule to Trading Strategy
#'
#' @param strategy a trading strategy object
#' @param rule trading rule definition
#'
#' @return returns trading strategy object with added rule
#' @export addRule
#'
#' @examples addRule(CCI_pullback,
#' list(category = "condition",
#' indicator = TTR::CCI,
#' arguments = list(n = "n1", maType = "SMA", c = 0.015),
#' type = "on-off",
#' on = 100,
#' off = -100)
#' )
addRule <- function (strategy, rule) {
rule_category <- as.character(rule$category)
rule_pos <- grep(paste0("^", rule_category), names(strategy))
str(strategy)
if (length(rule_pos) == 0) {
strategy_update <- rlist::list.append(strategy, list(rule))
names(strategy_update)[length(strategy_update)] <- paste(rule_category)
} else {
strategy_trunc <- strategy[!(names(strategy) %in% rule_category)]
strategy_category <- strategy[(names(strategy) %in% rule_category)]
strategy_category <- unlist(strategy_category,
recursive = FALSE, use.names = FALSE)
str(strategy_trunc)
str(strategy_category)
str(rule)
if (length(strategy_category) >= 3) {
strategy_category <- list(strategy_category, rule)
} else {
strategy_category <- rlist::list.append(strategy_category, rule)
}
str(strategy_category)
strategy_update <- rlist::list.append(strategy_trunc,
strategy_category)
names(strategy_update)[length(strategy_update)] <- paste(rule_category)
str(strategy_update)
}
return(strategy_update)
}
# setStrategyParameter ----------------------------------------------------
#' Set Trading Strategy Parameter
#'
#' @param file name of the R file which contains trategy initiation and definition
#' @param ... further variables to pass to strategy definition
#'
#' @return returns trading strategy object with parameters
#' @export updateStrategyParameter
#'
#' @examples CCIpullback1 <- updateStrategyParameter("./CCIpullback.R", nCCI1 = 6,
#' nCCI2 = 85, SL = 0.03, TS = 0.20)
updateStrategyParameter <- function (file, ...) {
args <- list(...)
if (!is.null(length(args))) {
for (i in seq_len(length(args))) {
eval(parse(text=paste0(names(args[i]), "<-", args[i])), envir=.GlobalEnv)
}
}
source(file)
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.