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

Re: [amibroker] Re: Walk forward doubt



PureBytes Links

Trading Reference Links

> Thanks Thomas. Very good collection of parameters.
> I see my system falls from CAR 64 in sample, to CAR 30 out-of-sample.
> But I think something must be wrong: The result of the buy and hold
> is exactly the same that the OS result.
> Do you have this problem?

That OOS results are worse than IS results is normal. You should also 
bear in mind that the concatenated IS period is not identical to the OOS 
period. That's why IS and OOS CARs are not directly comparable. Example: 
If you start your walk-forward optimization on 01/01/2000 with a, say, 
2-year IS period it's obvious that both CARs are very different. That's 
why in my code Walk-forward Efficiency (WFE) is NOT calculated as OOS-
CAR/IS-CAR (as Robert Pardo suggests) but rather as  RELATIVE IS-
CAR/RELATIVE OOS-CAR (where Relative CAR is IS-CAR or OOS-CAR divided by 
the benchmark CAR for the respective period). This makes more sense, 
IMHO.

> And, I had already seen the gfx code in the Amibroker page. It's
> fine, but it does not show DD, and total CAR.. although I didn't test
> the trick of changing the code to see OS equity line..very good..

I think you should use both my and TJ's code - they save different 
purposes. MaxDD as a percentage is shown for IS and OOS in my code. And 
if you right-click the pane and open the parameters window you can also 
plot DD and MaxDD as absolute figures both for IS and OOS. But I strongly 
suggest that you plot it only for, e.g., OOS (and disable all the IS 
plots - or vice versa!) - otherwise the pane becomes too cluttered. 
Particularly if you also plot IS and OOS Relative Performance ... ;-)

Greetings, 

Thomas


