Garrett, Thank you for your patch. I have applied it as svn r601 on R-Forge. It is safe enough as far as it goes, though there is more work to do to really eliminate the issues.
You correctly figured out that a Dates range on the startDate rather than the initDate does not cause the problem. Your patch fixes the issue if Dates is NULL (the default). I'll need to do a little more work to detect if the Dates range that is passed in includes the first index, and remove it. But this is a good start. Thanks again, - Brian On Sat, 2011-05-07 at 20:16 -0500, G See wrote: > 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 <[email protected]> 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.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. > >> > >> _______________________________________________ > >> [email protected] 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. > > _______________________________________________ > [email protected] 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. > > > -- Brian G. Peterson http://braverock.com/brian/ Ph: 773-459-4973 IM: bgpbraverock _______________________________________________ [email protected] 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.
