Horance

John Ehlers Adaptive CCI

Category: Indicators By: Horance Created: September 7, 2018, 7:31 AM
September 7, 2018, 7:31 AM
Indicators
2 Comments
John Ehlers Adaptive CCI

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: 292
Horance
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

Abdelkrim Maksour
8 years ago
#

hi sir is this indicator for mt4 and how i can get one .

Nicolas
8 years ago
#

Thanks again for all your valuable posts... and well formatted code! :)

ProRealCode ProRealCode
Loading...