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

[amibroker] Re: Simple AFL Database Logic Fails



PureBytes Links

Trading Reference Links

Tuzo,

Thanks for the cleaner code and division by 0 catch (and for staying up
late!)

I assume that this part: "if ( PairFrequency != 0 )..." should be part
of the barcount loop. But either way, it does not work.

There is still a mysterious bug. Now all values of DistanceMin are 0,
even though by definition they have to be greater than 0.

The code logic seems so straightforward, it's hard to figure out why
this isn't working just as is.

Anyone?



--- In amibroker@xxxxxxxxxxxxxxx, "tuzo_wilson" <j.tuzo.wilson@xxx>
wrote:
>
> --- In amibroker@xxxxxxxxxxxxxxx, "ozzyapeman" zoopfree@ wrote:
>
> Ozzy,
>
> You've got a lot going on there.  :)
>
> It's 1:30am here so I don't have time to go into it all but this
should
> hopefully do what you want.  Take a look and see if it helps.
>
>
> //
>
-----------------------------------------------------------------------
>
> //                   SIMPLE TRADING SYSTEM
>
> //
>
-----------------------------------------------------------------------
>
>
>
> BuyPrice = SellPrice = ShortPrice = CoverPrice = Close;
>
>
>
>
>
> Fast     = Optimize( "fast", 5, 5, 10, 1 );
>
> Slow     = Optimize( "Slow", 15, 10, 15, 1 );
>
>
>
> FastMA   = MA( C, Fast );
>
> SlowMA   = MA( C, Slow );
>
>
>
> Buy      = Cross( Close, FastMA );
>
> Sell     = Cross( SlowMA, Close );
>
>
>
> Short    = Sell;
>
> Cover    = Buy;
>
>
>
>
>
> //
>
-----------------------------------------------------------------------
>
> //   DUMP STATS TO FILE: Distance between the Close and FastMA @ Buy
>
> //
>
-----------------------------------------------------------------------
>
>
>
>
>
> // For each Fast/Slow Pair buy, dump stats to a file.
>
> // Find the Minimum and Average Distances for each Pair.
>
>
>
>
>
> Distance      = Close - FastMA;
>
>
>
> PairFrequency = 0;
>
>
>
> DistanceMin = DistanceSum = DistanceAvg = 0;
>
>
>
> for ( i = 0; i < BarCount - 1; i++ )
>
> {
>
>      if ( Buy[i] )
>
>      {
>
>          // If current distance is less than the current min or this
is
> the first time
>
>          // then set DistanceMin
>
>          if ( Distance[i] < DistanceMin || PairFrequency == 0 )
>
>          {
>
>              DistanceMin = Distance[i];
>
>          }
>
>
>
>          PairFrequency++;
>
>
>          DistanceSum += Distance[i];
>
>      }
>
> }
>
>
>
> // Avoid division by zero error otherwise may show 1.#INF
>
> if ( PairFrequency != 0 )
>
> {
>
>      DistanceAvg = DistanceSum / PairFrequency;
>
> }
>
>
>
> fh = fopen( "C:\\DistanceStats.csv", "a" );  // a = appending, write
our
> stats to file
>
>
>
> if ( fh )
>
> {
>
>      fputs( StrFormat( "%.0f,%.0f,%.0f,%.4f,%.4f\n", PairFrequency,
Fast,
> Slow, DistanceMin, DistanceAvg ), fh );
>
>      fclose( fh );
>
> }
>
>
>
>
>
> Tuzo
>
>
>
> > Hello, hoping someone can help spot the bug in this rather simple
> code.
> > I can't seem to find the flaw.
> >
> > All I am trying to do is optimize over a pair of variables, and dump
a
> > database to a file that contains some stats for each winning pair.
> > Namely, I want to calculate the minimum distance between the Close
and
> > FastMA, as well as the average distance - over all the Buys for each
> > pair of optimization variables.
> >
> > While everything appears to work fine, the problem is that sometimes
> the
> > minimum is larger than the average! And of course, that cannot be. 
If
> > you run an optimization and open up the resulting CSV file, you will
> see
> > what I mean.
> >
> > I've been staring at this loop for hours, and just can't see how it
> can
> > be wrong. But of course it must be. It's probably something obvious
> that
> > my brain is overlooking. Any input much appreciated!
> >
> >
> > //
> >
>
-----------------------------------------------------------------------
> > //                   SIMPLE TRADING SYSTEM
> > //
> >
>
-----------------------------------------------------------------------
> >
> > BuyPrice = SellPrice = ShortPrice = CoverPrice = Close;
> >
> >
> > Fast     = Optimize( "fast", 5, 5, 10, 1 );
> > Slow     = Optimize( "Slow", 15, 10, 15, 1 );
> >
> > FastMA   = MA(C, Fast);
> > SlowMA   = MA(C, Slow);
> >
> > Buy      = Cross( Close, FastMA);
> > Sell     = Cross( SlowMA, Close);
> >
> > Short    = Sell;
> > Cover    = Buy;
> >
> >
> > //
> >
>
-----------------------------------------------------------------------
> > //   DUMP STATS TO FILE: Distance between the Close and FastMA @ Buy
> > //
> >
>
-----------------------------------------------------------------------
> >
> >
> > // For each Fast/Slow Pair buy, dump stats to a file.
> > // Find the Minimum and Average Distances for each Pair.
> >
> >
> > Distance      = Close - FastMA;
> >
> > PairFrequency = 0;
> >
> > DistanceMin   = DistanceSum = DistanceAvg = DistanceOld = 0;
> >
> > for (i = 0; i < BarCount - 1; i++)
> > {
> > if(Buy[i])
> > {
> >     PairFrequency++;
> >
> >     if(Distance[i] < DistanceOld)  DistanceMin = Distance[i];
> >
> >     DistanceSum = DistanceSum + Distance[i];
> >     DistanceAvg = DistanceSum/PairFrequency;
> >
> >     DistanceOld = Distance[i];
> >    }
> > }
> >
> > fh = fopen( "C:\\DistanceStats.csv", "a" );  // a = appending, write
> our
> > stats to file
> >
> >     if ( fh )
> >     {
> >      fputs( StrFormat( "%.0f,%.0f,%.0f,%.4f,%.4f\n", PairFrequency,
> Fast,
> > Slow, DistanceMin, DistanceAvg), fh );
> >      fclose( fh );
> >      }
> >
>



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

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