Портфолио apply.paramset не найдено - PullRequest
0 голосов
/ 14 февраля 2019

Хорошо, я следовал примеру стратегии для quantstrat, когда пытался запустить приведенный ниже код: это работает нормально, но .... когда я пытаюсь обновить портфолио / учетную запись или просто получить книгу заказов из портфеля, он говорит: «Портфолио»....не найдено".В любом случае, вот мой полный код (скопировано с автора):

Sys.setenv(TZ= "UTC")
currency('USD')
init_date <- "2007-12-31"
start_date <- "2008-01-01"
end_date <- "2009-12-31"
init_equity <- 1e4 
adjustment <- TRUE

symbols <- c("IWM","QQQ","SPY")
getSymbols(Symbols = symbols,src = "yahoo", index.class = "POSIXct",
       from = start_date,to = end_date, adjust = adjustment)
stock(symbols, currency = "USD",multiplier = 1)

.fast <- 10
.slow <- 30
.threshold <- 0.0005
.orderqty <- 100
.txnfees <- -10
.stoploss <- 3e-3

.StopLoss<- seq(0.05,0.6,length.out=48)/100
strategy.st <- "Luxor.Stop.Loss.Opt."
portfolio.st <- "Luxor.Stop.Loss.Opt."
account.st  <- "Luxor.Stop.Loss.Opt."
rm.strat(portfolio.st)
rm.strat(account.st)

initPortf(name = portfolio.st,symbols = symbols,initDate = init_date)
initAcct(name = account.st,portfolios = portfolio.st,initDate = init_date)
initOrders(portfolio = portfolio.st,initDate = init_date)
strategy(strategy.st, store = TRUE)

add.indicator(strategy.st, name = "SMA",arguments = list(x = quote(Cl(mktdata)),
          n = .fast),label = "nFast")
add.indicator(strategy.st, name = "SMA",arguments = list(x = quote(Cl(mktdata)),
          n = .slow),label = "nSlow")

add.signal(strategy.st, name = "sigCrossover",arguments = 
       list(columns = c("nFast", "nSlow"),relationship = "gte"),
       label = "long")
add.signal(strategy.st, name = "sigCrossover",arguments = 
       list(columns = c("nFast", "nSlow"),relationship = "lt"),
       label = "short")

add.rule(strategy.st, name = "ruleSignal",arguments = list(sigcol = "long" , 
  sigval = TRUE,replace = FALSE,orderside = "long" ,ordertype = "stoplimit",
  prefer = "High",threshold = .threshold,TxnFees = .txnfees,
  orderqty = +.orderqty,osFUN = osMaxPos,orderset = "ocolong"),
  type = "enter",label = "EnterLONG")

add.rule(strategy.st, name = "ruleSignal",arguments = list(sigcol = "short", 
  sigval = TRUE,replace = FALSE,orderside = "short",ordertype = "stoplimit",
  prefer = "Low",threshold = .threshold,TxnFees = .txnfees,
  orderqty = -.orderqty,osFUN = osMaxPos,orderset = "ocoshort"),
  type = "enter",label = "EnterSHORT")

add.rule(strategy.st,name = "ruleSignal",arguments = list(sigcol = "short", 
  sigval = TRUE,replace = TRUE,orderside = "long" ,ordertype = "market",
  TxnFees = .txnfees,orderqty = "all",orderset = "ocolong"),type = "exit",
  label = "Exit2SHORT")

add.rule(strategy.st, name = "ruleSignal",arguments = list(sigcol = "long", 
  sigval = TRUE,replace = TRUE,orderside = "short",ordertype = "market",
  TxnFees = .txnfees,orderqty = "all",orderset = "ocoshort"),type = "exit",
  label = "Exit2LONG")

add.rule(strategy.st, name = "ruleSignal",arguments = list(sigcol = "long" , 
sigval = TRUE,replace = FALSE,orderside = "long",ordertype = "stoplimit",
tmult = TRUE,threshold = quote(.stoploss),TxnFees = .txnfees,
orderqty = "all",orderset = "ocolong"),type = "chain", parent = "EnterLONG",
label = "StopLossLONG",enabled = FALSE)

add.rule(strategy.st, name = "ruleSignal",arguments = list(sigcol = "short", 
sigval = TRUE,replace = FALSE,orderside = "short",ordertype = "stoplimit",
tmult = TRUE,threshold = quote(.stoploss),TxnFees = .txnfees,
orderqty = "all",orderset = "ocoshort"),type = "chain", parent = "EnterSHORT",
label = "StopLossSHORT",enabled = FALSE)

for(symbol in symbols){
addPosLimit(portfolio = portfolio.st,symbol = symbol,timestamp = init_date,
          maxpos = .orderqty)

}

И, наконец, параметры / ограничения

add.distribution(strategy.st,
             paramset.label = "StopLoss",
             component.type = "chain",
             component.label = "StopLossLONG",
             variable = list(threshold = .StopLoss),
             label = "StopLossLONG")
add.distribution(strategy.st,
             paramset.label = "StopLoss",
             component.type = "chain",
             component.label = "StopLossSHORT",
             variable = list(threshold = .StopLoss),
             label = "StopLossSHORT")
add.distribution.constraint(strategy.st,
             paramset.label = "StopLoss",
             distribution.label.1 = "StopLossLONG",
             distribution.label.2 = "StopLossSHORT",
             operator = "==",
             label = "StopLoss")

enable.rule(strategy.st, 'chain', 'StopLoss')

 results <- apply.paramset(strategy.st, 
                        paramset.label = "StopLoss", 
                        portfolio.st = portfolio.st, 
                        account.st = account.st, 
                        nsamples = .nsamples, 
                        verbose = TRUE)

Я думал, что все в порядке.Но теперь начинаются проблемы: каждый раз, когда я пытаюсь сделать любое из следующего: а) получить портфель, б) портфель заказов портфеля, в) обновить портфель.st/account.st или г) просто построить график с помощью "chart.Posn" Iвсегда получаю одно и то же сообщение об ошибке:

Error in .getPortfolio(Portfolio, envir = envir) : 
Portfolio Luxor.Stop.Loss.Opt. not found, use initPortf() to create a new    portfolio

ПОЧЕМУ ?????Я совершенно новичок в Quantstrat, так что здесь есть что понять.Однако до сих пор мне удалось запустить все, кроме этой части.Есть ли здесь ангел, который может мне помочь?

...