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
This author is like an anonymous function, present but not directly identifiable. More details on this code architect as soon as they exit 'incognito' mode.
Author’s Profile

Comments

Logo Logo
Loading...