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

Joshua Ulrich josh.m.ulrich at gmail.com
Tue Sep 30 17:34:36 CEST 2014


 Tue, Sep 30, 2014 at 10:25 AM, Derek Wong <treydog999 at gmail.com> wrote:
> 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'
>
You're posting in HTML, which the posting guild tells you not to do.
The list server must convert your HTML into plain text, which often
mangles your original message.  For example, look at how your message
was received at Nabble:
http://r.789695.n4.nabble.com/quantstrat-help-simple-combine-error-using-windows-and-walk-forward-td4697468.html

> 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.
>
As I said in our personal correspondence, "the problem is that the
calcRatio function is not being exported to the nodes.  This is
probably related to bug #5814
(https://r-forge.r-project.org/tracker/index.php?func=detail&aid=5814&group_id=316&atid=1269)."

This is going to be a problem with a socket cluster on any operating
system.  It will work if you don't run in parallel, or if you run on
almost anything other than a socket cluster (e.g. redis, fork
[multicore], etc).

Best,
Josh


> 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]]
>
> _______________________________________________
> 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



More information about the R-SIG-Finance mailing list