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

Re: [amibroker] Ehler's SineWave Indicator Code check form AB GURU please.



PureBytes Links

Trading Reference Links

There's an Ehler's sinewave indicator in "indicators.dll":   
http://www.amibroker.org/3rdparty/

On Mon, 12 Sep 2005 20:40:09 -0400, Joe Landry <jelandry@xxxxxxxxxxxxx>  
wrote:

> Hello Corey Saxe - are you on line?
>
> Moni -
> Corey wrote a version of it and let's see if he's still on the forum
> and if you get his copy then you can compare your code with his.
> It may well be in the AFL area in Amibroker or the AB Forum files area.
>
> JOE
>
>   ----- Original Message -----
>   From: mmqp
>   To: amibroker@xxxxxxxxxxxxxxx
>   Sent: Monday, September 12, 2005 11:57 AM
>   Subject: [amibroker] Ehler's SineWave Indicator Code check form AB  
> GURU please.
>
>
>   Hi,
>   Can any AB guru who is familiar with Ehler's work check to see if the
>   following SineWave Indicator code is correct?  TIA
>
>   SetBarsRequired( 200, 0 );
>
>   // Ehlers Sine Wave Indicator
>   // Cybernetic Analysis for Stocks and Futures
>   // Chapter 11, p. 154.
>   // Original code is at:
>
>   function CyclePeriod(array, alpha)
>   // Figure 9.4 on p. 111
>   {
>     smooth = (array + 2*Ref(array, -1) + 2*Ref(array, -2) + Ref(array,
>   -3))/6; // Weighted Average
>
>   //  for(i = 0; i < 7; i++) cycle[i]=array[i]; // Initialize early
>   values and as array
>
>     for(i = 0; i < 6; i++) {
>        InstPeriod[i] = 0; // Initialize early values and as array
>        DeltaPhase[i] = 0;
>        cycle[i]=0;
>        Period[i]=0;
>     }
>
>     for(i = 6; i < BarCount; i++) {
>        cycle[i] = (1 - .5*alpha)*(1 - .5*alpha)*(smooth[i] -
>   2*smooth[i-1] + smooth[i-2]) +
>                   2*(1 - alpha)*cycle[i-1] - (1 - alpha)*(1 -
>   alpha)*cycle[i-2];
>        Q1[i] = (.0962*cycle[i] + .5769*cycle[i-2] -.5769*cycle[i-4] -
>   .0962*cycle[i-6])*(.5 + .08*InstPeriod[i-1]);
>        I1[i] = cycle[i-3];
>
>        if(Q1[i] != 0 AND Q1[i-1] != 0)
>           DeltaPhase[i] = (I1[i]/Q1[i] - I1[i-1]/Q1[i-1])/(1 +
>   I1[i]*I1[i-1]/(Q1[i]*Q1[i-1]));
>        if(DeltaPhase[i] < 0.1) DeltaPhase[i] = 0.1;
>        if(DeltaPhase[i] > 1.1) DeltaPhase[i] = 1.1;
>
>        //----- Speed up the median calculation by placing it inline
>
>        mlen = 5;
>        for(k = mlen - 1; k >= 0; k--) {temparray[k] = DeltaPhase[i + k -
>   (mlen - 1)];}
>
>        temp=0;
>        for(k = mlen - 1; k > 0; k--) {
>          for (j = mlen - 1; j > 0; j--) {
>            if (temparray[j-1] > temparray[j]) {
>              temp = temparray[j-1];
>              temparray[j-1] = temparray[j];
>              temparray[j] = temp;
>            }
>          }
>        }
>        MedianDelta[i] = temparray[mlen - 1 - (mlen / 2)];
>
>        //----- End median calculation
>
>        if(MedianDelta[i] == 0) DC[i] = 15;
>        else DC[i] = 6.28318/MedianDelta[i] + .5;
>
>        InstPeriod[i] = .33*DC[i] + .67*InstPeriod[i-1];
>        Period[i] = .15*InstPeriod[i] + .85*Period[i-1];
>     }
>     return Period;
>   }
>
>   function CyberCycle( array, alpha )
>   {
>     smooth = ( array + 2 * Ref( array, -1 ) +
>                2 * Ref( array, -2 ) + Ref( array, -3 ) ) / 6;
>     // init value
>     Cycle = ( array[ 2 ] - 2 * array[ 1 ] + array[ 0 ] )/4;
>     for( i = 6; i < BarCount; i++ )
>     {
>        Cycle[ i ] = ( ( 1 - 0.5 * alpha) ^ 2 ) *
>                     ( smooth[ i ] - 2 * smooth[ i - 1 ] + smooth[ i - 2]  
> ) +
>                     2 * ( 1 - alpha ) * Cycle[ i - 1 ] -
>                     ( ( 1 - alpha) ^ 2 ) * Cycle[ i - 2 ];
>     }
>     return Cycle;
>   }
>
>   // compute cycle
>   Cycle = CyberCycle( (H+L)/2, 0.07 );
>
>   // Compute Dominant Cycle.
>   dominantPeriod = CyclePeriod ( (H+L)/2, 0.07 );
>
>   // Compute Dominant Cycle Phase.
>   DCPeriod = int ( LastValue(dominantPeriod) );
>   RealPart = 0;
>   ImagPart = 0;
>
>   for ( Count = 0 ; Count < DCPeriod ; Count++ ) {
>     RealPart = RealPart + ( sin (360 * (Count/DCPeriod)) *  
> (Cycle[Count]));
>     ImagPart = ImagPart + ( cos (360 * (Count/DCPeriod)) *  
> (Cycle[Count]));
>   }
>
>   if ( abs(ImagPart) > 0.001 ) { DCPhase = atan (RealPart/ImagPart); }
>   if ( abs(ImagPart) <= 0.001 ) { DCPhase = 90 * sign (RealPart); }
>
>   DCPhase = DCPhase + 90;
>
>   if ( ImagPart < 0 ) { DCPhase = DCPhase + 180; }
>   if ( DCPhase > 315 ) { DCPhase = DCPhase - 360; }
>
>   Plot ( sin (DCPhase) , "Sine" , colorBlue , styleLine + styleThick );
>   Plot ( sin (DCPhase + 45), "LeadSine", colorRed , styleLine +
>   styleThick );
>
>
>
>
>   Please note that this group is for discussion between users only.
>
>   To get support from AmiBroker please send an e-mail directly to
>   SUPPORT {at} amibroker.com
>
>   For other support material please check also:
>   http://www.amibroker.com/support.html
>
>
>
>
>
> ------------------------------------------------------------------------------
>   YAHOO! GROUPS LINKS
>
>     a..  Visit your group "amibroker" on the web.
>    b..  To unsubscribe from this group, send an email to:
>      amibroker-unsubscribe@xxxxxxxxxxxxxxx
>    c..  Your use of Yahoo! Groups is subject to the Yahoo! Terms of  
> Service.
>
>
> ------------------------------------------------------------------------------
>




------------------------ Yahoo! Groups Sponsor --------------------~--> 
Help tsunami villages rebuild at GlobalGiving. The real work starts now.
http://us.click.yahoo.com/njNroD/KbOLAA/cosFAA/GHeqlB/TM
--------------------------------------------------------------------~-> 

Please note that this group is for discussion between users only.

To get support from AmiBroker please send an e-mail directly to 
SUPPORT {at} amibroker.com

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/

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