--- In amibroker@xxxxxxxxx ps.com, B S
<bs2167@xxx> wrote:
>
> Thanks Tomasz. One stupid follow up question: my understanding
is that StaticVarSet will take only a single number not an array,
therefore do i need to create a loop outside the CBT from 0 to BarCount
- 1 and create a static variable for every bar as follows?
>
> StaticVarSet( "MyAtr"+Name( )+BarIndex() , ATR(14) );
>
> ____________ _________ _________ __
> From: Tomasz Janeczko groups@xxx
> To: amibroker@xxxxxxxxx ps.com
> Sent: Wed, January 20, 2010 6:06:41 PM
> Subject: Re: [amibroker] CBT - trade.addcustommetr ic() - 13x
slower - bad code/settings?
>
> Â
> Hello,
>
> Foreign is costly. Move your calculations OUTSIDE custom backtest
part.
> ATR can easily be calculated outside CBT and passed via Static
variable.
>
> So instead of Foreign use Static variables. Store your ATR into
static variables keyed with
>
> StaticVarSet( "MyAtr"+Name( ), ATR(14) );
>
> and inside custom backtester use StaticVarGet( "MyAtr"+trade.
Symbol);
>
> Best regards,
> Tomasz Janeczko
> amibroker.com
>
> On 2010-01-20 23:39, B S wrote:
> Hi-
> >
> >I have run into some major performance problems when trying to
add a single simple metric to the backtest results. I have no doubt
that its something I'm doing, I just have no idea what that might be.Â
I have seen a post or two in the past on how to accomplish what I'm
trying to do (as the examples below will replicate), but there was no
follow up on the performance of the proposed solutions. Since there
was no further discussion, I'm wondering if the code is fine but my
settings (or something else) may be causing the problem. Below I list
what I believe to be all pertinent information - would very much
appreciate any help on this.
> >
> >Base system is tested on 5 symbols, 5min data, from 1/1/2000 -
12/31/2006. Quick AFL is checked in the setting and data is padded
and aligned. I'm running the 64bit version of AB 5.22.Â
> >
> >Performance without calling CBT : 65 secs
> >
> >------------ --------- --------- --------- --------- ---
> >
> >Performance with the code below added: 72 secs (very good)
> >(code is from
http://www.. amibroke r.org/userkb/ 2008/03/16/
amibroker- custom-backteste r-interface- 2/Â )Â
> >SetCustomBacktestPr oc("");
> >if (Status("action" ) == actionPortfolio)
> >{
> > bo = GetBacktesterObject (); // Get backtester object
> > bo.Backtest( True); // Run backtests with no trade listing
> > stat = bo.GetPerformanceSt ats(0); // Get Stats object for
all trades
> > winAvgProfit = stat.GetValue( "WinnersAvgProfi t");
> > loseAvgLoss = stat.GetValue( "LosersAvgLoss" );
> > for (trade = bo.GetFirstTrade( ); trade; trade =
bo.GetNextTrade( ))
> > { // Loop through all closed trades
> > prof = trade..GetProfit( ); // Get trade profit in dollars
> > relProf = 0; // This will be profit/avgProfit as %
> > if (prof > 0) // If a winner (profit > 0)
> > relProf = prof / winAvgProfit * 100; // Profit relative to
average
> > else // Else if a loser (profit <= 0)
> > relProf = -prof / loseAvgLoss * 100; // Loss relative to
average
> > trade.AddCustomMetr ic("Rel Avg Profit%", relProf); // Add
metric
> > } // End of for loop over all trades
> > bo.ListTrades( ); // Generate list of trades
> >}
> >------------ --------- --------- --------- --------- ---------
--------- --------- --------- --------- ------
> >Performance with the code below added to record ATR at entry:
854 secsSetCustomBackte stPr oc("");
> >if(Status("action" ) == actionPortfolio)
> >{
> >bo = GetBacktesterObject ();
> >bo.Backtest( True);
> >dates = DateTime();
> >bi = BarIndex();
> >for(trade = bo.GetFirstTrade( ); trade; trade =
bo.GetNextTrade( ))
> >{
> >SetForeign(trade. Symbol) ;
> >entryBar = LastValue(ValueWhen (trade.EntryDate Tim e ==
dates, bi));
> >foreignATR = ATR(14);
> >trade.AddCustomMetr ic("Entry ATR",foreignATR[ entryBar] );
> >RestorePriceArrays( );
> >}
> >bo.ListTrades( );
> >}
> >Anyone have any ideas where I may be going wrong?
> >Â
> >
>