[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