[R-SIG-Finance] quantstrat help - simple combine error using windows and walk.forward

Derek Wong treydog999 at gmail.com
Tue Sep 30 17:25:34 CEST 2014


Mark,

Thank you for the reply. I really appreciate you taking the time to look at
it. However in my previous email/post and my current code I do not see a
line that shows

portfolio1.st <- 'pair1'account.st <- 'pairs'

they should be two separate lines. Either way I have run the entire code
and will show the area I am focusing on. Which is the end using the
walk.forward() function, as everything else in the code runs perfectly for
me using R 3.1.1 in windows or ubuntu.

Code I am focusing on:

# Objective Function
my.obj.func <- function(x)
{
  # pick one of the following objective functions (uncomment)

  #return(max(x$tradeStats$Max.Drawdown) == x$tradeStats$Max.Drawdown)

  return(max(x$tradeStats$Net.Trading.PL) == x$tradeStats$Net.Trading.PL)

}

#WFA
require(doParallel)
cl <- makePSOCKcluster(2)
registerDoParallel(cl)

result <- walk.forward(pairStrat,
                       paramset.label = "BBOPT",
                       portfolio.st = portfolio1.st,
                       account.st = account.st,
                       period = "months",
                       k.training = 6,
                       k.testing = 3,
                       obj.func = my.obj.func,
                       obj.args = list(x=quote(result$apply.paramset)),
                       audit.prefix = "wfa",
                       anchored = FALSE,
                       verbose = TRUE)


Output below:
> # Objective Function
> my.obj.func <- function(x)
+ {
+   # pick one of the following objective functions (uncomment)
+
+   #return(max(x$tradeStats$Max.Drawdown) == x$tradeStats$Max.Drawdown)
+
+   return(max(x$tradeStats$Net.Trading.PL) == x$tradeStats$Net.Trading.PL)
+
+ }
>
> #WFA
> require(doParallel)
> cl <- makePSOCKcluster(2)
> registerDoParallel(cl)
>
> result <- walk.forward(pairStrat,
+                        paramset.label = "BBOPT",
+                        portfolio.st = portfolio1.st,
+                        account.st = account.st,
+                        period = "months",
+                        k.training = 6,
+                        k.testing = 3,
+                        obj.func = my.obj.func,
+                        obj.args = list(x=quote(result$apply.paramset)),
+                        audit.prefix = "wfa",
+                        anchored = FALSE,
+                        verbose = TRUE)
[1] "=== training BBOPT on 2009-01-02/2009-06-30"
automatically exporting the following variables from the local environment:
  account, account.st, calc, env.instrument, mktdata, orderbook,
paramset.label, portfolio, portfolio.st, strategy, user.args, user.func
explicitly exporting variables(s): clone.portfolio, clone.orderbook,
install.param.combo
numValues: 180, numResults: 0, stopped: TRUE
got results for task 1
numValues: 180, numResults: 1, stopped: TRUE
returning status FALSE
got results for task 2
<SNIP>
got results for task 180
numValues: 180, numResults: 180, stopped: TRUE
first call to combine function
evaluating call object to combine results:
  fun(result.1, result.2, result.3, result.4, result.5, result.6,
   <SNIP>
    result.177, result.178, result.179, result.180)
error calling combine function:
<simpleError in fun(result.1, result.2, result.3, result.4, result.5,
result.6,     result.7, result.8, result.9, result.10, result.11,
result.12,     result.13, result.14, result.15, result.16, result.17,
result.18,     result.19, result.20, result.21, result.22,
<SNIP>
result.171,     result.172, result.173, result.174, result.175, result.176,
    result.177, result.178, result.179, result.180): attempt to select less
than one element>
Error in walk.forward(pairStrat, paramset.label = "BBOPT", portfolio.st =
portfolio1.st,  :
  obj.func() returned empty result
In addition: Warning messages:
1: In e$fun(obj, substitute(ex), parent.frame(), e$data) :
  already exporting variable(s): env.instrument
2: In max(x$tradeStats$Net.Trading.PL) :
  no non-missing arguments to max; returning -Inf



Thanks again

Derek

On Tue, Sep 30, 2014 at 8:20 AM, Mark Knecht <markknecht at gmail.com> wrote:

> On Tue, Sep 30, 2014 at 12:34 AM, Derek Wong <treydog999 at gmail.com> wrote:
> > Hello,
> >
> > I have been able to reproduce this error in Ubuntu based system as well
> not
> > just on windows. I was wondering if anyone had any insights or ways to to
> > solve this or create a work around.  If there is any additional
> information
> > you require let me know. Please I would really appreciate help on this.
> It
> > is totally out of my depth and I am hoping that this fine community can
> > help.
> >
>
> Derek,
>    I have no time to do any debugging of this but the first error on my
> Gentoo system running RStudio and R-3.1.1 is actually this line:
>
> portfolio1.st <- 'pair1'account.st <- 'pairs'
>
> which does look like bad code to me.
>
>    One 'problem' with a number of demos that are out there is that the demo
> author may be using the development version of a specific package which
> then results in end user types (like me) having problems.
>
>    I suggest you run this code line-by-line and then post back a few lines
> preceding the breakdown. Maybe someone can give better input than
> I can. Also, please edit/snip your responses to add focus to the exact
> issue.
>
> Good luck,
> Mark
>
> > On Wed, Sep 24, 2014 at 9:36 PM, Derek Wong <treydog999 at gmail.com>
> wrote:
> >
> >> Hello,
> >>
> >> I am having a lot of trouble with using walk.forward.in windows. i get
> >> the following error. This may be related to bug #5814. If someone could
> >> please help me i would really appreciate it. The reproducible code
> below is
> >> based on the pair_trade example. Thanks.
> >>
> >> error calling combine function:
> >> <simpleError in fun(result.1, result.2, result.3, result.4, result.5,
> >> result.6,     result.7, result.8, result.9, result.10, result.11,
> <SNIP>
> >> result.172, result.173, result.174, result.175, result.176,
>  result.177,
> >> result.178, result.179, result.180): attempt to select less than one
> >> element>
> >> Error in walk.forward(pairStrat, paramset.label = "BBOPT", portfolio.st
> =
>

	[[alternative HTML version deleted]]



More information about the R-SIG-Finance mailing list