[R-SIG-Finance] apply.paramset.signal.analysis error

Erol Biceroglu erol.biceroglu at alumni.utoronto.ca
Tue Aug 2 02:18:26 CEST 2016


Hello,

I've updated to the latest quanstrat, and still get an error using
apply.paramset.signal.analysis:

Error in post.signal.returns(signals = .sig.list[[name.ref]][,
paste(symbols[j],  :
  number of items to replace is not a multiple of replacement length


applyStrategy works, apply.paramset works, however I can't get the signal
portion working and was wondering if anyone knew what the error was.

When I run debug, the problem occurs in *post.signal.returns*, on the final
signal.ret[j,] = tryCatch, where the tryCatch returns an xts object with 5
rows, and it wants to update signal.ret[j,] which is length 6.

Any feedback would be greatly appreciated.  Thanks for your help.

Here's my sessionInfo():

####

> sessionInfo()R version 3.3.1 (2016-06-21)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Ubuntu 14.04.4 LTS

locale:
 [1] LC_CTYPE=en_CA.UTF-8       LC_NUMERIC=C
LC_TIME=en_CA.UTF-8
 [4] LC_COLLATE=en_CA.UTF-8     LC_MONETARY=en_CA.UTF-8
LC_MESSAGES=en_CA.UTF-8
 [7] LC_PAPER=en_CA.UTF-8       LC_NAME=C
LC_ADDRESS=C
[10] LC_TELEPHONE=C             LC_MEASUREMENT=en_CA.UTF-8
LC_IDENTIFICATION=C

attached base packages:
[1] parallel  stats     graphics  grDevices utils     datasets
methods   base

other attached packages:
 [1] doParallel_1.0.10             iterators_1.0.8
quantstrat_0.9.1739
 [4] foreach_1.4.3                 blotter_0.9.1695
FinancialInstrument_1.2.0
 [7] quantmod_0.4-5                TTR_0.23-1
PerformanceAnalytics_1.4.3541
[10] xts_0.9.874                   zoo_1.7-13

loaded via a namespace (and not attached):
[1] compiler_3.3.1   tools_3.3.1      codetools_0.2-14 grid_3.3.1
 lattice_0.20-33

####

Here's the MRE:
#################################

library(xts)
library(PerformanceAnalytics)
library(quantmod)
library(TTR)
library(quantstrat)

getSymbols(Symbols = "SPY", from = "2000-01-01")


startDate<-as.Date(index(SPY)[1], format="%Y-%m-%d")
endDate<-as.Date(index(last(SPY)), format="%Y-%m-%d")

currency("USD")

stock(primary_id = c("SPY"),currency = "USD")

#name
maStrategy <-"MAStrategy"

#Date, one day before prices
strategyDate <- min(index(SPY)) - 1

NumSh<-1

#rm.strat(maStrategy)
#rm(mktdata)


maLag <- 5


#init portfolio and account
initPortf(name = maStrategy
          , symbols = list("SPY") #as defined in Financial instrument
          , initDate = strategyDate
)

initAcct(name = maStrategy
         ,portfolios = maStrategy
         ,initDate = strategyDate
         ,initEq = 1
)

#order book, and strategy
initOrders(portfolio = maStrategy
           , initDate = strategyDate
)

#position limits
addPosLimit(maStrategy, symbol = "SPY", strategyDate, maxpos = NumSh,
longlevels = NumSh, minpos = 0)

strategy( maStrategy, store = TRUE)

#add indicator
add.indicator(strategy = maStrategy
              , name = "EMA"
              , arguments = list(x = quote(mktdata$SPY.Close), n =
quote(maLag))
              , label = "SPYma"
)




add.signal(strategy = maStrategy
           , name = "sigComparison"
           , arguments = list(columns = c("SPY.Close","SPYma")
                              , relationship = "gt"
           )
           , label = "SPY.gt.ma"
)



add.signal(strategy = maStrategy
           , name = "sigComparison"
           , arguments = list(columns = c("SPY.Close","SPYma")
                              , relationship = "lte"
           )
           , label = "SPY.lte.ma"
)




#Entry and exit rules


add.rule(strategy = maStrategy
         , name = "ruleSignal"
         , arguments = list(sigcol = "SPY.gt.ma"
                            , sigval = TRUE
                            , orderqty = NumSh
                            , ordertype = "market"
                            , orderside = NULL
                            , osFUN = "osMaxPos"
                            , symbol = "SPY"
         )
         , type = "enter"
)


add.rule(strategy = maStrategy
         , name = "ruleSignal"
         , arguments = list(sigcol = "SPY.lte.ma"
                            , sigval = TRUE
                            , orderqty = "all"
                            , ordertype = "market"
                            , orderside = NULL
                            , osFUN = "osMaxPos"
                            , symbol = "SPY"
         )
         , type = "exit"
)


applyStrategy(strategy = maStrategy
              , portfolios = maStrategy
)

updatePortf(maStrategy)
updateAcct(maStrategy)
updateEndEq(maStrategy)


maLag <- seq(5,10,1)
####################
#delete.paramset(maStrategy,"maLagDist")
add.distribution(strategy = maStrategy
                 , paramset.label = "maLagDist"
                 , component.type = "indicator"
                 , component.label = "SPYma"
                 , variable = list(n = maLag)
                 , label = "lagDist"

)



library(foreach)
library(doParallel)
cl <- makeForkCluster(nnodes = detectCores())
registerDoParallel(cl)
maStrategyAP <-
  apply.paramset(strategy.st = maStrategy
                 , paramset.label = "maLagDist"
                 , portfolio.st = maStrategy
                 , account.st = maStrategy
  )
stopCluster(cl = cl)
cl <- NULL
closeAllConnections()
gc()


#this works
maStrategyAP$tradeStats$Profit.To.Max.Draw


head(mktdata)

#undebug(apply.paramset.signal.analysis)
maStrategyAPSA <-
  apply.paramset.signal.analysis(strategy.st = maStrategy
                                 , paramset.label = "maLagDist"
                                 , portfolio.st = maStrategy
                                 , sigcol = "SPY.gt.ma"
                                 , sigval = 1
                                 , on = NULL
                                 , forward.days = 5
                                 , include.day.of.signal = TRUE
  )


##################################



Erol Biceroglu

	[[alternative HTML version deleted]]



More information about the R-SIG-Finance mailing list