Nicolas

John Ehlers MAMA - The Mother of Adaptive Moving Average

Category: Indicators By: Nicolas Created: December 24, 2015, 10:51 PM
December 24, 2015, 10:51 PM
Indicators
9 Comments
John Ehlers MAMA - The Mother of Adaptive Moving Average

The MESA Adaptive Moving Average (MAMA) adapts to price movement in an entirely new and unique way.  The adapation is based on the rate change of phase as measured by the Hilbert Transform Discriminator I have previously described.   The advantage of this method of adaptation is that it features a fast attack average and a slow decay average so that composite average rapidly ratchets behind price changes and holds the average value until the next ratchet occurs. 

An interesting set of indicators result if the MAMA is applied to the first MAMA line to produce a Following Adaptive Moving Average (FAMA).  By using an alpha in FAMA that is half the value of the alpha in MAMA, the FAMA has steps in time synchronization with MAMA, but the vertical movement is not as great.  As a result, MAMA and FAMA do not cross unless there has been a major change in market direction.  This suggests an adaptive moving average crossover system that is virtually free of whipsaw trades.

(text and code adapted from jamesgoulding.com website).

//parameters :
// FastLimit = 0.5
// SlowLimit = 0.05

Price = (High+Low)/2

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)

Q1 = (.0962*Detrender + .5769*Detrender[2] - .5769*Detrender[4] - .0962*Detrender[6])*(.075*Period[1] + .54)
I1 = Detrender[3]

jI = (.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)

I2 = I1 - jQ
Q2 = Q1 + jI

I2 = .2*I2 + .8*I2[1]
Q2 = .2*Q2 + .8*Q2[1]

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]

if(I1<>0) then
Phase = ATAN(Q1 / I1)
endif

DeltaPhase = Phase[1] - Phase
If DeltaPhase < 1 then
DeltaPhase = 1
endif

alpha = FastLimit / DeltaPhase
If alpha < SlowLimit then
alpha = SlowLimit
endif

MAMA = alpha*Price + (1 - alpha)*MAMA[1]
FAMA = .5*alpha*MAMA + (1 - .5*alpha)*FAMA[1]

endif

RETURN MAMA as "MAMA", FAMA as "FAMA"

 

Download
Filename: John-Ehlers-MAMA.itf
Downloads: 427
Nicolas
Nicolas Legend
I created ProRealCode because I believe in the power of shared knowledge. I spend my time coding new tools and helping members solve complex problems. If you are stuck on a code or need a fresh perspective on a strategy, I am always willing to help. Welcome to the community!
Author’s Profile

Comments

Bern
3 years ago
#

error displaying, code must end with RETURN. Any idea hot to fix it?

Lotech123
5 years ago
#

This Indicator is very useful if the Risk number is altered to suit the time frame, volume or tick count. If combined with the PRC ASC Trend, also adjusted to suit, then some good results can be had. Thank you

j102491
2 years ago
#

how are you applying it to asc trend

Blue Sky
6 years ago
#

A great job Nicolas, thanks. A question about averages, what period is the fast average and what period is the slow average? thank you

fabriziomerlo
10 years ago
#

Buongiorno Nicolas,

 come faccio a trasformare questo interessantissimo indicatore in uno screener long/short?

 

Grazie,

Fabrizio

Nicolas
10 years ago
#

Si desidera testare una croce sopra di 2 media mobile? Si prega di fare un argomento nel forum per la vostra richiesta. Grazie.

richarjo
10 years ago
#

 Hi. 

 

When I import MAMA the blue and red lines appear twice on my chart.  Any way of getting only one line of each to appear?

 

thanks

Nicolas
10 years ago
#

You have certainly apply the indicator twice on the price chart. If you want to hide one of the curve, you can set its Style to "invisible".

mike35
10 years ago
#

nice work , nicolas , very good.

ProRealCode ProRealCode
Loading...