[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: HighestBars() on equity - before the first trade



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/





Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___