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
__,_._,___
|