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

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



PureBytes Links

Trading Reference Links

Thanks Bill, I now have to figure out how to pluggin the DLL.

--- In amibroker@xxxxxxxxxxxxxxx, "Bill Schmidt" <wjschmidt@xxxx> wrote:
> 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@xxxx>  
> 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 Sudanese refugees rebuild their lives through GlobalGiving.
http://us.click.yahoo.com/hjNroD/EbOLAA/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/