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 [email protected], "wml67" <y...@...> 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!
>