Stock Portfolio Organizer

The ultimate porfolio management solution.

Shares, Margin, CFD's, Futures and Forex
EOD and Realtime
Dividends and Trust Distributions
And Much More ....
For Portfolio Manager Click Here

WiseTrader Toolbox

#1 Selling Amibroker Plugin featuring:

Advanced Adaptive Indicators
Advanced Pattern Exploration
Neural Networks
And Much More ....
Find Out More Here

Hilbert Sine Wave for Amibroker (AFL)

Rating:
3 / 5 (Votes 3)
Tags:
oscillator, amibroker

The following is a Hilbert Sine Wave developed by by Corey Saxe in 2003

Screenshots

Similar Indicators / Formulas

3 Days Track
Submitted by janet0211 over 14 years ago
Trading Volume Statistic
Submitted by tuanstock1 over 10 years ago
Ergodic Oscillator
Submitted by dljtrader about 14 years ago
BoH Risk Aversion Indicator
Submitted by genkumag about 13 years ago
Chande Momentum Oscillator
Submitted by klimpek about 14 years ago
%R ++
Submitted by reb over 14 years ago

Indicator / Formula

Copy & Paste Friendly
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

1. cnbondre

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/

Leave Comment

Please login here to leave a comment.

Back