--- In [email protected], "ozzyapeman" <zoopf...@...> 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 );
>      }
>

Reply via email to