// Downloaded From https://www.WiseStockTrader.com _SECTION_BEGIN("cycle121"); SetChartBkColor(ParamColor("Panel color ",colorOrange)); PI = 3.1415926; Data = (H+L)/2; // detrending ( high-pass filter ) HFPeriods = Param("HP filter cutoff", 40, 20, 100 ); alpha1 = ( 1-sin(2*pi/HFPeriods) ) / cos( 2 * pi / HFPeriods ); HP = AMA2( Data - Ref( Data, -1 ), 0.5 * ( 1 + alpha1 ), alpha1 ); // 6-tap low-pass FIR filter SmoothHP = ( HP + 2 * Ref( HP, -1 ) + 3 * Ref( HP, -2 ) + 3 * Ref( HP, -3 ) + 2 * Ref( HP, -4 ) + Ref( HP, -5 ) )/12; SmoothHPDiff = SmoothHP - Ref( SmoothHP, -1 ); x = BarIndex(); delta = -0.015 * x + 0.5; delta = Max( delta, 0.15 ); Q = 0; Real = 0; Imag = 0; Ampl = 0; DB = 0; I = SmoothHP; MaxAmpl = 0; for( N = 8; N <= 50; N++ ) { beta = cos( 2 * PI / N ); Q = ( N / ( 2 * PI ) ) * SmoothHPDiff; for( bar = 8; bar < BarCount; bar++ ) { gamma = 1 / cos( 4 * PI * delta[ bar ] / N ); alpha = gamma - sqrt( gamma ^ 2 - 1 ); Real[ bar ] = 0.5 * ( 1 - alpha ) * ( I[ bar ] - I[ bar - 1 ] ) + beta * ( 1 + alpha ) * Real[ bar - 1 ] - alpha * Real[ bar - 2 ]; Imag[ bar ] = 0.5 * ( 1- alpha ) * ( Q[ bar ] - Q[ bar - 1 ] ) + beta * ( 1 + alpha ) * Imag[ bar - 1 ] - alpha * Imag[ bar - 2 ]; } Ampl = Real ^ 2 + Imag ^ 2; MaxAmpl = Max( MaxAmpl, Ampl ); VarSet("Ampl"+N, Ampl ); } TunedFilterDisplay = ParamToggle("Dom Cycle Tuned Filter", "No|Yes" ); // Plot Heat Map ( Spectrogram ) // and find dominant cycle DcNum = DcDenom = 0; for( N = 8; N <= 50; N++ ) { Ampl = VarGet("Ampl"+N); db = Nz( -10 * log10( 0.01 / ( 1 - 0.99 * Ampl / MaxAmpl ) ) ); db = Min( db, 20 ) ; Red = IIf( db <= 10, 255, 255 * ( 2 - db/10 ) ); Green = IIf( db <= 10, 255 * ( 1 - db/10 ), 0 ); if( NOT TunedFilterDisplay ) PlotOHLC( N, N, N-1, N-1, "", ColorRGB( Red, Green, 0 ), styleCloud | styleNoLabel ); DcNum = DcNum + (db < 3 ) * N * ( 20 - db ); DcDenom = DcDenom + ( db < 3 ) * ( 20 - db ); } DC = DcNum / DcDenom; if( ParamToggle("Show Dom. Cycle?", "No|Yes" ) ) { DomCycle = Median( DC, 10 ); Plot( DomCycle, "Dominant Cycle", colorBlue ); } if( TunedFilterDisplay ) { DomCycle = Median( DC, 10 ); DomCycle = Max( DomCycle, 8 ); Value = 0; for( bar = 10; bar < BarCount; bar++ ) { beta = cos( 2 * PI / domCycle[ bar ] ); gamma = 1 / cos( 4 * PI * delta[ bar ] / DomCycle[ bar ] ); alpha = gamma - sqrt( gamma ^ 2 - 1 ); Value[ bar ] = 0.5 * ( 1 - alpha ) * SmoothHPDiff[ bar ] + beta * ( 1 + alpha ) * Value[ bar - 1 ] - alpha * Value[ bar - 2 ]; } Value2 = ( domCycle / ( 2 * PI ) ) * ( Value - Ref( Value, -1 ) ); Plot( Value, "Sine", colorBlue ); Plot( Value2, "Cosine", colorWhite ); } GraphZOrder = 1; _SECTION_END();