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

s algotr8der at gmail.com
Fri May 6 21:24:10 CEST 2011


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.R bogusStrategy.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.



More information about the R-SIG-Finance mailing list