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