PureBytes Links
Trading Reference Links
|
Hmm. I should have read your original post in detail before trying to reply.
I think that the follwoing will give you what your were really asking for:
SetCustomBacktestProc("");
if (Status("action") == actionPortfolio) { bo = GetBacktesterObject(); bo.Backtest();
initialEq = GetOption("initialEquity");
eq = Foreign("~~~Equity", "C"); highEq = Highest(eq); initialDD = ExRem(eq < initialEq, eq >= initialEq); duration = IIF(highEq > initialEq, HighestBars(eq), BarsSince(initialDD) + 1); longest = LastValue(Highest(duration));
bo.addCustomMetric("Longest DD", longest); } --- In amibroker@xxxxxxxxxxxxxxx, "sfclimbers" <sfclimbers@xxx> wrote: > > Actually, now that I cheat and look at the solution that Tomasz used in his Portfolio.afl, (see Equity folder in your Charts tab) you can replace: > > highEq = Highest(eq); > newHigh = highEq > Ref(highEq, -1); > duration = BarsSince(newHigh); > > with just: > > duration = HighestBars(eq); > > The difference being that in my original code, you will miss the first drawdown if your trades take you negative right away. > > If you like his charting too, replace the Plot with: > > Plot(duration, "DD Duration", colorDarkYellow, styleLine | styleOwnScale, 0, 10 * LastValue( Highest( duration ) ) ); > > Mike > > --- In amibroker@xxxxxxxxxxxxxxx, "sfclimbers" sfclimbers@ wrote: > > > > > > Try somethign like the following. The charting stuff is just for > > validation. The part you need is in the custom backtester code. > > > > Buy = DayOfWeek() == 1; > > Sell = DayOfWeek() == 5; > > > > eq = Foreign("~~~Equity", "C"); > > highEq = Highest(eq); > > newHigh = highEq > Ref(highEq, -1); > > duration = BarsSince(newHigh); > > > > Plot(eq, "Equity", colorDarkGrey, styleLine); > > Plot(highEq, "Highest", colorRed); > > Plot(duration, "DD Duration", colorBlue, styleOwnScale); > > PlotShapes(shapeSmallCircle * newHigh, colorRed, 0, graph0, 0); > > > > SetCustomBacktestProc(""); > > > > if (Status("action") == actionPortfolio) { > > bo = GetBacktesterObject(); > > bo.Backtest(); > > > > eq = Foreign("~~~Equity", "C"); > > highEq = Highest(eq); > > newHigh = highEq > Ref(highEq, -1); > > duration = BarsSince(newHigh); > > longest = LastValue(Highest(duration)); > > > > bo.addCustomMetric("Longest DD", longest); > > } > > > > Mike > > > > > > --- In amibroker@xxxxxxxxxxxxxxx, "wml67" <ywml@> wrote: > > > > > > I'm trying to determine the longest drawdown period in the backtest, > > here's the code snippet: > > > > > > bslh = HighestBars(Foreign("~~~EQUITY", "C")); // # bars since last > > high > > > ldd = Highest(bslh); // longest drawdown to date, array > > > lbn = LastValue(BarIndex()); // last bar number > > > longestDD = ldd[lbn]; // longest drawdown in the test period, value > > > > > > This sorta works, except when there's a long flat period preceding the > > first trade, because HighestBars() treats such periods as drawdowns and > > increases the counter, even though there were NO higher value in the > > past! Say, my initial equity is 100,000 and the first trade occurs 2 > > months after the start of the backtest period. HighestBars on the date > > preceding the first trade will be 60, which will exceed my actual > > longest drawdown (if I have any luck), and screw up my stats. > > > > > > What am I overlooking this time? Many thanks! > > > > > >
__._,_.___
**** IMPORTANT PLEASE READ ****
This group is for the discussion between users only.
This is *NOT* technical support channel.
TO GET TECHNICAL SUPPORT send an e-mail directly to
SUPPORT {at} amibroker.com
TO SUBMIT SUGGESTIONS please use FEEDBACK CENTER at
http://www.amibroker.com/feedback/
(submissions sent via other channels won't be considered)
For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/
__,_._,___
|