tests/testthat/test_calcGapStrategy.R

context("Test calcGapStrategy")

# Prepare params and data
start_date <- "2009-01-05"
end_date   <- "2009-01-09"
range      <- paste(start_date, end_date, sep = "::")

params <- data.frame(
  range       = range,
  sma_len     = 0,
  sd_len      = 50,
  ato_len     = 200,
  ogc_len     = 0,
  side        = "Long",
  z_thres     = Inf,
  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,
  stringsAsFactors = FALSE
)

# Save data for backtest
# columns <-  c("open", "high", "low", "close", "adj.open", "roc.pc2to",
#               "sma", "sd", "avg.tover", "open.gap.coef")
# symbols <- getActiveSymbols(settings$sharadar.sqli, start_date, end_date)
# data    <- getSliceData(settings$sharadar.sqli, columns, start_date, end_date,
#                         symbols, TRUE, params$sma_len, params$sd_len,
#                         params$ato_len, params$ogc_len)
# saveRDS(data, "./inst/testdata/data_calcGapStrategy.rds")

data <- readRDS(system.file("testdata/data_calcGapStrategy.rds",
                            package = "myrlib"))

test_that("function returns correct data.", {

  result <- calcGapStrategy(params, data, output = "full")

  # Test names and dim
  expect_equal(names(result), c("simple", "signal", "trans", "equity_curve",
                                "perf", "plot"))
  expect_length(result, 6)
  expect_equal(nrow(result$simple), 1)
  expect_equal(ncol(result$simple), 21)

  expect_equal(nrow(result$signal), 5)

  expect_equal(nrow(result$trans), 40)
  expect_equal(ncol(result$trans), 19) # Debug = TRUE: 19

  expect_equal(nrow(result$equity_curve), 5)
  expect_equal(ncol(result$equity_curve), 5)
  expect_equal(nrow(result$perf), 1)
  expect_equal(ncol(result$perf), 5)

  # Test types
  expect_is(result$simple, "data.frame")
  expect_is(result$signal, "xts")
  expect_is(result$trans, "data.table")
  expect_is(result$equity_curve, "data.table")
  expect_is(result$perf, "data.frame")
  expect_is(result$plot, "ggplot")

  expect_is(index(result$signal), "POSIXct")
  expect_is(result$trans$date, "Date")
  expect_is(result$equity_curve$date, "Date")

  # Test values
  expect_equal(result$simple$range,     "2009-01-05::2009-01-09")
  expect_equal(result$simple$ttl_win,   3047.45)
  expect_equal(result$simple$ttl_lose,  -371.06)
  expect_equal(result$simple$drawdown,  -237.05)
  expect_equal(result$simple$win_days,  2)
  expect_equal(result$simple$lose_days, 2)

  expect_equal(result$perf$ttl_win,   3047.45)
  expect_equal(result$perf$ttl_lose,  -371.06)
  expect_equal(result$perf$drawdown,  -237.05)
  expect_equal(result$perf$win_days,  2)
  expect_equal(result$perf$lose_days, 2)

  expect_equal(head(index(result$signal), 1), as.POSIXct(start_date))
  expect_equal(tail(index(result$signal), 1), as.POSIXct(end_date))
  expect_equal(head(result$trans$date, 1) - 1, as.Date(start_date))
  expect_equal(tail(result$trans$date, 1), as.Date(end_date))
  expect_equal(head(result$equity_curve$date, 1), as.Date(start_date))
  expect_equal(tail(result$equity_curve$date, 1), as.Date(end_date))
})

test_that("function check inputs correctly.", {

  expect_error(calcGapStrategy(data.frame(), data, output = "full"),
               "Params must at least have range.")

  dummy.data <- list(hoge = data.frame())
  expect_error(calcGapStrategy(params, dummy.data, output = "full"),
               "Data columns is mismatch to test GapStrategy.")
})
tmk-c/myrlib documentation built on May 29, 2019, 1:44 p.m.