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

   

Reply via email to