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()
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.