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

Re: [amibroker] Re: Custom objectif function



PureBytes Links

Trading Reference Links

Another question: is it me or it really slows down the optimization process?  I kind of waited like 5 minutes for a simple backtest...  ;-)

Louis

2008/5/9 Louis Préfontaine <rockprog80@xxxxxxxxx>:
Building a good objective function is more difficult than I though.

Is it ok to have different objective functions depending on the system or part of the system?  I mean: sometimes you prefer to have a high ratio of win no matter how much you win while other time %profit is more important...

Louis


2008/5/9 Louis Préfontaine <rockprog80@xxxxxxxxx>:

Thanks Mike! ;-)

Louis

2008/5/9 Mike <sfclimbers@xxxxxxxxx>:

1. Uncomment the Buy/Sell signals. You need to generate statistics in
order to calculate the objective function.

2. Type in the name of your custom variable for the optimization
target of the walk forward settings tab (yours is named
ObjectiveFunction in the code below)

See http://www.amibroker.com/kb/2008/02/12/getting-started-with-
automatic-walk-forward-optimization/

Mike

--- In amibroker@xxxxxxxxxxxxxxx, "Louis Préfontaine"

<rockprog80@xxx> wrote:
>
> Hi Howard,
>
> I am using the following code
>
> // CustomMetricWithPenalty.afl
> //
> // Add a custom metric to the backtest report.
> // The metric is the KRatio, multiplied by a
> // penalty function based on:
> // the average percentage profit or loss per trade.
> // the percentage the system is exposed to the market.
> // the holding period per trade.
> // the percent of trades that are winners.
> // the RAR value.
>
> KRatioVal = 0;
>
> SetCustomBacktestProc("");
>
> if (Status("action") == actionPortfolio)
> {
> bo = GetBacktesterObject();
>
> bo.backtest();
>
> st = bo.getperformancestats(0);
>
> KRatioVal = 100.0 * st.getvalue("KRatio");
> RRR = st.getvalue("RRR");
>
> AvgPctGainVal = 0.01
> * st.getvalue("AllAvgProfitLossPercent");
> ExposureVal = 0.01 * st.getvalue("ExposurePercent");
> HoldingPeriodVal = st.getvalue("AllAvgBarsHeld");
> PctWinnersVal = 0.01 * st.getvalue("WinnersPercent");
> RarVal = 0.01 * st.getvalue("RAR");
>
> AvgPctGainMult = IIf(AvgPctGainVal<0.01,
> 0.0,
> 1.00);
>
> ExposureMult = IIf(ExposureVal<0.10,
> 1.00-(0.50/0.10)*(0.10-ExposureVal),
> IIf((ExposureVal>=0.10 AND ExposureVal<=0.20),
> 1.00,
> IIf((ExposureVal>0.20 AND ExposureVal<0.40),
> 1.00-(0.50/0.20)*(ExposureVal-0.20),
> 0.50 )));
>
> HoldingPeriodMult = IIf(HoldingPeriodVal<3,
> 1.00-(0.50/3)*(3-HoldingPeriodVal),
> IIf((HoldingPeriodVal>=3 AND HoldingPeriodVal<=7),
> 1.00,
> IIf((HoldingPeriodVal>7 AND HoldingPeriodVal<14),
> 1.00-(0.50/7)*(HoldingPeriodVal-7),
> 0.50 )));
>
> PctWinnersMult = IIf(PctWinnersVal<0.50,
> 0.50,
> IIf((PctWinnersVal>=0.50 AND PctWinnersVal<=0.65),
> 1.00-(0.50/0.15)*(0.65-PctWinnersVal),
> 1.00 ));
>
> RarMult = IIf(RarVal<0.10,
> 0.50,
> IIf((RarVal>=0.10 AND RarVal<=0.20),
> 1.00-(0.50/0.10)*(0.20-RarVal),
> 1.00 ));
>
> ObFn = KRatioVal * AvgPctGainMult * ExposureMult
> * HoldingPeriodMult * PctWinnersMult * RarMult;
>
> bo.addcustommetric("ObjectiveFunction", ObFn);
> }
>
> // The trading system starts here
> /*
> fast = Optimize("fast",16,1,20,1);
> slow = Optimize("slow",8,1,20,1);
> MAF = DEMA(C,fast);
> MAS = DEMA(C,slow);
>
> HoldDays = Optimize("HoldDays",1,1,20,1);
> Buy = Cross(MAF,MAS);
> Sell = Cross(MAS,MAF) OR BarsSince(Buy)>=HoldDays;
> Sell = ExRem(Sell,Buy);
> */
> e = Equity();
>
> //Plot(C,"C",colorBlack,styleCandle);
> //shape = Buy * shapeUpArrow + Sell * shapeDownArrow;
> //PlotShapes( shape, IIf( Buy, colorGreen, colorRed ),
> // 0, IIf( Buy, Low, High ) );
> Plot(e,"Equity",colorGreen,styleLine|styleOwnScale);
> //GraphXSpace = 5;
> //Figure A.7 Custom Metric with Penalty
>
> I didn't post it at first because I was not sure if you wanted the
code to
> be made public.
>
> I worked on another objective function, and I wonder... how can you
put the
> objective function in the walk-forward tab?
>
> Thanks!
>
> Louis
>
> 2008/5/9 Howard B <howardbandy@xxx>:

>
> > Hi Louis --
> >
> > Please post the code you are trying to use.
> >
> > Yes, you can use your custom objective function when running
backtests and
> > automatic walk forward runs.
> >
> > Thanks,
> > Howard
> >
> >
> > On Fri, May 9, 2008 at 3:33 PM, Louis Préfontaine <rockprog80@xxx>

> > wrote:
> >
> >> Hi,
> >>
> >> I've been trying to build a custom objective function and tried
to see
> >> what it would be like to use Howard's one in the Appendix A.
However, after
> >> running it with different symbols/markets/systems, the results
is ALWAYS
> >> 0.00 Anyone know why this can happen?
> >>
> >> BTW, is it possible to add the custom OB to the walk-forward?
> >>
> >> Thanks,
> >>
> >> Louis
> >>
> >>
> >>
> >
> >
>




__._,_.___

Please note that this group is for discussion between users only.

To get 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

__,_._,___