| Home | |
| Hilbert Channel Indicator by Roger Darley | |
| Typ : Function, Name : HilbertPeriod | |
{ ---------------------------------------------------------- HilbertPeriod (Function) by John Ehlers (7/22/00) This is the Hilbert Cycle Period Function used by the Hilbert Channel Breakout System. It must be named "HilbertPeriod". ---------------------------------------------------------- } Inputs: Price(numeric); Vars: Smoother(0), Detrender(0), I1(0), Q1(0), jI(0), jQ(0), I2(0),Q2(0), X1(0), X2(0), Y1(0), Y2(0), Re(0), Im(0), Period(0); If CurrentBar >5 then begin Smoother = (4*Price + 3*Price[1] + 2*Price[2] + Price[3])/10; Detrender = (.25*Smoother + .75*Smoother[2] - .75*Smoother[4] - .25*Smoother[6])*(.046*Period[1] + .332); {Compute InPhase and Quadrature components} Q1 = (.25*Detrender + .75*Detrender[2] - .75*Detrender[4] - .25*Detrender[6])*(.046*Period[1] + .332); I1 = Detrender[3]; {advance the phase of I1 and Q1 by 90 degrees} jI = .25*I1 + .75*I1[2] - .75*I1[4] - .25*I1[6]; jQ = .25*Q1 + .75*Q1[2] - .75*Q1[4] - .25*Q1[6]; {Phasor addition to equalize amplitude due to quadrature calculations (and 3 bar averaging)} I2 = I1 - jQ; Q2 = Q1 + jI; {Smooth the I and Q components before applying the discriminator} I2 = .15*I2 + .85*I2[1]; Q2 = .15*Q2 + .85*Q2[1]; {Homodyne Discriminator} {Complex Conjugate Multiply} X1 = I2*I2[1]; X2 = I2*Q2[1]; Y1 = Q2*Q2[1]; Y2 = Q2*I2[1]; Re = X1 + Y1; Im = X2 - Y2; {Smooth to remove undesired cross products} Re = .2*Re + .8*Re[1]; Im = .2*Im + .8*Im[1]; {Compute Cycle Period} If Im <> 0 and Re <> 0 then Period = 360/ArcTangent(Im/Re); If Period > 1.5*Period[1] then Period = 1.5*Period[1]; If Period < .67*Period[1] then Period = .67*Period[1]; If Period < 6 then Period = 6; If Period > 50 then Period = 50; Period = .2*Period + .8*Period[1]; {END CORE CODE} HilbertPeriod = Period; end; | |
| Typ : Indicator, Name : Hilbert Channel Indicator | |
{******************************************************************************** Hilbert_Channel (Indicator) This is the indicator for the Hilbert Channel Breakout System. After the Hilbert Channel Breakout Signal is optimized, set the inputs for this indicator to match the corresponding inputs for the signal. Also set the "Max number of bars the study will reference" on the indicator's Properties tab to the corresponding value on the Properties tab for the signal. Plot1 and plot2 should be lines; plot3 and plot 4 should be medium-thin points. ******************************************************************************** } inputs: Price((H + L)/2), EntryVal(0), EntryK(0), ExitVal(0), ExitK(0); vars: Period(0), count(0), EntryLookBack(0), ExitLookBack(0), EntryChannel(0), ExitChannel(0); Period = HilbertPeriod(Price); If EntryVal <> 0 then EntryLookBack = EntryVal else EntryLookBack = EntryK*Period; if EntryLookBack < 1 then EntryLookBack = 1; If ExitVal <> 0 then ExitLookBack = ExitVal else ExitLookBack = ExitK*Period; if ExitLookBack < 1 then ExitLookBack = 1; EntryChannel = 0; for count = 1 to EntryLookBack begin if EntryChannel < High[count] then EntryChannel = High[count]; end; ExitChannel = 100000; for count = 1 to ExitLookBack begin if ExitChannel > Low[count] then ExitChannel = Low[count]; end; plot1(EntryChannel, "EntryChannel"); plot2(ExitChannel, "ExitChannel"); If High > EntryChannel then plot3(EntryChannel, "Enter"); If Low < ExitChannel then plot4(ExitChannel, "Exit"); | |
![]() | |
| -- Roger Darley | |
| Znalezione na/w/od: | |
| http://www.traders.com - 2000-11-tips | |
| Home | ___________________________________________________________________________________ |