Hurst's work that is comprised of the course material stands alone ... but the math in the appendicies of his book ( PM ) doesn't ... Cleeton's book covers some of what Hurst covers quickly in more depth but still falls a little short for this Trig Challenged Individual ... I suspect what it needs is the same Gaussian Elimination routine that I posted with PolyFit but I'm hard pressed to come up with the equations to fill the cells in the matrix to solve for the coefficients and/or the angualr frequencies.
--- In [email protected], "Rakesh Sahgal" <[EMAIL PROTECTED]> wrote: > > Is the book by Brian Millard , which is supposed to be based on Hurst's > work, any help in understanding Hurst's work - a sort of Hurst for > dummies kind of thing? > > Rakesh > > On 10/7/06, Fred <[EMAIL PROTECTED]> wrote: > > > > There are other books that would no doubt provide some clues but I > > don't think Hurst provides any additional clues in his book to what's > > in the appendecies which are I think back up information / > > methodologies for the book. > > > > --- In [email protected], "Steve Dugas" <sjdugas@> wrote: > > > > > > 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" <ftonetti@> > > > 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" <sjdugas@> 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 > > > > > > > > > > > > > > > > > > > > > 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/
