[R-SIG-Finance] EndEquity lower than initEq despite positive p/l

G See gsee000 at gmail.com
Sun May 8 03:16:26 CEST 2011


In your code I changed

updateAcct(name=account.st, Dates='2007-07-01::2010-07-03') #old

to start on the startDate instead of initDate:

updateAcct(name=account.st, Dates='2007-07-02::2010-07-03') #new

The updateEndEq function is finding the location of the first row and then
subtracting 1 which returns

integer(0)

Then when it calls getEndEq with that value, 0 is returned.

So, in the updateEndEq function I changed

if (is.null(Dates))
        Dates = time(Account$summary)   #old

to:

if (is.null(Dates))
        Dates = time(Account$summary)[-1]  #new

Now your code works.  See attached

I don't know if that fix makes sense or if it will cause problems other
places in quantstrat, but it seems to work here.

Garrett

On Fri, May 6, 2011 at 2:24 PM, s <algotr8der at gmail.com> wrote:

> On 5/6/11 8:31 AM, Brian G. Peterson wrote:
> > Looks like a bug in initAcct.  My suspicion is that if the first row of
> > the Acct table had the initiEq, all else would work fine.
> >
> > We changed some things around there a couple months ago to deal with
> > multi-currency accounts (accounts with a different measurement currency
> > than portfolios) and with vectorizing as many of the calculations as
> > possible.  I'll look at the older code and see what changed.
> >
> > Thanks for the report.  As an institutional investor, I basically never
> > think about account equity.
> >
> > I'll try to get back to you later today once I've fixed it.
> >
> > Cheers,
> >
> >   - Brian
> Thank you Brian for taking a look at this. I appreciate your time.
>
> This problem feeds into other functionalities, which you probably
> already know but I thought I would provide more details just in case.
>
> For example:
>
> charts.PerformanceSummary(ROC(getAccount(account.st)$summary$End.Eq)[-1])
>
> What happens is that the call to log(x), where x is the daily equity
> value produces -Inf for Log(0) and NaN for log(-negative values). As a
> result the log(x) values you see below are fed to chart.TimeSeries where
> it fails.
>
> exiting from: checkData(R)
> Error in plot.window(xlim, ylim, xaxs = "r", log = logaxis) :
>  need finite 'ylim' values
>
> debug: {
>    if (type == "discrete") {
>        roc <- x/lag(x, n, na.pad = na.pad) - 1
>    }
>    if (type == "continuous") {
>        roc <- diff(log(x), n, na.pad = na.pad)
>    }
>    reclass(roc, x)
> }
>
> ----snippet of log(end equity) below ---
>
> 2008-09-30     -Inf
> 2008-10-01     -Inf
> 2008-10-02     -Inf
> 2008-10-03     -Inf
> 2008-10-06     -Inf
> 2008-10-07     -Inf
> 2008-10-08     -Inf
> 2008-10-09     -Inf
> 2008-10-10 8.191097
> 2008-10-13      NaN
> 2008-10-14      NaN
> 2008-10-15      NaN
> 2008-10-16      NaN
> 2008-10-17      NaN
> 2008-10-20      NaN
> 2008-10-21      NaN
> 2008-10-22      NaN
>
> ----snippet of end equity below ----
>
> 2008-09-30     0.00
> 2008-10-01     0.00
> 2008-10-02     0.00
> 2008-10-03     0.00
> 2008-10-06     0.00
> 2008-10-07     0.00
> 2008-10-08     0.00
> 2008-10-09     0.00
> 2008-10-10  3608.68
> 2008-10-13 -3053.23
> 2008-10-14 -2154.78
> 2008-10-15 -2518.47
> 2008-10-16  -705.72
> 2008-10-17  -671.87
> 2008-10-20   -20.29
> 2008-10-21 -1837.16
> 2008-10-22 -4495.50
>
> This leads me to think about the situation where initial equity is set
> correctly but draw downs have wiped out the equity and are again
> producing negative end equity values. In real life this wouldnt be an
> issue as your trading would end if that were to happen. But for purposes
> of backtesting I could set an initial equity value that could be easily
> wiped out by draw downs.  Not sure if you want to address that or leave
> it up to the user to set initial equity values that are appropriate for
> the size of their trading.
> > On Thu, 2011-05-05 at 17:51 -0700, algotr8der wrote:
> >> Okay - here is a bogus strategy just to test this -
> >>
> >> http://r.789695.n4.nabble.com/file/n3500326/bogusStrategy.RbogusStrategy.R
> >>
> >> a) portfolio_1 = IBM, UTX, CAT
> >>
> >> b) portfolio_2 = MSFT
> >>
> >> Indicators = 10 DSMA, 15 DSMA, 20 DSMA
> >>
> >> Rules
> >>
> >> a) if 10_DSMA Crosses Above 20_DSMA BUY stocks in portfolio_1 AND COVER
> >> existing SHORTS in portfolio_1
> >> b) if 10_DSMA Crosses Below 20_DSMA SELL existing long positions in
> >> portfolio_1 AND SHORT all stocks in portfolio_1
> >>
> >> c) if 15_DSMA Crosses Above 20_DSMA BUY stocks in portfolio_2 AND COVER
> >> existing SHORTS in portfolio_2
> >> d) if 15_DSMA Crosses Below 20_DSMA SELL existing long positions in
> >> portfolio_2 AND SHORT all stocks in portfolio_2
> >>
> >> Once you have updated the portfolios and accounts type the following:
> >>
> >>> getAccounts(account.st)
> >> Look at the 'End.Eq' column (this is the last column). You will see that
> the
> >> portfolio begins with 0 as the initial value and each day's p/l is added
> to
> >> 0 until the last day.
> >>
> >> 2010-07-02         -989.49  85836.10
> >>
> >> Maybe I am misunderstanding something but it appears to me that the p/l
> of
> >> this strategy = 85836.10 and so that amount should be added to the
> initEq.
> >>
> >> In my real strategy I know the p/l is ~34800, which should be added to
> the
> >> initEq.
> >>
> >>
> >>
> >>
> >>
> >>
> >> --
> >> View this message in context:
> http://r.789695.n4.nabble.com/EndEquity-lower-than-initEq-despite-positive-p-l-tp3499089p3500326.html
> >> Sent from the Rmetrics mailing list archive at Nabble.com.
> >>
> >> _______________________________________________
> >> 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.
>
> _______________________________________________
> 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.
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20110507/3c403839/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: algotr8der_bugfix.r
Type: application/octet-stream
Size: 7293 bytes
Desc: not available
URL: <https://stat.ethz.ch/pipermail/r-sig-finance/attachments/20110507/3c403839/attachment.obj>


More information about the R-SIG-Finance mailing list