Thanks, Alexander. I'l look into it.
On Thu, Jul 4, 2013 at 4:43 PM, Borg Alexander <[email protected]>wrote: > Maximum Intraday Drawdown > ---------------------------------------- > > Months ago we had a discussion about drawdowns. Eventually I had time to > take a closer look at it. > > After inspecting the code, I have come to the conclusion that the figures > presented under the heading 'Max DD' are actually 'Max EndOfDay Losses', > and, in the case of two or more successive negative days, I think it would > show the cumulated loss for that period (although I have not examined this > in detail). > > After having experienced some intraday drawdowns, I wanted to know what > the actual intraday drawdowns for a longer backtest period would be. I have > found that, for the typical anti-trend strategies that are presented here, > these drawdowns are 2-3 times higher than the reported 'Max EndOfDay > Losses' under the heading 'Max DD'. > > This is not meant to criticise JBookTrader, but just to make a great > product even better. > > If you want to check the actual maximum drawdowns of your strategies, > you might want to implement the following changes: > > (1) In Strategy.java, method 'processInstant(...)', replace > > onBookSnapshot(); > positionManager.trade(); > by > > onBookSnapshot(); > > //AB Begin July 4, 2013 - in order to update drawdown > int position = positionManager.getCurrentPosition(); > if (position != 0) > > performanceManager.updatePositionValue(getMarketBook().getSnapshot().getPrice(), > position); > //AB End > > positionManager.trade(); > > (2) In PerformanceManager.java, replace > > private double peakNetProfit, maxDrawdown; > by > > private double peakNetProfit, maxDrawdown, currentDrawdown; > > (3) In PerformanceManager.java, replace > > public void updatePositionValue(double price, int position) { > positionValue = position * price * multiplier; > } > > by > > public void updatePositionValue(double price, int position) { > positionValue = position * price * multiplier; > > //AB Begin July 4, 2013 : calculate drawdown > netProfit = getNetProfit(); > if (netProfit > peakNetProfit) peakNetProfit = netProfit; > else { > currentDrawdown = peakNetProfit - netProfit; > if (currentDrawdown > maxDrawdown) maxDrawdown = > currentDrawdown; > } > //AB End > > } > > (4) In PerformanceManager.java, method updateOnTrade, comment out the two > lines in the middle > > //AB Begin July 4, 2013 - drawdown calculated elsewhere, obsolete > statements > //peakNetProfit = Math.max(netProfit, peakNetProfit); > //maxDrawdown = Math.max(maxDrawdown, peakNetProfit - netProfit); > //AB End > Eugene mentioned elsewhere that he has not implemented actual intraday > drawdown because of optimizing performance impacts. I could not confirm > this so far. However, as drawdown is calculated only while a position is > open, i.e. about 3% of the time, I believe and hope that it will not have a > big influence. > > Eugene, would you please take a look to see if these modifications > are correct. Thank you! > > > -- > You received this message because you are subscribed to the Google Groups > "JBookTrader" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/jbooktrader. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- You received this message because you are subscribed to the Google Groups "JBookTrader" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/jbooktrader. For more options, visit https://groups.google.com/groups/opt_out.
