Rakesh,
Thanks for the post...I would be more than happy to help but right now am in the midst of moving house (the long post this morning was my excuse for a tea-break from packing!). Give me a buzz in a week or so if I haven't replied by then.
Cheers,
Andy


Rakesh Sahgal wrote:
Hi Andy

As you so rightly said the simplicity of the approach outlined by Hurst and it's logical appeal is very high. As luck would have it I had once recieved some code from the group on Curvlinear Envelopes. The problem I had found with that was the analysis was continuous and the projections kept moving, So one could not analyse upto a point and then stop and see how the future action played out against the projections.

Being an accountant by education and with no worthwhile math/programming skills to speak of I stopped banging my head against the wall with respect to ammending the code. Inspite of that I still pick up the book as and when I can muster the courage to try figure out the whole thing.

Please correct me if my understanding is erroneous, I am now veering down to the view if we can draw curvilnear envelopes upto a major pivot  and stop AB from using the data subsequent to the pivot and make projections from there we can have a worthwhile tool to work with cycles. If you think there is a better way to identify cycles utilising Hurst's approach within the AB environment than the one I am thinking of using,  I will be very grateful if you could show me how to do it. Thanks,

Regards



Rakesh


On 10/6/06, Andy Davidson <[EMAIL PROTECTED]> wrote:
That's a no-brainer then. Thanks.

