R/analyzeGapStrategy.R

Defines functions calcQuantile

calcQuantile <- function(data, param, keys) {

  ranges <- data$range %>% unique()
  values <- data[[param]] %>% unique()

  result <- foreach(value = values) %:%
              foreach(ran_ge = ranges) %:%
                foreach(key = keys) %do% {

    v <- data %>%
      dplyr::filter(range == ran_ge) %>%
      dplyr::filter_(paste(param, "==", value)) %>%
      dplyr::select(key) %>% .[, 1]

    q <- quantile(v)

    df <- data.frame(
      range  = ran_ge,
      param  = value,
      key    = key,
      ymin   = q[1],
      lower  = q[2],
      middle = q[3],
      upper  = q[4],
      ymax   = q[5]
    )
    names(df)[names(df) == "param"] <- param
    rownames(df) <- NULL
    return(df)
  }

  result <- do.call("rbind", result) %>%
              do.call("rbind", .) %>%
                do.call("rbind", .)

  result <- data.table(result)

  # Change keys to factor and arrange levels(order)
  result <- transform(result, key = factor(key, levels = keys))

  return(result)
}

createBoxplot <- function(quantile, param) {

  quantile %>%
    ggplot(aes_string(x = param)) +
    ggtitle(label = paste0("Parameter (", param, ") vs. Performance Metrics")) +
    geom_boxplot(aes
      (ymin = ymin, lower = lower, middle = middle, upper = upper, ymax = ymax),
      stat = "identity") +
    facet_grid(key ~ range, scales = "free_y") +
    # scale_y_continuous(labels = scales::comma) +
    # scale_x_discrete(breaks = c(0, 50, 100, 150, 200)) +
    getGGTheme()
}

if (FALSE) {

  library(foreach)
  library(GGally)

  ### Set parameter and performance metrics to inspect here ####
  param <- "min_thres"
  perfs <- c("return", "drawdown", "ret_dd", "win_ratio", "pf", "score")

  # All results
  results <- getGapStrategyResults(settings$strategy.sqli)

  # Subset here
  data <- results

  # Factorize param
  data[[param]] <- as.factor(data[[param]])

  # Count results by param
  data[, .N, by = param]

  ## GGpairs plot
  plot <- data %>%
    dplyr::select(param, perfs) %>%
    ggpairs(aes_string(color = param, alpha = 0.5))
  plot

  # Boxplot
  quantile <- calcQuantile(data, param, perfs)
  plot <- createBoxplot(quantile, param)
  plot
  ggsave(path, plot, dpi = 100, width = 19.2, height = 10.8)

  # Top N parameters by mean score
  n <- 5
  quantile %>%
    dplyr::filter(key == "score") %>%
    dplyr::group_by(range) %>%
    dplyr::top_n(n, middle) %>%
    dplyr::select(range, param, middle) %>%
    dplyr::arrange(range, -middle)

  # Best parameters
  better_params <- results[
    side == "Long" &

    # Fixed params
    sma_len     == 0 &
    sd_len      == 50 &
    ato_len     == 200 &
    ogc_len     == 0 &
    sd_thres    == 0.01 &
    ato_l_thres == 10000000 &
    ato_h_thres == Inf &
    ogc_thres   == 0 &
    stop_thres  == 0.3 &
    min_thres   == 10 &
    slippage    == 0.001 &
    num_trades  == 10 &
    lot         == 10000

    # Optimized params
    #&
    #(0.5 <= stop_thres & stop_thres <= 1.25) &
   ,]

  best_params <- better_params %>%
    dplyr::group_by(range) %>%
    dplyr::filter(score == max(score)) %>%
    dplyr::arrange(range) %>%
    data.table()
}
tmk-c/myrlib documentation built on May 29, 2019, 1:44 p.m.