Stock Portfolio Organizer
The ultimate porfolio management solution.
WiseTrader Toolbox
#1 Selling Amibroker Plugin featuring:
Hilbert Sine Wave for Amibroker (AFL)
The following is a Hilbert Sine Wave developed by by Corey Saxe in 2003
Screenshots
Similar Indicators / Formulas
Indicator / Formula
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | SetBarsRequired ( 1000000, 1000000 ); price = ( H + L ) / 2; alpha = Param ( "alpha" , 0.07, 0.01, 1, 0.01 ); pi = 4 * atan ( 1 ); //have a piece... RTD = 180 / pi; //radians to degrees DTR = 1 / RTD; //degrees to radians SWcount = 0; SWGate = 0; Jcount = 0; SWCycle = 0; I1 = 0; Q1 = 0; InstPeriod = 0; DeltaPhase = 0; MedianDelta = 0; DC = 0; Value1 = 0; DCPeriod = 0; RealPart = 0; ImagPart = 0; DCPhase = 0; MedianDelta = 0; Cycle = 0; RealPart = 0; ImagPart = 0; // Sine wave generator----------------------------------------------------------- freq = Param ( "Freq" , 15, 6, 50, 1 ); SWcycle = sin ( Cum ( 1 ) * ( 360 * DTR ) / freq ) + 2; Price = IIf ( Param ( "Prices or test" , 1, 1, 2, 1 ) == 1, Price, SWCycle ); //Select sinewave test pattern or real prices //End Sine wave generator-------------------------------------------------------- for ( i = 36;i < BarCount ;i++ ) //37 { Smooth[i] = ( price[i] + 2 * price[i-1] + 2 * price[i-2] + price[i-3] ) / 6; Cycle[i] = ( ( 1 - 0.5 * alpha[i] ) ^ 2 ) * ( Smooth[i] - 2 * Smooth[i-1] + Smooth[i-2] ) + 2 * ( 1 - alpha[i] ) * Cycle[i-1] - ( ( 1 - alpha[i] ) ^ 2 ) * Cycle[i-2]; //Hilbert Transform} Q1[i] = ( 0.0962 * Cycle[i] + 0.5769 * Cycle[i-2] - 0.5769 * Cycle[i-4] - 0.0962 * Cycle[i-6] ) * ( 0.5 + 0.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] ) ); if ( DeltaPhase[i] < 0.1 ) DeltaPhase[i] = 0.1; if ( DeltaPhase[i] > 1.1 ) DeltaPhase[i] = 1.1; MedianDelta = Median ( DeltaPhase , 5 ); //zzz[i]=Mediandelta[i]; OK //zzz=Mediandelta[i]; NOT OK if ( MedianDelta[i] == 0 ) DC[i] = 15; else DC[i] = 2 * pi / MedianDelta[i] + 0.5; //DC[i] is OK InstPeriod[i] = 0.33 * DC[i] + 0.67 * InstPeriod[i-1]; Value1[i] = 0.15 * InstPeriod[i] + 0.85 * Value1[i-1]; //Compute Dominant Cycle Phase DCPeriod[i] = int ( Value1[i] ); for ( count = 0; count < DCPeriod[i] - 1; Count++ ) //DCPeriod-1 { RealPart[i] = RealPart[i] + sin ( DTR * ( 360 * count / DCPeriod[i] ) ) * Cycle[i-count]; ImagPart[i] = ImagPart[i] + cos ( DTR * ( 360 * count / DCPeriod[i] ) ) * Cycle[i-count]; } // Code to prevent TS arctan > infinity if ( abs ( ImagPart[i] ) > 0.000001 ) DCPhase[i] = atan ( RealPart[i] / ImagPart[i] ); if ( abs ( ImagPart[i] ) <= 0.000001 ) DCPhase[i] = ( pi / 2 ) * sign ( RealPart[i] ); DCPhase[i] = DCPhase[i] + ( pi / 2 ); //90 if ( ImagPart[i] < 0 ) DCPhase[i] = DCPhase[i] + pi; // add 180 if ( DCPhase[i] > ( 7*pi / 4 ) ) DCPhase[i] = DCPhase[i] - ( 2 * pi ); // sub 360 } Sine = sin ( DCPhase ); LeadSine = sin ( DCPhase + ( pi / 4 ) ); A1 = Cross ( sine, Leadsine ); A2 = Cross ( Leadsine, sine ); GraphXSpace = 5; Plot ( Sine, "Sine" , colorRed , 1 ); Plot ( LeadSine, "LeadSine" , colorGreen , 1 ); //Plot(price,"",colorYellow,24|styleNoLabel);Plot(price,"Price",colorBlue,1|styleNoLabel); //Plot(A1 OR A2,"Grn-Trough Red-Peak",IIf(A1,colorRed,IIf(A2,colorGreen,Null)),2|styleOwnScale|styleNoLabel); //Plot(cycle,"cycle",3,1); //Plot(smooth,"smooth",0,1); //Plot(test,"dcp",2,8);Plot(test1,"dcp1",1,8); //Plot(dcperiod,"DCPeriod",0,1);Plot(Count,"count",1,1); //Plot(DC,"DC",2,1); //Plot(realpart,"RP",0,1);Plot(imagpart,"IP",1,1); //Plot(alpha,"alpha",2,1); |
1 comments
Leave Comment
Please login here to leave a comment.
Back
Hi,
Thanks for sharing this afl.
For those more interested in Hilbert Sine Wave,
here is the link
http://emini-watch.com/products/hilbert-sine-wave/