Ed, Thanks again ... appreciate your sharing
Will try it next week ... after some MUST DO chores ... A ----- Original Message ----- From: Edward Pottasch To: [email protected] Sent: Wednesday, September 03, 2008 12:20 PM Subject: Re: [amibroker] Backtest - Number of positions you can try it out by putting the code in a file (for instance: findNumberOfLongAndShortPositions_cbi.afl) and then call this file in your main program like: SetCustomBacktestProc( "C:\\Amibroker Programs\\myAFL\\CustomBacktest\\loop through trades\\findNumberOfLongAndShortPositions_cbi.afl" ); Then do a backtest as you normally do and you can chart the results using for instance: SetChartOptions(0, chartShowDates); GraphXSpace = 0; ltrades = Foreign("~longTrades","C"); strades = Foreign("~shortTrades","C"); Plot(strades,"Short Trades",colorRed,styleLine); Plot(ltrades,"Long Trades",colorBrightGreen,styleLine); PlotOHLC( ltrades, ltrades, 0, 0, "", colorBrightGreen, styleCloud ); PlotOHLC( strades, strades, 0, 0, "", colorRed, styleCloud ); I assume that you are doing a portfolio type backtest, rgds, Ed ----- Original Message ----- From: Ara Kaloustian To: [email protected] Sent: Wednesday, September 03, 2008 8:39 PM Subject: Re: [amibroker] Backtest - Number of positions Thanks Ed, I have not got to CBT yet ... but on my list Ara ----- Original Message ----- From: Edward Pottasch To: [email protected] Sent: Wednesday, September 03, 2008 11:00 AM Subject: Re: [amibroker] Backtest - Number of positions Ara, I did this a while back. I extracted this information by looping through the trades using the CBT. Then I saved the info in a composite. Added code below. You just need to call this code inside your main program using SetCustomBacktestProc( ) but I think you know the drill: rgds, Ed SetCustomBacktestProc(""); if( Status("action") == actionPortfolio ) { bo = GetBacktesterObject(); // perform default portfolio backtest bo.Backtest(); // initialisations longTrades = 0; shortTrades = 0; // store the DateTime() in a STRING array. fdatetime = DateTime(); // loop through trades for( trade = bo.GetFirstTrade(); trade ; trade = bo.GetNextTrade() ) { // find the entry datetime of the trade entry_datetime = trade.EntryDateTime; // find the exit datetime of the trade exit_datetime = trade.ExitDateTime; // locate the array index at entry index_entry = IIF(entry_datetime == fdatetime, 1, 0); // locate the array index at exit index_exit = IIF(exit_datetime == fdatetime, 1, 0); // indicate bars where the trade occurs index_trade = flip(index_entry,index_exit); // accumulate long and short trades if (trade.IsLong) { longTrades = longTrades + index_trade; //} else if (!trade.IsLong) { } else { shortTrades = shortTrades + index_trade; } } // loop through open positions for( Openpos = bo.GetFirstOpenPos(); Openpos ; Openpos = bo.GetNextOpenPos() ) { // find the entry datetime of the trade entry_datetime = Openpos.EntryDateTime; // find the exit datetime of the trade exit_datetime = Openpos.ExitDateTime; // locate the array index at entry index_entry = IIF(entry_datetime == fdatetime, 1, 0); // locate the array index at exit index_exit = IIF(exit_datetime == fdatetime, 1, 0); // indicate bars where the trade occurs index_trade = flip(index_entry,index_exit); // accumulate long and short trades if (Openpos.IsLong) { longTrades = longTrades + index_trade; //} else if (!Openpos.IsLong) { } else { shortTrades = shortTrades + index_trade; } } AddToComposite(longTrades,"~longTrades","C",atcFlagDeleteValues | atcFlagEnableInPortfolio ); AddToComposite(shortTrades,"~shortTrades","C",atcFlagDeleteValues | atcFlagEnableInPortfolio); } ----- Original Message ----- From: Ara Kaloustian To: AB-Main Sent: Wednesday, September 03, 2008 7:39 PM Subject: [amibroker] Backtest - Number of positions Is there a way to determine (get a chart) of the number of positions over time Tx Ara