Tomasz Janeczko wrote:
> It is up to you, but built-in functions are several orders of magnitude faster
> because they execute native CPU code.
>
> Best regards,
> Tomasz Janeczko
> amibroker.com
> ----- Original Message -----
> From: "Andy Davidson" <[EMAIL PROTECTED] >
> To: <[email protected]>
> Sent: Thursday, October 05, 2006 9:53 PM
> Subject: Re: [amibroker] Ehlers Dominant Cycle
>
>
>
>> Thanks Tomasz...as far as I recall I cut-and-pasted that "placed inline
>> for speed" median calculation from the version posted in the library &
>> haven't revisited the code until now. I take it then that there is no
>> performance benefit to the way I have it and I should (for the benefit
>> of efficiency) simplify the code accordingly?
>>
>> Tomasz Janeczko wrote:
>>
>>> FYI: Median is built-in function
>>>
>>> Best regards,http://www.amibroker.com/f?median
>>> Tomasz Janeczko
>>> amibroker.com
>>>
>>>     ----- Original Message -----
>>>     *From:* Andy Davidson <mailto:[EMAIL PROTECTED]>
>>>     *To:* [email protected] <mailto:[email protected]>
>>>     *Sent:* Thursday, October 05, 2006 7:46 PM
>>>     *Subject:* Re: [amibroker] Ehlers Dominant Cycle
>>>
>>>     Steve,
>>>     I think you're getting confused between Ehler's two books. As far
>>>     as I recall (books not to hand right now) he makes the confusion
>>>     easy as there is a "Dominant Cycle" indicator in both 'Rocket
>>>     Science' and 'Cybernetic', which are based on different methods.
>>>     Looks to me like the top one on your plot is the former and the
>>>     bottom is the latter. I personally have used the latter...the code
>>>     is copied below, which is probably nearly identical to the posted
>>>     AFL library version as I used that as a starting point when I
>>>     worked through it myself.
>>>     Can't help you with the 'Rocket Science' version I'm afraid.
>>>     Andy
>>>
>>>
>>>     // Ehler's Dominant Cycle Period
>>>     // Cybernetic Analysis for Stocks and Futures
>>>     // Chapter 9, p. 107. Code on p. 111.
>>>
>>>     //Global Parameters
>>>     X = Param("MP[1] Close[2]",1,1,2,1);
>>>     Z1 = IIf(X==1, (H+L)/2 , C);
>>>     Z2 = Param("Alpha", .07, .01, 1, .01);
>>>
>>>     function CyclePeriod(price, alpha)
>>>     {
>>>      instperiod = deltaphase = cycle = period = 0;
>>>      Cycle = ( price[2] - 2*price[1] + price[0] )/4;   //initialise arrays
>>>      smooth = ( price + 2*Ref(price,-1) + 2*Ref(price,-2) +
>>>     Ref(price,-3) )/6;
>>>
>>>      for (i=6 ; i<BarCount ; i++)
>>>       {
>>>        Cycle[i] = (1-alpha/2)^2 * ( smooth[i] - 2*smooth[i-1] +
>>>     smooth[i-2] ) +
>>>                   2*(1-alpha)*Cycle[i-1] - (1-alpha)^2*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]));
>>>        //limit Delta Phase High/Low (0.09rads = 69bars, 1.1rads =
>>>     6bars...per page 117)
>>>        if(DeltaPhase[i] < 0.09)
>>>         DeltaPhase[i] = 0.09;
>>>        if(DeltaPhase[i] > 1.1)
>>>         DeltaPhase[i] = 1.1;
>>>
>>>        //---Begin median calculation (placed inline for speed).
>>>        //Hardcoded as length=5 as higher values would be out of range
>>>     due to start-up period in main loop
>>>        for(k=4; k>=0; k--)
>>>         { temparray[k] = DeltaPhase[i-k]; } //create new array with
>>>     last 5 values of DeltaPhase
>>>        temp = 0;
>>>        for(k=4; k>0; k--)  //this series of loops re-organises
>>>     temparray into ascending order
>>>        { for (j=4; j>0; j--)
>>>          { if (temparray[j-1] > temparray[j]) //swap values in array
>>>     if previous value is greater
>>>            { temp = temparray[j-1];
>>>              temparray[j-1] = temparray[j];
>>>              temparray[j] = temp;
>>>        }}}
>>>        MedianDelta[i] = temparray[2]; //returns the middle (third)
>>>     element of temparray
>>>        //---End median calculation
>>>
>>>        DC[i] = Nz( 6.28318 / MedianDelta[i] + .5, 15 );
>>>
>>>        InstPeriod[i] = .33*DC[i] + .67*InstPeriod[i-1];
>>>        Period[i] = .15*InstPeriod[i] + .85*Period[i-1];
>>>        }
>>>      for (i=0; i<7; i++)
>>>       { Period[i] = 1; }
>>>      return Period;
>>>     }
>>>
>>>     Plot( CyclePeriod(Z1,Z2) , "CyberCycle", colorRed );
>>>
>>>
>>>
>>>     Steve Dugas wrote:
>>>
>>>>     Hi All,
>>>>
>>>>     I wonder if anyone has ever tried to code Ehlers Dominant Cycle -
>>>>     the one based on the Homodyne Discriminator, pp. 68-69 in Rocket
>>>>     Science. I have never used TradeStation and this is my first shot
>>>>     at translating EasyLanguage. As far as I can see the code looks
>>>>     OK to me but what do I know? Anyway, the graph it produces (
>>>>     middle one ) looks pretty bad. For comparison, I plotted the
>>>>     Dominant Cycle code from the AFL library on the bottom ( but I
>>>>     believe this uses a different method ).  I would like to go on
>>>>     and code the rest of the indicators in the book but many are
>>>>     built on this so I need to get this right first. Any thoughts
>>>>     or working code would be greatly appreciated. I have enclosed my
>>>>     code below.Thank you!
>>>>
>>>>     Steve
>>>>
>>>>
>>>>     // Dominant Cycle
>>>>
>>>>     SetBarsRequired( 10000, 10000 );
>>>>
>>>>     // USER DEFINED PARAMS
>>>>
>>>>     Price = ( *High* + *Low* ) / 2;
>>>>
>>>>     // FORMULA
>>>>
>>>>     // initialize variables
>>>>
>>>>     Smooth = Detrender = I1 = Q1 = jI = jQ = I2 = Q2 = Re = Im =
>>>>     Period = SmoothPeriod = 0;
>>>>
>>>>     // calculate dominant cycle period
>>>>
>>>>     *for* ( i = 6; i < *BarCount*; i++ )
>>>>
>>>>     {
>>>>
>>>>     // smooth price data with 4-bar WMA
>>>>
>>>>     Smooth[i] = ( 4 * Price[i] + 3 * Price[i-1] + 2 * Price[i-2] +
>>>>     Price[i-3] ) / 10;
>>>>
>>>>     // compute amplitude correction
>>>>
>>>>     AmpCorr[i] = 0.075 * Period[i-1] + 0.54;
>>>>
>>>>     // compute detrended price data and Quadrature component with
>>>>     7-bar Hilbert Transform
>>>>
>>>>     Detrender[i] = ( 0.0962 * Smooth[i] + 0.5769 * Smooth[i-2] -
>>>>     0.5769 * Smooth[i-4] - 0.0962 * Smooth[i-6] ) * AmpCorr[i];
>>>>
>>>>     Q1[i] = ( 0.0962 * Detrender[i] + 0.5769 * Detrender[i-2] -
>>>>     0.5769 * Detrender[i-4] - 0.0962 * Detrender[i-6] ) * AmpCorr[i];
>>>>
>>>>     // compute InPhase component by referencing center bar of Hilbert
>>>>     Transformer ( 3 bars ago )
>>>>
>>>>     I1[i] = Detrender[i-3];
>>>>
>>>>     // advance the phase of I1 and Q1 by 90 degrees with 7-bar
>>>>     Hilbert Transform
>>>>
>>>>     jI[i] = ( 0.0962 * I1[i] + 0.5769 * I1[i-2] - 0.5769 * I1[i-4] -
>>>>     0.0962 * I1[i-6] ) * AmpCorr[i];
>>>>
>>>>     jQ[i] = ( 0.0962 * Q1[i] + 0.5769 * Q1[i-2] - 0.5769 * Q1[i-4] -
>>>>     0.0962 * Q1[i-6] ) * AmpCorr[i];
>>>>
>>>>     // perform Phasor addition for 3-bar averaging
>>>>
>>>>     I2[i] = I1[i] - jQ[i];
>>>>
>>>>     Q2[i] = Q1[i] + jI[i];
>>>>
>>>>     // smooth the I and Q components
>>>>
>>>>     I2[i] = 0.2 * I2[i] + 0.8 * I2[i-1];
>>>>
>>>>     Q2[i] = 0.2 * Q2[i] + 0.8 * Q2[i-1];
>>>>
>>>>     // apply the Homodyne Discriminator
>>>>
>>>>     Re[i] = I2[i] * I2[i-1] + Q2[i] * Q2[i-1];
>>>>
>>>>     Im[i] = I2[i] * Q2[i-1] - Q2[i] * I2[i-1];
>>>>
>>>>     // smooth the Re and Im components
>>>>
>>>>     Re[i] = 0.2 * Re[i] + 0.8 * Re[i-1];
>>>>
>>>>     Im[i] = 0.2 * Im[i] + 0.8 * Im[i-1];
>>>>
>>>>     // compute Dominant Cycle period
>>>>
>>>>     *if* ( Im[i] != 0 *AND* Re[i] != 0 )
>>>>
>>>>     Period[i] = 360 / atan( Im[i] / Re[i] );
>>>>
>>>>     // limit ROC of the cycle period to +/- 50% of previous cycle period
>>>>
>>>>     *if* ( Period[i] > 1.5 * Period[i-1] )
>>>>
>>>>     Period[i] = 1.5 * Period[i-1];
>>>>
>>>>     *if* ( Period[i] < 0.67 * Period[i-1] )
>>>>
>>>>     Period[i] = 0.67 * Period[i-1];
>>>>
>>>>     // limit the cycle period to be > 6 or < 50
>>>>
>>>>     *if* ( Period[i] < 6 )
>>>>
>>>>     Period[i] = 6;
>>>>
>>>>     *if* ( Period[i] > 50 )
>>>>
>>>>     Period[i] = 50;
>>>>
>>>>     // smooth the cycle period
>>>>
>>>>     Period[i] = 0.2 * Period[i] + 0.8 * Period[i-1];
>>>>
>>>>     SmoothPeriod[i] = 0.33 * Period[i] + 0.67 * SmoothPeriod[i-1];
>>>>
>>>>     }
>>>>
>>>>     Plot( SmoothPeriod, "Dominant Cycle", *colorWhite*,
>>>>     *styleLine*|*styleOwnScale* );
>>>>
>>>>     //Plot( Re, "Re", colorBlue, styleLine|styleOwnScale );
>>>>
>>>>     //Plot( Im, "Im", colorSkyblue, styleLine|styleOwnScale );
>>>>
>>>>     //Plot( Im/Re, "Im/Re", colorDarkGreen, styleLine|styleOwnScale );
>>>>
>>>>     //Plot( atan(Im/Re), "atan(Im/Re)", colorBrightGreen,
>>>>     styleLine|styleOwnScale );
>>>>
>>>>     //Plot( Period, "Period", colorYellow, styleLine|styleOwnScale );
>>>>
>>>>
>>>>     ------------------------------------------------------------------------
>>>>
>>>>
>>>
>>>
>>
>> ___________________________________________________________
>> Yahoo! Messenger - with free PC-PC calling and photo sharing. http://uk.messenger.yahoo.com
>>
>>
>> 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
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>
>
> 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
>
>
>
>
>
>
>
>
>
>
>


___________________________________________________________
All New Yahoo! Mail � Tired of [EMAIL PROTECTED]@! come-ons? Let our SpamGuard protect you. http://uk.docs.yahoo.com/nowyoucan.html


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/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/amibroker/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto: [EMAIL PROTECTED]
    mailto:[EMAIL PROTECTED]

<*> To unsubscribe from this group, send an email to:
     [EMAIL PROTECTED]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/





__._,_.___

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






SPONSORED LINKS
Software support Small business finance Business finance online
Business finance training Business finance course

Your email settings: Individual Email|Traditional
Change settings via the Web (Yahoo! ID required)
Change settings via email: Switch delivery to Daily Digest | Switch to Fully Featured
Visit Your Group | Yahoo! Groups Terms of Use | Unsubscribe

__,_._,___

Reply via email to