[R-SIG-Finance] apply.paramset.signal.analysis error
Erol Biceroglu
erol.biceroglu at alumni.utoronto.ca
Wed Aug 3 02:30:33 CEST 2016
Thank you Joshua for the quick response, and for pointing out the missing
objective function, it works great now.
Erol Biceroglu
*erol.biceroglu at alumni.utoronto.ca
<erol.biceroglu at alumni.utoronto.ca>416-275-7970*
On Tue, Aug 2, 2016 at 8:07 PM, Joshua Ulrich <josh.m.ulrich at gmail.com>
wrote:
> On Tue, Aug 2, 2016 at 5:27 PM, Joshua Ulrich <josh.m.ulrich at gmail.com>
> wrote:
> > Hi Erol,
> >
> > On Mon, Aug 1, 2016 at 7:18 PM, Erol Biceroglu
> > <erol.biceroglu at alumni.utoronto.ca> wrote:
> >> 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.
> >>
> > Thanks for the reproducible example. This looks like a bug when
> > include.day.of.signal = TRUE. I'll investigate.
> >
> Thanks for the report. This should now be fixed in quantstrat on GitHub.
>
> Please note that your call to apply.paramset.signal.analysis does not
> have a value for the obj.fun argument, which is required. You can add
> obj.fun = signal.obj.slope as an example.
>
> >> 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]]
> >>
> >> _______________________________________________
> >> R-SIG-Finance at r-project.org mailing list
> >> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> >> -- Subscriber-posting only. If you want to post, subscribe first.
> >> -- Also note that this is not the r-help list where general R questions
> should go.
> >
> >
> >
> > --
> > Joshua Ulrich | about.me/joshuaulrich
> > FOSS Trading | www.fosstrading.com
> > R/Finance 2016 | www.rinfinance.com
>
>
>
> --
> Joshua Ulrich | about.me/joshuaulrich
> FOSS Trading | www.fosstrading.com
> R/Finance 2016 | www.rinfinance.com
>
[[alternative HTML version deleted]]
More information about the R-SIG-Finance
mailing list