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

[amibroker] Re: Optimizing with Include and fputs shifts loop mysteriously



PureBytes Links

Trading Reference Links

Thanks, that workaround will certainly work for this simple example.
But my actual system is much more complex. I only pasted a crossover
system to debug the essence of the problem.

So it seems that I have to reassign values in the main body of the AFL
due to possible multiple preprocessing. If it's always off by 1, in a
linear fashion, then it's not such a big deal. But I am worried about
it being off by some other value on a case by case basis.

I guess including traces with every optimization will help me spot the
patterns and adjust accordingly.


--- In amibroker@xxxxxxxxxxxxxxx, "Steve Davis" <_sdavis@xxx> wrote:
>
> You have no control over how frequently AmiBroker executes your AFL.
> This is not a bug. As a workaround, you could adjust the value of
> FastMALength like this:
> 
> if (FastMALength == 5)
>   FastMALength = 1;
> else
>   FastMALength++;
> 
> --- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" <zoopfree@> wrote:
> >
> > Thanks for the detective work Steve and Tony.
> > 
> > I tried running the trace version below and sometimes AB executes the
> > code up to four times before the start of the optimize loop. Very
> strange.
> > 
> > Any ideas on how to code around this behaviour? Is this a known bug,
> > or am I implementing #include incorrectly? 
> > 
> > I can't see what I am doing wrong, given the very basic code I posted.
> > Even if the include file is being preprocessed, I don't understand why
> > it is happening 1 to 4 times with values from previous runs.
> > 
> > 
> > --- In amibroker@xxxxxxxxxxxxxxx, "Steve Davis" <_sdavis@> wrote:
> > >
> > > Hmmmm. Looks like Tony is right. I tried running this with some
> > > traces. AmiBroker executes your code twice prior to the start of the
> > > optimize loop. If you try the code below, you will see this trace:
> > > 
> > > a=1, FastMALength=5, actionEx=actionExEditVerifyFormula
> > > a=5, FastMALength=1, actionEx=actionExOptimizeSetup    
> > > a=1, FastMALength=5, actionEx=actionExOptimizeBacktest 
> > > a=2, FastMALength=1, actionEx=actionExOptimizeBacktest 
> > > a=3, FastMALength=2, actionEx=actionExOptimizeBacktest 
> > > a=4, FastMALength=3, actionEx=actionExOptimizeBacktest 
> > > a=5, FastMALength=4, actionEx=actionExOptimizeBacktest 
> > > 
> > > You can see the actionExOptimizeSetup pass is writing 5 to the file.
> > > Each optimize pass is picking up the value written by the previous
> pass.
> > > 
> > > Here is the modified code:
> > > 
> > > a = Optimize( "a", 1, 1, 5, 1 );
> > > 
> > > #pragma nocache
> > > #include "c:\TestAFL.afl";
> > > 
> > > fh = fopen( "c:\\TestAFL.afl", "w");
> > > fputs("FastMALength = ", fh);
> > > fputs(NumToStr(a, 1.0, 0 ),fh);
> > > fclose( fh );
> > > 
> > > actionExNum  = Status("ActionEx");
> > > if (actionExNum == actionExEditVerifyFormula) actionExName =
> > > "actionExEditVerifyFormula";
> > > else if (actionExNum == actionExOptimizeSetup)     actionExName =
> > > "actionExOptimizeSetup    ";
> > > else if (actionExNum == actionExOptimizeBacktest)  actionExName =
> > > "actionExOptimizeBacktest ";
> > > else if (actionExNum == actionExOptimizePortfolio) actionExName =
> > > "actionExOptimizePortfolio";
> > > _Trace("a="+a + ", FastMALength="+FastMALength + ",
> > > actionEx="+actionExName);
> > > 
> > > SlowMALength = 20;
> > > 
> > > FastMA       =    MA( C, FastMALength );
> > > SlowMA       =    MA( C, SlowMALength );
> > > Buy          = Cross( FastMA, SlowMA  );
> > > Sell         = Cross( SlowMA, FastMA  );
> > > 
> > > 
> > > --- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" <zoopfree@> wrote:
> > > >
> > > > Yes. But I am not sure how that creates the problem I am seeing.
> > > > Because when TestAFL.afl is processed, say for a =1, it simply
> results
> > > > in the following statement first being placed into memory:
> > > > 
> > > > FastMALength = 1;
> > > > 
> > > > then the main AFL is processed, and this should result in the
> > > > crossover trade being processed with the above variable
assignment.
> > > > But instead of the above variable assignment, it instead is:
> > > > 
> > > > FastMALength = 5;
> > > > 
> > > > How and why does it skip from 1 to 5?
> > > > 
> > > > 
> > > > --- In amibroker@xxxxxxxxxxxxxxx, "Tony Grimes" <Tonez.Email@>
> wrote:
> > > > >
> > > > > *#include is a preprocessor command. The included file, in
> this case
> > > > > TestAFL.afl, will be processed before your trade system 2 afl is
> > > > processed.*
> > > > > 
> > > > > On Sat, Dec 13, 2008 at 5:59 PM, ozzyapeman <zoopfree@> wrote:
> > > > > 
> > > > > >   Hello, hoping someone can help with this issue. When I
use an
> > > > optimize
> > > > > > statement with #include and fputs, the optimization variable
> keeps
> > > > getting
> > > > > > shifted.
> > > > > >
> > > > > > For example, please consider the two basic MA crossover
systems
> > > > below. They
> > > > > > should both give identical results whether one does a backtest
> > or an
> > > > > > optimization. The backtests do appear identical. However, the
> > > Include
> > > > > > version gives wonky results in optimization. Instead of 'a'
> > > > starting at
> > > > > > value 1. It starts at 5 but says in the optimization
report that
> > > > it is 1. I
> > > > > > know it's probably something simple that I am overlooking, but
> > > > can't seem to
> > > > > > figure this one out:
> > > > > >
> > > > > >
> > > > > >
> > > >
> > >
> >
>
//------------------------------------------------------------------------
> > > > > > // TRADE SYSTEM #1:    SIMPLE CROSS BASIC
> > > > > >
> > > >
> > >
> >
>
//------------------------------------------------------------------------
> > > > > >
> > > > > > FastMALength = Optimize("FastMALength",      1,     1,    5, 
> >    1);
> > > > > >
> > > > > > SlowMALength = 20;
> > > > > >
> > > > > > FastMA       =    MA( *C*, FastMALength );
> > > > > > SlowMA       =    MA( *C*, SlowMALength );
> > > > > > *Buy*          = Cross( FastMA, SlowMA  );
> > > > > > *Sell*         = Cross( SlowMA, FastMA  );
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > >
> > >
> >
>
//------------------------------------------------------------------------
> > > > > > // TRADE SYSTEM #2:   SIMPLE CROSS USING INCLUDE AND FPUTS
> > > > > >
> > > >
> > >
> >
>
//------------------------------------------------------------------------
> > > > > >
> > > > > > a = Optimize( "a", 1, 1, 5, 1 );
> > > > > >
> > > > > > *#pragma* nocache
> > > > > > *#include* "c:\\TestAFL.afl";
> > > > > >
> > > > > > fh = fopen( "c:\\TestAFL.afl", "w");
> > > > > > fputs("FastMALength = ", fh);
> > > > > > fputs(NumToStr(a, 1.0, 0 ),fh);
> > > > > > fclose( fh );
> > > > > >
> > > > > > SlowMALength = 20;
> > > > > >
> > > > > > FastMA       =    MA( *C*, FastMALength );
> > > > > > SlowMA       =    MA( *C*, SlowMALength );
> > > > > > *Buy*          = Cross( FastMA, SlowMA  );
> > > > > > *Sell*         = Cross( SlowMA, FastMA  );
> > > > > >  
> > > > > >
> > > > >
> > > >
> > >
> >
>



------------------------------------

**** 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/