[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

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@xxx> 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/

Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/