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

[amibroker] CBT - trade.addcustommetric() - 13x slower - bad code/settings?


  • Date: Wed, 20 Jan 2010 14:39:23 -0800 (PST)
  • From: B S <bs2167@xxxxxxxxx>
  • Subject: [amibroker] CBT - trade.addcustommetric() - 13x slower - bad code/settings?

PureBytes Links

Trading Reference Links



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)
SetCustomBacktestProc("");
if (Status("action") == actionPortfolio)
{
    bo = GetBacktesterObject();	//  Get backtester object
    bo.Backtest(True);			//  Run backtests with no trade listing
    stat = bo.GetPerformanceStats(0);	//  Get Stats object for all trades
    winAvgProfit = stat.GetValue("WinnersAvgProfit");
    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.AddCustomMetric("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 secs

SetCustomBacktestProc("");

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.EntryDateTime == dates, bi));

foreignATR = ATR(14);

trade.AddCustomMetric("Entry ATR",foreignATR[entryBar]);

RestorePriceArrays();

}

bo.ListTrades();

}

Anyone have any ideas where I may be going wrong?
 



__._,_.___


**** 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

__,_._,___