[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[amibroker] Re: Adding a Custom Metric to Backtest Report



PureBytes Links

Trading Reference Links

Thanks Tomasz. That's helpful. I had forgotten that we can use one of the setoptions to store and recall data.

One last key question (for anyone). And I feel like a klutz asking something so simple, given that I've been doing AFL now for six months. But sometimes these simple things can be elusive.

How do I flag each "a" value every time there is a Buy, without going into a Barcount loop? I find that Barcount loops always slow down my AFLs.

I can't just do: 

if(Buy)        {then do something}

since if() does not work with arrays.

Is there any way around this, so that I can dynamically pass "a" values into a setoption or static var? Or is this simply a case where a Barcount loop *must* be used?



//------------------------------------------------------------------------
// 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 amibroker@xxxxxxxxxxxxxxx, "Tomasz Janeczko" <groups@xxx> wrote:
>
> You need to pass that in either
> a) series (set) of static variables
> or
> b) addtocomposite/foreign
> or
> c) files (fopen/fputs/fgets/fclose)
> or
> d) unused trade/position variable (can be for example margindeposit if you don't use it).
>
> Best regards,
> Tomasz Janeczko
> amibroker.com
> ----- Original Message -----
> From: "ozzyapeman" zoopfree@xxx
> To: amibroker@xxxxxxxxxxxxxxx
> Sent: Friday, December 26, 2008 5:50 PM
> Subject: [amibroker] Re: Adding a Custom Metric to Backtest Report
>
>
> > Thanks Mike. I eventually figured as much.
> >
> > Still trying to figure out a way to dynamically pass the correct "a"
> > value to the backtester.
> >
> > Any ideas on a general approach to this? I need to somehow collect an
> > "a" value each time there is a Buy, and store those somewhere so they
> > can be read back by the custom backtester code.
> >
> >
> > --- In amibroker@xxxxxxxxxxxxxxx, "Mike" sfclimbers@ wrote:
> >>
> >> 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 amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" <zoopfree@> 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 amibroker@xxxxxxxxxxxxxxx, "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: amibroker@xxxxxxxxxxxxxxx
> >> > > 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
> >> > > }
> >> > >
> >> >
> >>
> >
> >
> >
> > ------------------------------------
> >
> > **** IMPORTANT ****
> > This group is for the discussion between users only.
> > This is *NOT* technical support channel.
> >
> > *********************
> > TO GET TECHNICAL SUPPORT from AmiBroker please send an e-mail directly to
> > SUPPORT {at} amibroker.com
> > *********************
> >
> > For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
> > http://www.amibroker.com/devlog/
> >
> > For other support material please check also:
> > http://www.amibroker.com/support.html
> >
> > *********************************
> > Yahoo! Groups Links
> >
> >
> >
>
__._,_.___

**** IMPORTANT ****
This group is for the discussion between users only.
This is *NOT* technical support channel.

*********************
TO GET TECHNICAL SUPPORT from AmiBroker please send an e-mail directly to
SUPPORT {at} amibroker.com
*********************

For NEW RELEASE ANNOUNCEMENTS and other news always check DEVLOG:
http://www.amibroker.com/devlog/

For other support material please check also:
http://www.amibroker.com/support.html

*********************************




Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___