John Ehlers Adaptive CCI

Category: Indicators By: Horance Created: September 7, 2018, 7:31 AM
September 7, 2018, 7:31 AM
Indicators
2 Comments

This is an implementation of John Ehlers’ Adaptive CCI, as described in his book Rocket Science for Traders: Digital Signal Processing Applications (2001-07-20).

// Adaptive Commodity Channel Index (CCI)
// Rocket Science for Traders: Digital Signal Processing Applications
// 2001-07-20 John F. Ehlers

Price = (high+low)/2
CycPart = 1

If BarIndex > 5 then
	Smooth = (4*Price + 3*Price[1] + 2*Price[2] + Price[3]) / 10
	Detrender = (.0962*Smooth + .5769*Smooth[2] - .5769*Smooth[4] - .0962*Smooth[6])*(.075*Period[1] + .54)

	// Compute InPhase and Quadrature components
	Q1 = (.0962*Detrender + .5769*Detrender[2] - .5769*Detrender[4] - .0962*Detrender[6])*(.075*Period[1] + .54)
	I1 = Detrender[3]

	// Advance the phase of I1 and Q1 by 90 degrees
	j1 = (.0962*I1 + .5769*I1[2] - .5769*I1[4] - .0962*I1[6])*(.075*Period[1] + .54)
	jQ = (.0962*Q1 + .5769*Q1[2] - .5769*Q1[4] - .0962*Q1[6])*(.075*Period[1] + .54)

	// Phasor addition for 3 bar averaging
	I2 = I1 - jQ
	Q2 = Q1 + j1

	// Smooth the I and Q components before applying the discriminator
	I2 = .2*I2 + .8*I2[1]
	Q2 = .2*Q2 + .8*Q2[1]

	// Homodyne Discriminator
	Re = I2*I2[1] + Q2*Q2[1]
	Im = I2*Q2[1] - Q2*I2[1]
	Re = .2*Re + .8*Re[1]
	Im = .2*Im + .8*Im[1]
	If Im <> 0 and Re <> 0 then
		Period = 360/ATAN(Im/Re)
	Endif
	If Period > 1.5*Period[1] then
		Period = 1.5*Period[1]
	Endif
	If Period < .67*Period[1] then
		Period = .67*Period[1]
	Endif
	If Period < 6 then
		Period = 6
	Endif
	If Period > 50 then
		Period = 50
	Endif
	Period = .2*Period + .8*Period[1]
	SmoothPeriod = .33*Period + .67*SmoothPeriod[1]

	Length = ROUND(CycPart*Period)
	MedianPric = (High + Low + Close) / 3
	Avg = 0
	For count = 0 to Length - 1 do
		Avg = Avg + MedianPrice[count]
	Next
	Avg = Avg / Length
	MD = 0
	For count = 0 to Length - 1 do
		MD = MD + ABS(MedianPric[count] - Avg)
	Next
	MD = MD / Length
	If MD <> 0 then
		ACCI = (MedianPric - Avg) / (0.015*MD)
	Endif
Endif

Return ACCI as "CCI"

The attached screenshot shows Donald Lambert’s CCI (black) and John Ehlers’ Adaptive CCI (red).

Download
Filename: John-Ehlers-Adaptive-CCI.itf
Downloads: 288
Horance Senior
I usually let my code do the talking, which explains why my bio is as empty as a newly created file. Bio to be initialized...
Author’s Profile

Comments

Logo Logo
Loading...