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


   

Reply via email to