>
> Greetings.
>
> --- In amibroker@xxxxxxxxxxxxxxx, Thomas Ludwig <Thomas.Ludwig@xxx> 
wrote:
> > I forgot to mention one thing: In addition to my code you can also
> > use TJ's excellent code from
> > http://www.amibroker.com/kb/2007/10/11/low-
> > level-gfx-example-yearlymonthly-profit-chart/ and replace
> >
> > eq = Foreign("~~~EQUITY", "C" );
> >
> > by
> >
> > eq = Foreign("~~~OSEQUITY", "C" );
> >
> > in order to analyse your OOS results a little bit closer.
> >
> > Greetings,
> >
> > Thomas
> >
> > > Ah, fantastic. Very good code.
> > > Just a doubt: Do I use the code with the ~~~ISEQUITY, after
> > > running a WalkForward, or with the ~~~ISEQUITY or with the
> > > ~~~BESTEQUITY??
> > >
> > > Although I think all of them are right.. ?¿
> > >
> > > Thanks
> > >
> > > --- In amibroker@xxxxxxxxxxxxxxx, Thomas Ludwig <Thomas.Ludwig@>
> >
> > wrote:
> > > > > Hello
> > > > > It's very interesting the walk forward optimization. I use it
> > > > > with a 2 months In-sample period, and 1 month Out of sampple
> > > > > period, this is, 12 steps every year to see if my systems are
> > > > > good.
> > > > > But i have a doubt: After processing several years of the
> > > > > optimization, I have a chart with the out of sample equity,
> > > > > but .. How could I obtain the exact trades of all the out of
> > > > > sample equity?
> > > >
> > > > I don't think that's possible. TJ might add that in future
> > > > versions of AB.
> > > >
> > > > > and if it's not possible, is there any way to calculate the
> > > > > Draw Down, Sharpe etc, of the out-of-sample results?
> > > > >
> > > > > Any answer would be very much appreciated
> > > >
> > > > Try the attached AFL file that calculates some metrics and
> > > > more.
> > > >
> > > > Greetings,
> > > >
> > > > Thomas
> > > >
> > > >
> > > > SetChartBkColor( colorWhite );
> > > > SetChartOptions( 0, chartShowDates|chartWrapTitle );
> > > >
> > > >
> > > > iseq=Foreign("~~~ISEQUITY", "C");
> > > > oseq=Foreign("~~~OSEQUITY", "C");
> > > >
> > > > x = SelectedValue(BarIndex());
> > > >
> > > >
> > > > function FirstBarIndex(Condition)
> > > > {
> > > >      TotalBarsIndex = x;
> > > >      a = 0;
> > > >      Counter = 0;
> > > >      for (a = 0 ;a < TotalBarsIndex; a++)
> > > >      {
> > > >        Counter = Counter+1;
> > > >        if (
> > > >            IsTrue(Condition[a])
> > > >           )
> > > >        a = TotalBarsIndex;
> > > >        }
> > > >      result = Counter-1;
> > > >
> > > >      return result;
> > > > }
> > > >
> > > >
> > > > isfirst=FirstBarIndex(iseq);
> > > > osfirst=FirstBarIndex(oseq);
> > > >
> > > > isTotalBars=x-isfirst;
> > > > osTotalBars=x-Osfirst;
> > > >
> > > > isSlope = LinRegSlope(iseq,istotalbars);
> > > > osSlope = LinRegSlope(oseq,ostotalbars);
> > > >
> > > > /*lastbar = BarIndex();
> > > > al = LastValue( ValueWhen( lastbar, LinRegSlope( iseq,
> > > > isTotalBars
> > >
> > > ) ) );
> > >
> > > > bl = LastValue( ValueWhen( lastbar, LinRegIntercept( iseq,
> > >
> > > isTotalBars ) ) );
> > >
> > > > isLr = al * ( BarIndex() - isfirst ) + bl;
> > > >
> > > >
> > > > a2 = LastValue( ValueWhen( lastbar, LinRegSlope( oseq,
> > > > osTotalBars )
> > >
> > > ) );
> > >
> > > > b2 = LastValue( ValueWhen( lastbar, LinRegIntercept( oseq,
> > >
> > > osTotalBars ) ) );
> > >
> > > > osLr = a2 * ( BarIndex() - osfirst ) + b2;*/
> > > >
> > > >
> > > >
> > > > //R-squared
> > > > isR2=(Correlation(Cum( 1 ),iseq,istotalbars))^2;
> > > > osR2=(Correlation(Cum( 1 ),oseq,ostotalbars))^2;
> > > >
> > > >
> > > > //K-Ratio
> > > > iskratio=100000*isSlope/(StdErr(iseq,istotalbars)*istotalbars);
> > > > oskratio=100000*osSlope/(StdErr(oseq,ostotalbars)*ostotalbars);
> > > >
> > > > //CAR
> > > > isCAR=100*((iseq/iseq[isfirst])^(252/isTotalBars) -1);
> > > > osCAR=100*((oseq/oseq[osfirst])^(252/osTotalBars) -1);
> > > > benchCARis=100*((C/C[isfirst])^(252/isTotalBars) -1);
> > > > benchCARos=100*((C/C[osfirst])^(252/osTotalBars) -1);
> > > >
> > > > //RelativeCAR (%)
> > > > //isRelCAR=100*((isCAR/benchCARis)-1);
> > > > //osRelCAR=100*((osCAR/benchCARos)-1);
> > > > isRelCAR=isCAR/benchCARis;
> > > > osRelCAR=osCAR/benchCARos;
> > > >
> > > >
> > > >
> > > >
> > > > //Drawdown
> > > > isdr=iseq-Highest(iseq);
> > > > osdr=oseq-Highest(oseq);
> > > >
> > > > ismaxdr=Lowest(isdr);
> > > > osmaxdr=Lowest(Osdr);
> > > >
> > > > isdrperc=100*(iseq/Highest(iseq)-1);
> > > > osdrperc=100*(oseq/Highest(oseq)-1);
> > > >
> > > > ismaxdrperc=Lowest(isdrperc);
> > > > osmaxdrperc=Lowest(Osdrperc);
> > > >
> > > >
> > > > //CAR/MaxDD
> > > > iscarmdd=-isCAR/ismaxdrperc;
> > > > oscarmdd=-osCAR/osmaxdrperc;
> > > >
> > > > //UPI
> > > > CumISdr=Cum(isdrperc^2);
> > > > CumOSdr=Cum(osdrperc^2);
> > > > isUI=sqrt(CumISdr/(x-isfirst));
> > > > osUI=sqrt(CumOSdr/(x-osfirst));
> > > > isUPI=(isCAR-5.4)/isUI;
> > > > osUPI=(OsCAR-5.4)/osUI;
> > > >
> > > > //Walk-Forward Efficiency
> > > > WFE=OsRelCAR/isRelCAR;
> > > >
> > > > InitialEquity = GetOption("InitialEquity");
> > > >
> > > > //IS Buy&Hold performance
> > > > gainIS=C/C[isfirst];
> > > > bhis=InitialEquity*gainis;
> > > > if( ParamToggle("Show IS Equity and Buy + Hold?", "No|Yes", 1 )
> > > > ) {
> > > > PlotForeign("~~~ISEQUITY","In-Sample Equity", colorRed,
> > >
> > > styleLine|styleThick);
> > >
> > > > Plot( bhis, "Buy&Hold IS", colorOrange);
> > > > }
> > > >
> > > > //OOS Buy&Hold performance
> > > > gainOS=C/C[osfirst];
> > > > bhos=InitialEquity*gainos;
> > > > if( ParamToggle("Show OOS Equity and Buy + Hold?", "No|Yes", 1
> > > > ) ) {
> > > > PlotForeign("~~~OSEQUITY","Out-Of-Sample Equity", colorGreen,
> > >
> > > styleLine|styleThick);
> > >
> > > > Plot( bhos, "Buy&Hold OOS", colorTurquoise );
> > > > }
> > > >
> > > > /*//Linear Regression Lines
> > > > if( ParamToggle("Show lin. reg.", "No|Yes", 0 ) )
> > > > Plot( isLr , "Linear Reg",colorRed, styleThick )
> > > > AND Plot( osLr , "Linear Reg", colorGreen, styleThick );*/
> > > >
> > > > //Relative Performance
> > > > isrelperf=iseq/bhIS;
> > > > osrelperf=oseq/bhOS;
> > > > if( ParamToggle("Show IS Rel. Performance?", "No|Yes", 0 ) )
> > > > Plot( isrelperf , "IS Rel. Performance",ColorRGB( 220, 128, 128
> > > > ) ,
> > >
> > > styleThick|styleOwnScale|styleNoTitle );
> > >
> > > > if( ParamToggle("Show OOS Rel. Performance?", "No|Yes", 0 ) )
> > > > Plot( osrelperf , "OOS Rel. Performance",ColorRGB( 128, 220,
> > > > 128 ),
> > >
> > > styleThick|styleOwnScale|styleNoTitle );
> > >
> > > > //DD
> > > > if( ParamToggle("Show IS Drawdown", "No|Yes", 0 ) ) Plot(isdr,
> > > > "IS
> > >
> > > Drawdown", colorDarkRed, styleArea );
> > >
> > > > if( ParamToggle("Show IS Max. Drawdown?", "No|Yes", 0 ) )
> > >
> > > Plot(ismaxdr,"IS Max. Drawdown",colorBlue);
> > >
> > > > if( ParamToggle("Show OOS Drawdown", "No|Yes", 0 ) ) Plot(osdr,
> > > > "OOS
> > >
> > > Drawdown", colorDarkGreen, styleArea );
> > >
> > > > if( ParamToggle("Show OOS Max. Drawdown?", "No|Yes", 0 ) )
> > >
> > > Plot(osmaxdr,"OOS Max. Drawdown",colorBlue);
> > >
> > > > Title = "{{NAME}} - {{INTERVAL}} {{DATE}} {{VALUES}}"
> > > > +"\n \\c04IS       R2: " + WriteVal(isR2)+"   K-Ratio:
> > >
> > > "+WriteVal(iskratio)+"   CAR(%):  "+WriteVal(isCAR,1.1)+"
> > > BenchmarkCAR(%):  "+WriteVal(benchCARis,1.1)
> > >
> > > > +"   RelativeCAR:   "+WriteVal(isRelCAR,1.1)
> > > > +"   Max DD(%):  "+WriteVal(ismaxdrperc,1.1)+"   CAR/MDD:
> > >
> > > "+WriteVal(iscarmdd,1.2)+"   UPI: "+WriteVal(isUPI,1.2)
> > >
> > > > +"\n \\c27OOS  R2: " + WriteVal(OsR2)+"   K-Ratio:
> > >
> > > "+WriteVal(oskratio)+"   CAR(%):  "+WriteVal(osCAR,1.1)+"
> > > BenchmarkCAR(%):  "+WriteVal(benchCARos,1.1)
> > >
> > > > +"   RelativeCAR:   "+WriteVal(osRelCAR,1.1)
> > > > +"   Max DD(%):  "+WriteVal(osmaxdrperc,1.1)+"   CAR/MDD:
> > >
> > > "+WriteVal(oscarmdd,1.2)+"   UPI: "+WriteVal(osUPI,1.2)
> > >
> > > > +"\n \\c-1Walk-Forward Efficiency(%):   "+WriteVal(WFE,1.1);
> > >
> > > ------------------------------------
> > >
> > > **** 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
>
> *********************************
> 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

*********************************
Yahoo! Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/amibroker/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:amibroker-digest@xxxxxxxxxxxxxxx 
    mailto:amibroker-fullfeatured@xxxxxxxxxxxxxxx

<*> To unsubscribe from this group, send an email to:
    amibroker-unsubscribe@xxxxxxxxxxxxxxx

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/