Hi Fred - Well, I just opened the book for the first time to look at App 6 
and I'm afraid  its over my head. Maybe I will have a better grasp after 
reading the book, but unfortunately I am not an engineer or anything, and my 
first thought is that if it is giving *you* some trouble, then *my* chances 
are probably slim to none.   8 - )   But anyway, I will do some reading over 
the weekend, and see if I can learn anything...

BTW, I noticed that our two threads seemed to be related. It would seem that 
I am starting down a road that you have some experience in so I would value 
your opinion. As far as timing is concerned, do you think that cycles, ala 
Ehlers, Hurst, etc is the preferred way to go? In the future, after I have 
come up to speed, perhaps we could bounce some ideas around, etc...

Steve

----- Original Message ----- 
From: "Fred" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, October 06, 2006 2:26 PM
Subject: [amibroker] Re: Ehlers Dominant Cycle


> Steve,
>
> Are your math skills strong enough to implement what's in Appendix 6
> of Hurst's book ?
>
> --- In [email protected], "Steve Dugas" <[EMAIL PROTECTED]> wrote:
>>
>> OK, thanks Andy!  I will do something else for a few days and wait
> for Cybernetics to arrive ( I also got the MESA book, but had to
> wait while they backordered both. )  I have had Hurst's book on my
> shelf for a couple of months now, waiting patiently for a little
> attention - I will look that over in the meantime. Thanks very much
> and good luck with your move - maybe we can pick this up again a
> little way down the road...
>>
>> Steve
>>
>> ----- Original Message ----- 
>>   From: Andy Davidson
>>   To: [email protected]
>>   Sent: Friday, October 06, 2006 4:27 AM
>>   Subject: Re: [amibroker] Ehlers Dominant Cycle
>>
>>
>>   Steve,
>>
>>   I think Ehler believes that the Cyber Cycle method is better...I
> remember that being my impression when I read the books. Certainly
> both approaches use the Hilbert Transform but I think the difference
> lies in the method of extracting the Quadrature and In-Phase
> components. Difficult to say exactly without the book to hand to
> double check what I'm saying!
>>
>>   As for the differences between approaches, try playing around
> with the alpha parameter (which determines the smoothing and
> therefore low-end cut-off level for the measured cycles). You will
> probably see some very large shifts in the period for even a 0.01
> change in alpha. This tells me something.
>>
>>   I do use Ehler's cycle measurements in some of my indicators as
> an adaptive input to the period function. He talks about this
> approach in the Cybernetic book. The reason I do this is because my
> feeling is that something which at least attempts to measure a cycle
> period is probably better than than some arbitrary optimised number.
> I say 'probably' as I can't prove this to be the case - it's just a
> matter of what makes more logical sense to me.
>>
>>   To my mind though there's one pretty big hole in Ehler's
> approach. Basically he states that although there are multiple
> cycles at play in the market at any one time there is only one that
> is "dominant" and thus tradeable. So you are only taking into
> account and trying to measure one specific cycle at any one time.
> One way he achieves this is through limiting the parameters to
> specific wavelength ranges. Therefore you might be assuming that you
> are (a) going to ignore cycles less than 6-bars in period as noise
> and (b) going to ignore cycles of more than, say, 60 bars as too
> long to trade (or too prone to margins of error) and then measuring
> *the* cycle in that range. Well what if there is a 20-bar and a 45-
> bar cycle at play at the same time and the noise sometimes exceeds 6-
> bars? My experience is that Ehler's method is not good at coping
> with this. I'm no engineer and so my theorising might be flawed, but
> my experience of engineering tells me that you get to work with much
> bigger margins of error than we can tolerate as traders. For
> example, you might be able to use Hilbert Transforms in electronic
> engineering to extract a person's voice from a 'noisy'
> waveform...but I would say that there is still too much noise in the
> output signal to transfer the analogy to the trading world. We can
> make sense of the extracted voice but this is because our human
> brains are good at that sort of thing, not because the modified
> signal is particularly clear in a real sense. Our trading capital is
> not so good at dealing with the remnant noise!!
>>
>>   As far as measuring cycles goes, I have had much more success
> and have much more confidence in the approach outlined by Hurst in
> his "Profit Magic of Stock Transaction Timing". An old book which
> uses centred MAs and assumes there are many cycles to be
> measured...centred MAs are much more low-tech than Hilbert
> Transforms I know, but there's beauty in the simplicity if you can
> get away from the idea that your indicators must tell you
> the "answer" right up to the right edge of the chart. Of course, the
> fact that centred MAs *don't* go the right-edge makes backtesting
> very difficult. Well, there's flaws with everything of course...
>>
>>   Anyway, let me know how you get on and I'll help more if I can.
> I'm in the process of moving house at the moment so can't do much
> more until I get set-up again. Good luck.
>>
>>   Andy
>>
>>
>>   Steve Dugas wrote:
>>     Hi Andy,
>>
>>     In Rocket Science, Ehlers shows 3 methods to compute the cycle
> period. Then he tests them against each other and determines that
> the Homodyne Discriminator method had the the best characteristics
> of the 3, so he uses that code as a basis for the indicators that
> follow. The 3 yeilded fairly similar results, so when my graph
> looked wrong, I figured the code from the library should give me a
> rough idea of what mine should look like even though it is created
> through a different technique. I still think there is something
> wrong with mine, it should look much more like the other one. Maybe
> I will be able to just substitute your code for mine and build from
> there. Is the one in Cybernetics supposed to be better? I ordered
> that book too, but it got delayed and I just found out that it
> shipped today. Thanks for the code!
>>
>>     Steve
>>       ----- Original Message ----- 
>>       From: Andy Davidson
>>       To: [email protected]
>>       Sent: Thursday, October 05, 2006 1: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 );
>>
>>
>>
>> -------------------------------------------------------------------
> -----
>>
>
>
>
>
>
>
> 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

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


Reply via email to