[R-SIG-Finance] apply.paramset.signal.analysis error
Joshua Ulrich
josh.m.ulrich at gmail.com
Wed Aug 3 02:07:41 CEST 2016
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
More information about the R-SIG-Finance
mailing list