Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
应用walk.forward函数时出现quantstrat错误_R_Quantstrat - Fatal编程技术网

应用walk.forward函数时出现quantstrat错误

应用walk.forward函数时出现quantstrat错误,r,quantstrat,R,Quantstrat,我正在浏览以下pdf幻灯片(目前为42/24): 我最初看到与并行处理相关的错误(我使用的是Ubuntu),但当我注释掉并行代码时,我遇到了以下错误: walk.forward(strategy.st=strat.st,paramset.label)中出错= “BBOPT”,:obj.func()返回空结果,另外:警告 消息:在max(x)中:max没有未丢失的参数;返回-Inf 我已经检查了代码,似乎找不到错误。我知道代码是从2014年开始的,并且从那时起对quantstrat包进行了一些更

我正在浏览以下pdf幻灯片(目前为42/24):

我最初看到与并行处理相关的错误(我使用的是Ubuntu),但当我注释掉并行代码时,我遇到了以下错误:

walk.forward(strategy.st=strat.st,paramset.label)中出错= “BBOPT”,:obj.func()返回空结果,另外:警告 消息:在max(x)中:max没有未丢失的参数;返回-Inf

我已经检查了代码,似乎找不到错误。我知道代码是从2014年开始的,并且从那时起对
quantstrat
包进行了一些更新。我不想使用并行处理运行代码,我的目标是让代码运行

我从幻灯片中复制的代码:

library(quantstrat)
#library(xtsExtra)


stock.st = c("USO")

currency("USD")
stock(stock.st, currency = "USD", multiplier = 1)
Sys.setenc(TZ = "UTC")

initDate = "2006-12-31"
startDate = "2007-01-01"
endDate = "2013-12-31"

initEq = 1000000
tradeSize = initEq / 10

getSymbols(
  stock.st,
  from = startDate,
  to = endDate
)

myTheme <- chart_theme()
myTheme$col$dn.col <- "ligthblue"
myTheme$col$dn.border <- "lightgray"
myTheme$col$up.border <- "lightgray"


chart_Series(
  Ad(get(stock.st)),
  name = stock.st,
  theme = myTheme
  )

# order sizing function
osFixedDollar <- function(timestamp, orderqty, portfolio, symbol, ruletype){
  pos = getPosQty(portfolio, symbol, timestamp)
  if(isTRUE(all.equal(pos, 0))){
    ClosePrice = as.numeric(Cl(mktdata[timestamp, ]))
    orderqty = sign(orderqty) * round(tradeSize / ClosePrice, -2)
  } else {
    orderqty = 0
  }
  return(orderqty)
}

lineChart(USO["2010"])
addBBands(n = 20, sd = 2)

# define indicators and signals

strat.st <- "bbands"
rm.strat(strat.st)

strategy(strat.st, store = TRUE)

add.indicator(
  strategy = strat.st,
  name = "BBands",
  arguments = list(HLC = quote(HLC(mktdata)), maType = "SMA"),
  label = "BBands"
)

# create a signal when the close > upper BBand (only at the first cross over)
add.signal(
  strategy = strat.st,
  name = "sigCrossover",
  arguments = list(columns = c("Close", "up"), relationship = "gt"),
  label = "Cl.gt.UpperBand"
)

# create a signal when the close is < the lower BBand (only at the first cross over)
add.signal(
  strategy = strat.st,
  name = "sigCrossover",
  arguments = list(columns = c("Close", "dn"), relationship = "lt"),
  label = "Cl.lt.LowerBand"
)

add.signal(
  strategy = strat.st,
  name = "sigCrossover",
  arguments = list(columns = c("High", "Low", "mavg"), relationship = "op"), # opposite side
  label = "Cross.Mid"
)

# Define the rules

add.rule(
  strategy = strat.st,
  name = "ruleSignal",
  arguments = list(
    sigcol = "Cl.gt.UpperBand", # enter a short when we are above the upper BBand
    sigval = TRUE,
    ORDERTQY = -100,
    ORDERTYPE = "market",
    orderside = NULL,
    threshold = NULL,
    osFUN = osFixedDollar,
    orderset = "ocoshort" # short side
    ),
  type = "enter",
  label = "SE"
)

add.rule(
  strategy = strat.st,
  name = "ruleSignal",
  arguments = list(
    sigcol = "Cl.lt.LowerBand", # enter a long when we are below the lower BBand
    sigval = TRUE,
    orderqty = 100,
    ordertype = "market",
    orderside = NULL,
    threshold = NULL,
    osFUN = osFixedDollar,
    orderset = "ocolong"# long side
  ),
  type = "enter",
  label = "LE"
)


add.rule(
  strategy = strat.st,
  name = "ruleSignal",
  arguments = list(
    sigcol = "Cross.Mid",
    sigval = TRUE,
    orderqty = "all",
    ordertype = "market",
    orderside = NULL,
    threshold = NULL
  ),
  type = "exit"
)

# Define distributions

add.distribution(
  strategy = strat.st,
  paramset.label = "BBOPT",
  component.type = "indicator",
  component.label = "BBands",
  variable = list(n = seq(10, 30, by = 5)),
  label = "n"                                 # n number of periods
)

add.distribution(
  strategy = strat.st,
  paramset.label = "BBOPT",
  component.type = "indicator",
  component.label = "BBands",
  variable = list(sd = seq(1, 3, by = 0.5)),
  label = "sd"                                # sd to test in each n periods
)

# Walk forward analysis
# This is a wrapper for apply.paramset() and applyStrategy()
# args(walk.forward)

# parallel processing
# if(Sys.info()["sysname"] == "Windows"){
#   library(doParallel)
# } else {
#   library(doMC)
#   registerDoMC(cores = detectCores())
# }



rm.strat("opt")

initPortf(
  name = "opt",
  stock.st,
  initDate = initDate
)

initAcct(
  name = "opt",
  portfolios = "opt",
  initDate = initDate,
  initEq = initEq
)

initOrders(
  portfolio = "opt",
  initDate = initDate
)

?walk.forward
results <- walk.forward(
  strategy.st = strat.st,
  paramset.label = "BBOPT",
  portfolio.st = "opt",
  account.st = "opt",
  period = "years",     # unit of days, months or years etc.
  k.training = 4,       # number of training periods
  k.testing = 1,        # number of test periods
  nsamples = 0,         # number of sample param.combos to draw - 0 means all samples
  obj.func = function(x) {     which(x == max(x)) },
  #obj.fun = NULL,       # user provided function retuning the best para.combo
  #obj.args = NULL,      # user provided argument to obj.func
  audit.prefix = "wfa", # prefix to generate filenames for storage of audit data
  anchored = FALSE,     # whether to a fixed start or not for the trainijng window
  #include.insamples = NULL, # will run a full backtest for each param.combo in the paramset
  verbose = TRUE
)
库(quantstrat)
#图书馆(xtsExtra)
stock.st=c(“USO”)
货币(“美元”)
股票(stock.st,currency=“USD”,乘数=1)
系统设置(TZ=“UTC”)
initDate=“2006-12-31”
startDate=“2007-01-01”
endDate=“2013-12-31”
initEq=1000000
tradeSize=initEq/10
获取符号(
斯托克街,
from=起始日期,
截止日期
)
神话