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