Graham:

I am aware that you can loop through open positions or trades the way you did.
However, what I was trying to do is to AddCustomMetric() just before closing a 
position by ExitTrade().
The metric is OvernightGap for the day (bar) of exit. 

 bo = GetBacktesterObject();
 bo.PreProcess(); // Initialize backtester
 for( bar=0; bar < BarCount; bar++)
 {
  eq =  bo.Equity;
  for ( sig=bo.GetFirstSignal(bar); sig; sig=bo.GetNextSignal(bar) )
  {
   if (sig.isExit())
   {
    pos = bo.FindOpenPos( sig.Symbol );
    if(pos) {
     lastC = pos.GetPrice(bar-1, "C");
     curO =pos.GetPrice(bar, "O");
     //!!!!!!!!!!!!!!!!!!!!! the folowing line crash amibroker!!!!!!!!
     pos.AddCustomMetric("OvernightGap", curO - lastC);
     if(bo.ExitTrade(bar,sig.symbol,sig.Price))
     { 
      _TRACE("EXIT: " + sig.symbol + "@" + sig.Price);
     }
    }
   }
  }
.......
}

  ----- Original Message ----- 
  From: Graham 
  To: [email protected] 
  Sent: Tuesday, November 28, 2006 6:21 PM
  Subject: Re: [amibroker] AddCustomMetric() for open positions


  Why not use the functions that exist for this purpose



      // 'bo' variable holds Backtester object retrieved earlier 
     
      for( openpos = bo.GetFirstOpenPos(); openpos; openpos = 
bo.GetNextOpenPos() ) 
       { 
            // openpos variable now holds Trade object

       }

  To iterate through closed trade list you should use GetFirstTrade() / 
GetNextTrade() methods of Backtester object, as shown below:

      for( trade = bo.GetFirstTrade(); trade; trade = bo.GetNextTrade() ) 
       { 
            // trade variable now holds Trade object

       }


  -- 
  Cheers
  Graham
  AB-Write >< Professional AFL Writing Service
  Yes, I write AFL code to your requirements
  http://www.aflwriting.com 


  On 29/11/06, Mark H <[EMAIL PROTECTED]> wrote:
    OK, I verified that open positions work if I handle them AFTER the main 
loop (loop through all bars) in CBT.
    But it has problem within the main loop.

    Here is the code:

    If I put AddCustomMetric() after bo.ExitTrade(), it has no effect.

       if (sig.isExit())
       {
        pos = bo.FindOpenPos( sig.Symbol );
        if(pos) {
         lastC = pos.GetPrice(bar-1, "C");
         curO =pos.GetPrice(bar, "O");
         if(bo.ExitTrade(bar,sig.symbol,sig.Price))
         { 
          //!!!!!!!!!!!!!!!!!!!!! the folowing line has no effect!!!!!!!!
             pos.AddCustomMetric("OvernightGap", curO - lastC);
         _TRACE("EXIT: " + sig.symbol + "@" + sig.Price);
         }
        }
       }

    If I put it before bo.ExitTrade(), the crach warning window of AB popped up:

       if (sig.isExit())
       {
        pos = bo.FindOpenPos( sig.Symbol );
        if(pos) {
         lastC = pos.GetPrice(bar-1, "C");
         curO =pos.GetPrice(bar, "O");
         //!!!!!!!!!!!!!!!!!!!!! the folowing line crash amibroker!!!!!!!!
         pos.AddCustomMetric("OvernightGap", curO - lastC);
         if(bo.ExitTrade(bar,sig.symbol,sig.Price))
         { 
          _TRACE("EXIT: " + sig.symbol + "@" + sig.Price);
         }
        }
       }


      ----- Original Message ----- 
      From: Tomasz Janeczko 
      To: [email protected] 
      Sent: Tuesday, November 28, 2006 1:58 PM
      Subject: Re: [amibroker] AddCustomMetric() for open positions



      Hello,

      Are you sure ? Open positions and closed trades are handled by exactly 
the same class internally and I see
      no reason why it should not work. If in doubt send code that allows to 
reproduce the problem to support.

      Best regards,
      Tomasz Janeczko
      amibroker.com
        ----- Original Message ----- 
        From: Mark H 
        To: [email protected] 
        Sent: Tuesday, November 28, 2006 6:47 PM
        Subject: [amibroker] AddCustomMetric() for open positions


        Tomasz:

        AddCustomMetric() has no effect on open positions. I want to add some 
custom metrics based on some calculations using values returned by GetPrice(). 

        AddCustomMetric() works fine for closed positions (trades), but then 
GetPrice() no longer works.

        Is this by design? 

        Thanks,

        - Mark







   

Reply via email to