3

options(repos = list(CRAN="http://cran.rstudio.com/"))
install.packages("lattice")
## 程序包'lattice'打开成功,MD5和检查也通过
## 
## 下载的二进制程序包在
##  C:\Users\quan\AppData\Local\Temp\Rtmp0mAIWX\downloaded_packages里
library(lattice)
install.packages("zoo")
## 程序包'zoo'打开成功,MD5和检查也通过
## 
## 下载的二进制程序包在
##  C:\Users\quan\AppData\Local\Temp\Rtmp0mAIWX\downloaded_packages里
library(zoo)
## 
## 载入程辑包:'zoo'
## The following objects are masked from 'package:base':
## 
##     as.Date, as.Date.numeric
evaluate <- function(PARAM, minVal = NA, maxVal = NA, y = 2014,
                     transform = FALSE, verbose = FALSE,
                     negative = FALSE, transformOnly = FALSE,
                     returnData = FALSE, accountParams = NULL){
  
  # Step 1
  # Convert and declare parameters if they exist on unbounded (-inf,inf) domain
  if( transform | transformOnly ){
    PARAM <- minVal +
      (maxVal - minVal) * unlist(lapply( PARAM, function(v) (1 + exp(-v))^(-1) ))
    if( transformOnly ){

    }
  }
 return(PARAM)  
}  ## 修改
  
 
# Declare bounds and step size for optimization
lowerBound <- c(n1 = 5, nFact = 3, nSharpe = 22, shThresh = 0.05)
upperBound <- c(n1 = 80, nFact = 3, nSharpe = 22, shThresh = 0.95)
stepSize <- c(n1 = 5, nFact = 1, nSharpe = 1, shThresh = 0.05)

pnames <- names(stepSize)
np <- length(pnames)

# Declare list of all test points
POINTS <- list()
for( p in pnames ){
  POINTS[[p]] <- seq(lowerBound[[p]], upperBound[[p]], stepSize[[p]])
}

OPTIM <- data.frame(matrix(NA, nrow = prod(unlist(lapply(POINTS, length))),
                           ncol = np + 1))
names(OPTIM)[1:np] <- names(POINTS)
names(OPTIM)[np+1] <- "obj"

# Store all possible combinations of parameters
for( i in 1:np ){
  each <- prod(unlist(lapply(POINTS, length))[-(1:i)])
  times <- prod(unlist(lapply(POINTS, length))[-(i:length(pnames))])
  OPTIM[,i] <- rep(POINTS[[pnames[i]]], each = each, times = times)
}

