// Madrid : 09/Jun/2015 21:09 : Even Better Sinewave : 1.0 // This implements the Even Better Sinewave indicator // Ref. Cycle Analysis for Traders by John F. Ehlers. // study("Madrid Sinewave", shorttitle="MSineWave") Duration = input(36) src = close OB = 0.85, OS = -0.85 PI = 3.14159265358979 deg2rad( deg ) => deg*PI/180.0 lowerBand = input(9) ssFilter( price, lowerBand ) => angle = sqrt(2)*PI/lowerBand a1= exp(-angle) b1 = 2*a1*cos(angle) c2 = b1 c3 = -a1*a1 c1 = 1 - c2 -c3 filt = c1*(price + nz(price[1]))/2 + c2*nz(filt[1]) + c3*nz(filt[2]) // HighPass filter cyclic components whose periods are shorter than Duration input x = src angle = deg2rad(360)/Duration alpha1 = ( 1-sin(angle) ) / cos(angle) HP = 0.5*(1+alpha1)*(x-x[1]) + alpha1*nz(HP[1],0) // Smooth with a Super Smoother Filter Filt = ssFilter( HP, lowerBand ) Wave = ( Filt + nz(Filt[1],0) + nz(Filt[2],0) ) / 3 Pwr = ( Filt*Filt + nz(Filt[1],0)* nz(Filt[1],0) + nz(Filt[2],0)* nz(Filt[2],0) ) /3 // Normalize the Average Wave to Square Root of the Average Power sineWave = Wave / sqrt(Pwr) // Output sineWaveColor = sineWave>OB?green : sineWave0?green : red plot( sineWave, color=sineWaveColor, linewidth=3 ) plot( sineWave, color=sineWaveColor, linewidth=1, style=histogram ) hline(0, color=silver, linestyle=dotted)