PureBytes Links
Trading Reference Links
|
Bruce - just wanted to report that your code worked like a charm!
You're my new hero. :-)
I was in the process of sketching out an OLE project to simulate a
multi-variable Walk-Forward tester. Given my mediocre programming
abilities, that probably would have taken me a couple of months to get
right. Now, thanks to your code, I can just use the normal
Walk-Forward engine, and achieve what I wanted.
In the future, it would be nice if AB had this IS/OOS, and other
flags, readily built-in. I will suggest as much to the official
suggestions webpage.
--- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" <zoopfree@xxx> wrote:
>
> Bruce, thanks a bunch. That's a nifty solution.
>
> It will take me a few days to play around with it, and I will post any
> questions here should they come up. But it looks like it will do
> exactly what I was hoping for!
>
> Thanks again.
>
>
>
> --- In amibroker@xxxxxxxxxxxxxxx, "bruce1r" <brucer@> wrote:
> >
> > Part II -
> >
> > I mentioned that I had needed to detect IS/OOS in walk-forward testing
> > for signal work. It is actually needed for several applications, and
> > again I hope that Tomasz adds the status property. Below is a brief,
> > demo example that might be of use. Side note - Yahoo really sucks for
> > doing this ! At least, I've met my yearly posting target for 2009 :-)
> >
> > It is a very simple 2MA crossover optimization that was used to
> > initially test OptSampleType(). It is NOT meant to be practical. It
> > can be run, for example, on the SP500 in "Easy mode" as follows -
> >
> > Start - 12/31/2001
> > End - 12/31/2002
> > Last - 9/30/2003
> > Step - 3 months
> > NOT anchored
> > Optimization target - CAR/MDD
> >
> > These parameters don't have to be used, but this example shows some
> > interesting tidbits. For example, it show the limitations in
> > transitioning from a bear to a bull period with limited lookback. It
> > also shows some boundary effects in the walk-forward mode. But these
> > are stories for another day.
> >
> > Anyway, here's a snippet of the _Trace output -
> >
> > Name = SP-CP , ActionEx = 14 , From = 6/30/2003 , To = 9/30/2003 ,
> > OptSampleType = 3
> > Fast = 45 , Slow = 49
> > Signals -
> > BUY - 6/30/2003
> > SELL - 8/15/2003
> > BUY - 8/27/2003
> > SELL - 9/10/2003
> > BUY - 9/17/2003
> > Name = SP-CP , ActionEx = 14 , From = 9/30/2003 , To = 12/31/2003 ,
> > OptSampleType = 3
> > Fast = 97 , Slow = 75
> > Signals -
> > SELL - 9/30/2003
> >
> > Finally, the code -
> >
> >
>
//--------------------------------------------------------------------------------------------------
> > //
> > // Simple 2MA Optimization.afl - 1/18/09
> > //
> > // Example to show use of OptSampleType() function. Note that this
> > is meant as a
> > // non-practical example that demonstrates a special case and a
> > boundary condition
> > // related to signals in a walk-forward optimization.
> > //
> >
>
//--------------------------------------------------------------------------------------------------
> >
> > #include <OptSampleType.afl>
> >
> > // Get the optimization pass type - this must be outside of any
> > conditionals
> > samptype = OptSampleType( );
> >
> > // Test routine for OptSampleType
> >
> > // Choose an engine and set a simple, short optimization
> > OptimizerSetEngine( "spso" ); // cmae, trib
> > OptimizerSetOption( "Runs", 2 );
> > OptimizerSetOption( "MaxEval", 500 );
> >
> > // Simple 2 MA crossover system
> > fast = Optimize( "Fast MA", 13, 1, 100, 1 );
> > slow = Optimize( "Slow MA", 55, 1, 100, 1 );
> > Buyimp = Cross( MA( C, fast ), MA( C, slow ) );
> > Sellimp = Cross( MA( C, slow ), MA( C, fast ) );
> > Short = Cover = 0;
> >
> > // Handle a signal in progress at the start of the period - note that
> > // this will introduce a few redundant signals (if first signal
of OOS
> > // period is the same as the last signal of the last OOS period).
> These
> > // will have to be filtered later, but it is the easiest way for this
> > demo
> > Buystate = Flip( Buyimp, Sellimp );
> > Sellstate = NOT Buystate;
> > fbir = Status( "firstbarinrange" );
> > Buy = Buyimp OR fbir * Buystate;
> > Sell = Sellimp OR fbir * Sellstate;
> >
>
//--------------------------------------------------------------------------------------------------
> >
> > // Debug output
> > if ( samptype == 3 )
> > {
> > _TRACE ( "Name = " + StrLeft( Name( ) + " ", 5 )
> > + " , ActionEx = " + Status( "actionex" )
> > + " , From = " + NumToStr( DateTimeConvert( 2, Status(
> > "rangefromdate" ) ), formatDateTime )
> > + " , To = " + NumToStr( DateTimeConvert( 2, Status( "rangetodate"
> > ) ), formatDateTime )
> > + " , OptSampleType = " + samptype
> > );
> > _TRACE( " Fast = " + fast + " , Slow = " + slow );
> > }
> >
> > // Show the signals for the out-of-sample period
> > if ( samptype == 3 )
> > {
> > bi = BarIndex( );
> > bi = bi - bi[ 0 ];
> > dt = DateTime( );
> > fbi = LastValue( ValueWhen( Status( "firstbarinrange"), bi ) );
> > lbi = LastValue( ValueWhen( Status( "lastbarinrange" ), bi ) );
> > _TRACE( " Signals - " );
> > for ( i = fbi; i <= Lbi; i++ )
> > {
> > if ( Buy[ i ] )
> > _TRACE( " BUY - " + NumToStr( dt[ i ], formatDateTime ) );
> > if ( Sell[ i ] )
> > _TRACE( " SELL - " + NumToStr( dt[ i ], formatDateTime ) );
> > }
> > }
> >
> >
>
//--------------------------------------------------------------------------------------------------
> >
>
------------------------------------
**** 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/
|