# Test each row of OPTIM
timeLapse <- proc.time()[3]
for( i in 1:nrow(OPTIM) ){
  OPTIM[i,np+1] <- evaluate(OPTIM[i,1:np], transform = FALSE, y = 2014)
  cat(paste0("##  ", floor( 100 * i / nrow(OPTIM)), "% complete\n"))
  cat(paste0("##  ",
             round( ((proc.time()[3] - timeLapse) * 
                       ((nrow(OPTIM) - i)/ i))/60, 2),
             " minutes remaining\n\n"))
}
## ##  0% complete
## ##  0.1 minutes remaining
## 
## ##  0% complete
## ##  0.08 minutes remaining
## 
## ##  0% complete
## ##  0.05 minutes remaining
## 
## ##  1% complete
## ##  0.04 minutes remaining
## 
## ##  1% complete
## ##  0.03 minutes remaining
## 
## ##  1% complete
## ##  0.02 minutes remaining
## 
## ##  2% complete
## ##  0.02 minutes remaining
## 
## ##  2% complete
## ##  0.02 minutes remaining
## 
## ##  2% complete
## ##  0.02 minutes remaining
## 
## ##  3% complete
## ##  0.01 minutes remaining
## 
## ##  3% complete
## ##  0.01 minutes remaining
## 
## ##  3% complete
## ##  0.01 minutes remaining
## 
## ##  4% complete
## ##  0.01 minutes remaining
## 
## ##  4% complete
## ##  0.01 minutes remaining
## 
## ##  4% complete
## ##  0.01 minutes remaining
## 
## ##  5% complete
## ##  0.01 minutes remaining
## 
## ##  5% complete
## ##  0.01 minutes remaining
## 
## ##  5% complete
## ##  0.01 minutes remaining
## 
## ##  6% complete
## ##  0.01 minutes remaining
## 
## ##  6% complete
## ##  0.01 minutes remaining
## 
## ##  6% complete
## ##  0.01 minutes remaining
## 
## ##  7% complete
## ##  0.01 minutes remaining
## 
## ##  7% complete
## ##  0.01 minutes remaining
## 
## ##  7% complete
## ##  0.01 minutes remaining
## 
## ##  8% complete
## ##  0.01 minutes remaining
## 
## ##  8% complete
## ##  0.01 minutes remaining
## 
## ##  8% complete
## ##  0.01 minutes remaining
## 
## ##  9% complete
## ##  0.01 minutes remaining
## 
## ##  9% complete
## ##  0.01 minutes remaining
## 
## ##  9% complete
## ##  0.01 minutes remaining
## 
## ##  10% complete
## ##  0.01 minutes remaining
## 
## ##  10% complete
## ##  0.01 minutes remaining
## 
## ##  10% complete
## ##  0.01 minutes remaining
## 
## ##  11% complete
## ##  0.01 minutes remaining
## 
## ##  11% complete
## ##  0.01 minutes remaining
## 
## ##  11% complete
## ##  0.01 minutes remaining
## 
## ##  12% complete
## ##  0.01 minutes remaining
## 
## ##  12% complete
## ##  0.01 minutes remaining
## 
## ##  12% complete
## ##  0.01 minutes remaining
## 
## ##  13% complete
## ##  0.01 minutes remaining
## 
## ##  13% complete
## ##  0.01 minutes remaining
## 
## ##  13% complete
## ##  0.01 minutes remaining
## 
## ##  14% complete
## ##  0.01 minutes remaining
## 
## ##  14% complete
## ##  0 minutes remaining
## 
## ##  14% complete
## ##  0 minutes remaining
## 
## ##  15% complete
## ##  0 minutes remaining
## 
## ##  15% complete
## ##  0 minutes remaining
## 
## ##  15% complete
## ##  0 minutes remaining
## 
## ##  16% complete
## ##  0 minutes remaining
## 
## ##  16% complete
## ##  0 minutes remaining
## 
## ##  16% complete
## ##  0 minutes remaining
## 
## ##  17% complete
## ##  0 minutes remaining
## 
## ##  17% complete
## ##  0 minutes remaining
## 
## ##  17% complete
## ##  0 minutes remaining
## 
## ##  18% complete
## ##  0 minutes remaining
## 
## ##  18% complete
## ##  0 minutes remaining
## 
## ##  18% complete
## ##  0 minutes remaining
## 
## ##  19% complete
## ##  0 minutes remaining
## 
## ##  19% complete
## ##  0 minutes remaining
## 
## ##  19% complete
## ##  0 minutes remaining
## 
## ##  20% complete
## ##  0 minutes remaining
## 
## ##  20% complete
## ##  0 minutes remaining
## 
## ##  20% complete
## ##  0 minutes remaining
## 
## ##  21% complete
## ##  0 minutes remaining
## 
## ##  21% complete
## ##  0 minutes remaining
## 
## ##  21% complete
## ##  0 minutes remaining
## 
## ##  22% complete
## ##  0 minutes remaining
## 
## ##  22% complete
## ##  0 minutes remaining
## 
## ##  22% complete
## ##  0 minutes remaining
## 
## ##  23% complete
## ##  0 minutes remaining
## 
## ##  23% complete
## ##  0 minutes remaining
## 
## ##  23% complete
## ##  0 minutes remaining
## 
## ##  24% complete
## ##  0 minutes remaining
## 
## ##  24% complete
## ##  0 minutes remaining
## 
## ##  24% complete
## ##  0 minutes remaining
## 
## ##  25% complete
## ##  0 minutes remaining
## 
## ##  25% complete
## ##  0 minutes remaining
## 
## ##  25% complete
## ##  0 minutes remaining
## 
## ##  25% complete
## ##  0 minutes remaining
## 
## ##  26% complete
## ##  0 minutes remaining
## 
## ##  26% complete
## ##  0 minutes remaining
## 
## ##  26% complete
## ##  0 minutes remaining
## 
## ##  27% complete
## ##  0 minutes remaining
## 
## ##  27% complete
## ##  0 minutes remaining
## 
## ##  27% complete
## ##  0 minutes remaining
## 
## ##  28% complete
## ##  0 minutes remaining
## 
## ##  28% complete
## ##  0 minutes remaining
## 
## ##  28% complete
## ##  0 minutes remaining
## 
## ##  29% complete
## ##  0 minutes remaining
## 
## ##  29% complete
## ##  0 minutes remaining
## 
## ##  29% complete
## ##  0 minutes remaining
## 
## ##  30% complete
## ##  0 minutes remaining
## 
## ##  30% complete
## ##  0 minutes remaining
## 
## ##  30% complete
## ##  0 minutes remaining
## 
## ##  31% complete
## ##  0 minutes remaining
## 
## ##  31% complete
## ##  0 minutes remaining
## 
## ##  31% complete
## ##  0 minutes remaining
## 
## ##  32% complete
## ##  0 minutes remaining
## 
## ##  32% complete
## ##  0 minutes remaining
## 
## ##  32% complete
## ##  0 minutes remaining
## 
## ##  33% complete
## ##  0 minutes remaining
## 
## ##  33% complete
## ##  0 minutes remaining
## 
## ##  33% complete
## ##  0 minutes remaining
## 
## ##  34% complete
## ##  0 minutes remaining
## 
## ##  34% complete
## ##  0 minutes remaining
## 
## ##  34% complete
## ##  0 minutes remaining
## 
## ##  35% complete
## ##  0 minutes remaining
## 
## ##  35% complete
## ##  0 minutes remaining
## 
## ##  35% complete
## ##  0 minutes remaining
## 
## ##  36% complete
## ##  0 minutes remaining
## 
## ##  36% complete
## ##  0 minutes remaining
## 
## ##  36% complete
## ##  0 minutes remaining
## 
## ##  37% complete
## ##  0 minutes remaining
## 
## ##  37% complete
## ##  0 minutes remaining
## 
## ##  37% complete
## ##  0 minutes remaining
## 
## ##  38% complete
## ##  0 minutes remaining
## 
## ##  38% complete
## ##  0 minutes remaining
## 
## ##  38% complete
## ##  0 minutes remaining
## 
## ##  39% complete
## ##  0 minutes remaining
## 
## ##  39% complete
## ##  0 minutes remaining
## 
## ##  39% complete
## ##  0 minutes remaining
## 
## ##  40% complete
## ##  0 minutes remaining
## 
## ##  40% complete
## ##  0 minutes remaining
## 
## ##  40% complete
## ##  0 minutes remaining
## 
## ##  41% complete
## ##  0 minutes remaining
## 
## ##  41% complete
## ##  0 minutes remaining
## 
## ##  41% complete
## ##  0 minutes remaining
## 
## ##  42% complete
## ##  0 minutes remaining
## 
## ##  42% complete
## ##  0 minutes remaining
## 
## ##  42% complete
## ##  0 minutes remaining
## 
## ##  43% complete
## ##  0 minutes remaining
## 
## ##  43% complete
## ##  0 minutes remaining
## 
## ##  43% complete
## ##  0 minutes remaining
## 
## ##  44% complete
## ##  0 minutes remaining
## 
## ##  44% complete
## ##  0 minutes remaining
## 
## ##  44% complete
## ##  0 minutes remaining
## 
## ##  45% complete
## ##  0 minutes remaining
## 
## ##  45% complete
## ##  0 minutes remaining
## 
## ##  45% complete
## ##  0 minutes remaining
## 
## ##  46% complete
## ##  0 minutes remaining
## 
## ##  46% complete
## ##  0 minutes remaining
## 
## ##  46% complete
## ##  0 minutes remaining
## 
## ##  47% complete
## ##  0 minutes remaining
## 
## ##  47% complete
## ##  0 minutes remaining
## 
## ##  47% complete
## ##  0 minutes remaining
## 
## ##  48% complete
## ##  0 minutes remaining
## 
## ##  48% complete
## ##  0 minutes remaining
## 
## ##  48% complete
## ##  0 minutes remaining
## 
## ##  49% complete
## ##  0 minutes remaining
## 
## ##  49% complete
## ##  0 minutes remaining
## 
## ##  49% complete
## ##  0 minutes remaining
## 
## ##  50% complete
## ##  0 minutes remaining
## 
## ##  50% complete
## ##  0 minutes remaining
## 
## ##  50% complete
## ##  0 minutes remaining
## 
## ##  50% complete
## ##  0 minutes remaining
## 
## ##  51% complete
## ##  0 minutes remaining
## 
## ##  51% complete
## ##  0 minutes remaining
## 
## ##  51% complete
## ##  0 minutes remaining
## 
## ##  52% complete
## ##  0 minutes remaining
## 
## ##  52% complete
## ##  0 minutes remaining
## 
## ##  52% complete
## ##  0 minutes remaining
## 
## ##  53% complete
## ##  0 minutes remaining
## 
## ##  53% complete
## ##  0 minutes remaining
## 
## ##  53% complete
## ##  0 minutes remaining
## 
## ##  54% complete
## ##  0 minutes remaining
## 
## ##  54% complete
## ##  0 minutes remaining
## 
## ##  54% complete
## ##  0 minutes remaining
## 
## ##  55% complete
## ##  0 minutes remaining
## 
## ##  55% complete
## ##  0 minutes remaining
## 
## ##  55% complete
## ##  0 minutes remaining
## 
## ##  56% complete
## ##  0 minutes remaining
## 
## ##  56% complete
## ##  0 minutes remaining
## 
## ##  56% complete
## ##  0 minutes remaining
## 
## ##  57% complete
## ##  0 minutes remaining
## 
## ##  57% complete
## ##  0 minutes remaining
## 
## ##  57% complete
## ##  0 minutes remaining
## 
## ##  58% complete
## ##  0 minutes remaining
## 
## ##  58% complete
## ##  0 minutes remaining
## 
## ##  58% complete
## ##  0 minutes remaining
## 
## ##  59% complete
## ##  0 minutes remaining
## 
## ##  59% complete
## ##  0 minutes remaining
## 
## ##  59% complete
## ##  0 minutes remaining
## 
## ##  60% complete
## ##  0 minutes remaining
## 
## ##  60% complete
## ##  0 minutes remaining
## 
## ##  60% complete
## ##  0 minutes remaining
## 
## ##  61% complete
## ##  0 minutes remaining
## 
## ##  61% complete
## ##  0 minutes remaining
## 
## ##  61% complete
## ##  0 minutes remaining
## 
## ##  62% complete
## ##  0 minutes remaining
## 
## ##  62% complete
## ##  0 minutes remaining
## 
## ##  62% complete
## ##  0 minutes remaining
## 
## ##  63% complete
## ##  0 minutes remaining
## 
## ##  63% complete
## ##  0 minutes remaining
## 
## ##  63% complete
## ##  0 minutes remaining
## 
## ##  64% complete
## ##  0 minutes remaining
## 
## ##  64% complete
## ##  0 minutes remaining
## 
## ##  64% complete
## ##  0 minutes remaining
## 
## ##  65% complete
## ##  0 minutes remaining
## 
## ##  65% complete
## ##  0 minutes remaining
## 
## ##  65% complete
## ##  0 minutes remaining
## 
## ##  66% complete
## ##  0 minutes remaining
## 
## ##  66% complete
## ##  0 minutes remaining
## 
## ##  66% complete
## ##  0 minutes remaining
## 
## ##  67% complete
## ##  0 minutes remaining
## 
## ##  67% complete
## ##  0 minutes remaining
## 
## ##  67% complete
## ##  0 minutes remaining
## 
## ##  68% complete
## ##  0 minutes remaining
## 
## ##  68% complete
## ##  0 minutes remaining
## 
## ##  68% complete
## ##  0 minutes remaining
## 
## ##  69% complete
## ##  0 minutes remaining
## 
## ##  69% complete
## ##  0 minutes remaining
## 
## ##  69% complete
## ##  0 minutes remaining
## 
## ##  70% complete
## ##  0 minutes remaining
## 
## ##  70% complete
## ##  0 minutes remaining
## 
## ##  70% complete
## ##  0 minutes remaining
## 
## ##  71% complete
## ##  0 minutes remaining
## 
## ##  71% complete
## ##  0 minutes remaining
## 
## ##  71% complete
## ##  0 minutes remaining
## 
## ##  72% complete
## ##  0 minutes remaining
## 
## ##  72% complete
## ##  0 minutes remaining
## 
## ##  72% complete
## ##  0 minutes remaining
## 
## ##  73% complete
## ##  0 minutes remaining
## 
## ##  73% complete
## ##  0 minutes remaining
## 
## ##  73% complete
## ##  0 minutes remaining
## 
## ##  74% complete
## ##  0 minutes remaining
## 
## ##  74% complete
## ##  0 minutes remaining
## 
## ##  74% complete
## ##  0 minutes remaining
## 
## ##  75% complete
## ##  0 minutes remaining
## 
## ##  75% complete
## ##  0 minutes remaining
## 
## ##  75% complete
## ##  0 minutes remaining
## 
## ##  75% complete
## ##  0 minutes remaining
## 
## ##  76% complete
## ##  0 minutes remaining
## 
## ##  76% complete
## ##  0 minutes remaining
## 
## ##  76% complete
## ##  0 minutes remaining
## 
## ##  77% complete
## ##  0 minutes remaining
## 
## ##  77% complete
## ##  0 minutes remaining
## 
## ##  77% complete
## ##  0 minutes remaining
## 
## ##  78% complete
## ##  0 minutes remaining
## 
## ##  78% complete
## ##  0 minutes remaining
## 
## ##  78% complete
## ##  0 minutes remaining
## 
## ##  79% complete
## ##  0 minutes remaining
## 
## ##  79% complete
## ##  0 minutes remaining
## 
## ##  79% complete
## ##  0 minutes remaining
## 
## ##  80% complete
## ##  0 minutes remaining
## 
## ##  80% complete
## ##  0 minutes remaining
## 
## ##  80% complete
## ##  0 minutes remaining
## 
## ##  81% complete
## ##  0 minutes remaining
## 
## ##  81% complete
## ##  0 minutes remaining
## 
## ##  81% complete
## ##  0 minutes remaining
## 
## ##  82% complete
## ##  0 minutes remaining
## 
## ##  82% complete
## ##  0 minutes remaining
## 
## ##  82% complete
## ##  0 minutes remaining
## 
## ##  83% complete
## ##  0 minutes remaining
## 
## ##  83% complete
## ##  0 minutes remaining
## 
## ##  83% complete
## ##  0 minutes remaining
## 
## ##  84% complete
## ##  0 minutes remaining
## 
## ##  84% complete
## ##  0 minutes remaining
## 
## ##  84% complete
## ##  0 minutes remaining
## 
## ##  85% complete
## ##  0 minutes remaining
## 
## ##  85% complete
## ##  0 minutes remaining
## 
## ##  85% complete
## ##  0 minutes remaining
## 
## ##  86% complete
## ##  0 minutes remaining
## 
## ##  86% complete
## ##  0 minutes remaining
## 
## ##  86% complete
## ##  0 minutes remaining
## 
## ##  87% complete
## ##  0 minutes remaining
## 
## ##  87% complete
## ##  0 minutes remaining
## 
## ##  87% complete
## ##  0 minutes remaining
## 
## ##  88% complete
## ##  0 minutes remaining
## 
## ##  88% complete
## ##  0 minutes remaining
## 
## ##  88% complete
## ##  0 minutes remaining
## 
## ##  89% complete
## ##  0 minutes remaining
## 
## ##  89% complete
## ##  0 minutes remaining
## 
## ##  89% complete
## ##  0 minutes remaining
## 
## ##  90% complete
## ##  0 minutes remaining
## 
## ##  90% complete
## ##  0 minutes remaining
## 
## ##  90% complete
## ##  0 minutes remaining
## 
## ##  91% complete
## ##  0 minutes remaining
## 
## ##  91% complete
## ##  0 minutes remaining
## 
## ##  91% complete
## ##  0 minutes remaining
## 
## ##  92% complete
## ##  0 minutes remaining
## 
## ##  92% complete
## ##  0 minutes remaining
## 
## ##  92% complete
## ##  0 minutes remaining
## 
## ##  93% complete
## ##  0 minutes remaining
## 
## ##  93% complete
## ##  0 minutes remaining
## 
## ##  93% complete
## ##  0 minutes remaining
## 
## ##  94% complete
## ##  0 minutes remaining
## 
## ##  94% complete
## ##  0 minutes remaining
## 
## ##  94% complete
## ##  0 minutes remaining
## 
## ##  95% complete
## ##  0 minutes remaining
## 
## ##  95% complete
## ##  0 minutes remaining
## 
## ##  95% complete
## ##  0 minutes remaining
## 
## ##  96% complete
## ##  0 minutes remaining
## 
## ##  96% complete
## ##  0 minutes remaining
## 
## ##  96% complete
## ##  0 minutes remaining
## 
## ##  97% complete
## ##  0 minutes remaining
## 
## ##  97% complete
## ##  0 minutes remaining
## 
## ##  97% complete
## ##  0 minutes remaining
## 
## ##  98% complete
## ##  0 minutes remaining
## 
## ##  98% complete
## ##  0 minutes remaining
## 
## ##  98% complete
## ##  0 minutes remaining
## 
## ##  99% complete
## ##  0 minutes remaining
## 
## ##  99% complete
## ##  0 minutes remaining
## 
## ##  99% complete
## ##  0 minutes remaining
## 
## ##  100% complete
## ##  0 minutes remaining
library(lattice)
wireframe(obj ~ n1*shThresh, data = OPTIM,
          xlab = "n1", ylab = "shThresh",
          main = "Long-Only MACD Exhaustive Optimization",
          drape = TRUE,
          colorkey = TRUE,
          screen = list(z = 15, x = -60)
)

levelplot(obj ~ n1*shThresh, data = OPTIM,
          xlab = "n1", ylab = "shThresh",
          main = "Long-Only MACD Exhaustive Optimization"
)

```