MESA Adaptive Moving Average

One of Ehlers most well-known indicators! I've seen many variations of this on TradingView, however, none seem to be true to the original released by Ehlers himself.
I've taken it upon myself to simply translate the MAMA into Pinescript, instead of re-writing like some others have done.

You can use it as a very effective & adaptive moving average with other signals or
as a standalone signal.

In the case that you're going to use it for signals and not simple technical trading (non-quantitative),
I've also added a threshold parameter to filter out weak signals.

My MAMA indicator is different from others in very simple ways - I don't use the nz () command, which sets all "Not a Number" values to 0. In others' scripts, you immediately load the indicator with several 0 values,
causing a slight lag in future calculations since this code is recursive (refers to previous values it generated).

In my version, I simply wait until the script has access to all the bar data it needs, instead of instantly performing calculations and
setting erroneous values to 0. In this case, we start with the correct values (or closer to correct).

If you want to compare this indicator the current most popular MAMA by LazyBear, you'll notice it often gives buy and sell crosses one bar earlier than theirs.

Setting Parameters
  • Source - the data series to perform calculations on. (Initially, Ehlers himself favored hl/2, but conceded that there isn't empirical benefit over close.)
  • Fast Limit - controls how quickly the MAMA will "ratchet up" fast price action. (Higher values are faster)
  • Slow Limit - controls how closely the FAMA will follow the MAMA . (Again, higher is faster. You typically want the FAMA to be slower though.)
  • Crossover Threshold - simple error thresholding to limit the number of weak trade signals. (Lower means lower tolerance)
  • Show Crosses? - show/hide the arrows at moving average crosses
Release Notes: Forgot to convert one Trig operation to Radians
Release Notes: Update as requested by user @ant187:
- You now have the option to fill the area between the moving averages (disabled by default)
Release Notes: An additional quick update to change the fill color based on the crossover status.
-Default is red and blue, with a transparency of 90%
Release Notes: LOTs of changes here!
  • Updated to Pinescript version 4.0
  • Removed confusing settings
  • Added Multi-timeframe plotting support (defaults to current chart timeframe)
  • Bug fixes with logic
Open-source script

In true TradingView spirit, the author of this script has published it open-source, so traders can understand and verify it. Cheers to the author! You may use it for free, but reuse of this code in a publication is governed by House Rules. You can favorite it to use it on a chart.

Want to use this script on a chart?


This is awesome, and as you mentioned more accurate than other mesa's on this site.

I use MESA extensively in my trading and I vastly prefer yours...however, the other ones have a "FILL" option and I've grown accustomed to utilizing that, is there any possible chance you could find it in your heart to make a version with the fill added?

Would be greatly appreciated by myself, and I'm sure many others that utilize this awesome tool.

Either way, thanks again for your contribution, it's a marked improvement on a great and undervalued indicator..and hey...lets keep it that way..can't let the algo's know we're using their stuff now can we ;P

Thanks again regardless
+1 Reply
@ant187, Done! Glad you're enjoying the script :)
Thanks for the indicator, it works great! After some observations seems to be really reliable catching mid term trends avoiding whipsaws, even working in lower timeframes.
ecletv ecletv
Using crossings to know the actual trend, works similar to the one I am using: Hurst cycle channel oscillator, applied to the VIDYA of the price (with R2 k constant instead of CMO). The 0 crossings are lagging but very specific, tend to coincide with your MESA crossings.
Probably one of the most complex user defined single functions ever! Great work man!
Thanks for sharing!