Hi,

Note that your loop will iterate until 'a' equals 5, at which point 
the looping will terminate. In your backtest code, you are referring 
to the value of 'a' which we've just established will always be 5. 
The custom backtest code is run *after* the rest of the script code 
has been run for all symbols.

Mike

--- In [email protected], "ozzyapeman" <zoopf...@...> wrote:
>
> Thank you for pointing out that specific example. That helps me add 
the
> column to the backtest report.
> 
> But I am still at a loss in feeding back the actual "Condition" 
value to
> the custom metric. If I was building that custom metric from other
> metrics already in the report, it would be easy (and I have done so 
in
> the past).
> 
> But how do I pass back the value of an actual variable from my 
trading
> AFL, each time a Buy is true?
> 
> This is what I now have, but the Condition column always shows "5" 
in
> the backtest report :
> 
> 
> //------------------------------------------------------------------
----\
> --
> // SIMPLE TRADING SYSTEM BASED ON VARIOUS CONDITIONS
> //------------------------------------------------------------------
----\
> --
> 
> FastMA       =    MA( C, 10 );
> SlowMA       =    MA( C, 20 );
> 
> Condition1   = Cross(FastMA, SlowMA);
> Condition2   = Cross(SlowMA, FastMA);
> Condition3   = Cross(C,      SlowMA);
> Condition4   = Cross(SlowMA, C     );
> 
> for(a = 1; a < 5; a++)
> {
> Condition    = VarGet( "Condition" + NumToStr( a, 1.0, 0 ) );
> Buy          = Condition;
> Sell         = BarsSince(Buy) > 12;
> }
> 
> 
> //------------------------------------------------------------------
----\
> -----
> // WANT TO ADD THE CUSTOM COLUMN, "CONDITION" TO BACKTEST REPORT
> //------------------------------------------------------------------
----\
> -----
> 
> SetCustomBacktestProc("");
> 
> if( Status("action") == actionPortfolio )
> {
>      bo = GetBacktesterObject();
> 
>      bo.Backtest(1); // run default backtest procedure
> 
>     // iterate through closed trades first
>     for( trade = bo.GetFirstTrade(); trade; trade = bo.GetNextTrade
() )
>     {
>         trade.AddCustomMetric("Condition", a  );
>     }
> 
>      bo.ListTrades();
> }
> 
> 
> 
> 
> 
> --- In [email protected], "Tomasz Janeczko" <groups@> wrote:
> >
> > Everything is explained with examples in the User's Guide
> > http://www.amibroker.com/guide/a_custommetrics.html
> >
> > See example 3.
> > ============
> >
> > Best regards,
> > Tomasz Janeczko
> > amibroker.com
> >   ----- Original Message -----
> >   From: ozzyapeman
> >   To: [email protected]
> >   Sent: Friday, December 26, 2008 1:26 AM
> >   Subject: [amibroker] Adding a Custom Metric to Backtest Report
> >
> >
> >   I have been able to add custom metrics to the Optimization 
Reports,
> but for some reason can't add a column to the Trade List Backtest
> report. Hoping someone might be able to chime in here, as the custom
> backtester confuses me.
> >
> >   What I want to do is fairly simple. In my actual trading 
system, I
> cycle through hundreds of possible conditions per bar. If any one
> condition is true, then I Buy. I want to add a custom metric to the
> backtest report that lists which condition generated the Buy signal.
> >
> >   For the sake of debugging, below is a very simplified AFL (not 
my
> actual system). I simply want to feedback the condition number into 
the
> backtester. But it does not work. If I add an optimize statement at 
the
> top, it will add the custom metric to the Optimization report. But 
even
> then that column does not reflect correct values.
> >
> >   So how do I add the column to the Backtest report? I would have
> thought the below code would do the trick. And how do I feedback the
> correct values? Perhaps I need to FPUT each condition, during the 
loop,
> to an external file, then FGET the file for every trade in the
> backtester? That might work, but feels inefficient:
> >
> >
> >  
> //------------------------------------------------------------------
----\
> --
> >   // SIMPLE TRADING SYSTEM BASED ON VARIOUS CONDITIONS
> >  
> //------------------------------------------------------------------
----\
> --
> >
> >   FastMA       =    MA( C, 10 );
> >   SlowMA       =    MA( C, 20 );
> >
> >   Condition1   = Cross(FastMA, SlowMA);
> >   Condition2   = Cross(SlowMA, FastMA);
> >   Condition3   = Cross(C,      SlowMA);
> >   Condition4   = Cross(SlowMA, C     );
> >
> >   for(a = 1; a < 5; a++)
> >   {
> >   Condition    = VarGet( "Condition" + NumToStr( a, 1.0, 0 ) );
> >   Buy          = Condition;
> >   Sell         = BarsSince(Buy) > 12;
> >   }
> >
> >
> >  
> //------------------------------------------------------------------
----\
> -----
> >   // WANT TO ADD THE CUSTOM COLUMN, "CONDITION" TO BACKTEST REPORT
> >  
> //------------------------------------------------------------------
----\
> -----
> >
> >   SetCustomBacktestProc( "" );
> >
> >   if ( Status( "action" ) == actionPortfolio )
> >   {
> >   bo = GetBacktesterObject();
> >   bo.Backtest( 1 );                                    // Call
> Backtest but set NoTradeLists to true
> >   bo.AddCustomMetric( "Condition", a, 0,0,0 );         // Add the
> custom metric
> >   bo.ListTrades();                                     // Now 
generate
> the backtest report with custom metric
> >   }
> >
>


Reply via email to