|SetBarsRequired( *sbrAll*, *sbrAll* );

*for* ( r = 1; r < 10;  r++ )
{
   reverse = r / 100;
   kagi[0] = *Low*[0];
   j = 0;

   direction[0] = 0;

  Gartley = 0;
   range = *Null*;
   num = 0;

   *for* ( i = 1; i < *BarCount*; i++ )
   {
       *if* ( direction[j] == 0 )
       {
           *if* ( *Low*[i] < kagi[j] )
           {
               kagi[j] = *Low*[i];
           }
           *else*
               *if* ( *High*[i] >= kagi[j]*( 1 + reverse ) )
               {
                   j++;
                   kagi[j] = *High*[i];
                   direction[j] = 1;
               }
       }
       *else*
       {
           *if* ( *High*[i] > kagi[j] )
           {
               kagi[j] = *High*[i];
           }
           *else*
               *if* ( *Low*[i] <= kagi[j]* ( 1 - reverse ) )
               {
                   j++;
                   kagi[j] = *Low*[i];
                   direction[j] = 0;
               }
       }

       *if* ( j > 2 )
       {

           range[j] = abs( kagi[j] - kagi[j-1] );

           XA = Range[j-3];
           AB = Range[j-2];
           BC = Range[j-1];
           CD = Range[j];

ulp = 500000; //maximum relative error of the comparison : 1 unit in last place(ulp) represents relative error of 0.00001 %
           C1 = AlmostEqual( AB,  0.618 *  XA, ulp );
C2 = AlmostEqual( BC, 0.382 * AB, ulp ) || AlmostEqual( BC, 0.886 * AB, ulp ); C3 = AlmostEqual( CD, 1.27 * BC, ulp ) || AlmostEqual( CD , 1.618 * BC, ulp );

          Gartley = C1 && C2 && C3;

           *if* (Gartley)    num++;
}

   }

   *Filter* = Gartley;
   AddColumn( NUM , "% " + r , 1.0 );
}
|

Reply via email to