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 [email protected], "Mike" <sfclimb...@...> 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 [email protected], "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 [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 > > > } > > > > > >
