MAMA [DCAUT]█ MAMA (MESA Adaptive Moving Average)
📊 OVERVIEW
The MESA Adaptive Moving Average (MAMA) represents an advanced implementation of John F. Ehlers' adaptive moving average system using the Hilbert Transform Discriminator. This indicator automatically adjusts to market cycles, providing superior responsiveness compared to traditional fixed-period moving averages while maintaining smoothness.
MAMA dynamically calculates two lines: the fast-adapting MAMA line and the following FAMA (Following Adaptive Moving Average) line. The system's core strength lies in its ability to automatically detect and adapt to the dominant market cycle, reducing lag during trending periods while providing stability during consolidation phases.
🎯 CORE CONCEPTS
Signal Interpretation:
• MAMA above FAMA: Indicates bullish trend momentum with the fast line leading upward movement
• MAMA below FAMA: Suggests bearish trend momentum with the fast line leading downward movement
• Golden Cross: MAMA crossing above FAMA signals potential upward momentum shift
• Death Cross: MAMA crossing below FAMA indicates potential downward momentum shift
• Line Convergence: MAMA and FAMA approaching each other suggests trend consolidation or potential reversal
Primary Applications:
• Trend Following: Enhanced responsiveness to trend changes compared to traditional moving averages
• Crossover Signals: MAMA/FAMA crossovers for identifying potential entry and exit points
• Cycle Analysis: Automatic adaptation to market's dominant cycle characteristics
• Reduced Lag: Minimized delay in trend detection while maintaining signal smoothness
📐 MATHEMATICAL FOUNDATION
Hilbert Transform Discriminator Technology:
The MAMA system employs John F. Ehlers' Hilbert Transform Discriminator, a sophisticated signal processing technique borrowed from telecommunications engineering. The Hilbert Transform creates a complex representation of the price series by generating a 90-degree phase-shifted version of the original signal, enabling precise cycle measurement.
The discriminator analyzes the instantaneous phase relationships between the original price series and its Hilbert Transform counterpart. This mathematical relationship reveals the dominant cycle period present in the market data at each point in time, forming the foundation for adaptive smoothing.
Instantaneous Period Calculation:
The algorithm computes the instantaneous period using the arctangent of the ratio between the Hilbert Transform and the original price series. This calculation produces a real-time measurement of the market's dominant cycle, typically ranging from short-term noise cycles to longer-term trend cycles.
The instantaneous period measurement undergoes additional smoothing to prevent erratic behavior from single-bar anomalies. This smoothed period value becomes the basis for calculating the adaptive alpha coefficient that controls the moving average's responsiveness.
Dynamic Alpha Coefficient System:
The adaptive alpha calculation represents the core mathematical innovation of MAMA. The alpha coefficient is derived from the instantaneous period measurement and constrained within the user-defined fast and slow limits.
The mathematical relationship converts the measured cycle period into an appropriate smoothing factor: shorter detected cycles result in higher alpha values (increased responsiveness), while longer cycles produce lower alpha values (increased stability). This creates an automatic adaptation mechanism that responds to changing market conditions.
MAMA/FAMA Calculation Process:
The MAMA line applies the dynamically calculated alpha coefficient to an exponential moving average formula: MAMA = alpha × Price + (1 - alpha) × MAMA . The FAMA line then applies a secondary smoothing operation to the MAMA line, creating a following average that provides confirmation signals.
This dual-line approach ensures that the fast-adapting MAMA line captures trend changes quickly, while the FAMA line offers a smoother confirmation signal, reducing the likelihood of acting on temporary price fluctuations.
Cycle Detection Mechanism:
The underlying cycle detection employs quadrature components derived from the Hilbert Transform to measure both amplitude and phase characteristics of price movements. This allows the system to distinguish between genuine trend changes and temporary price noise, automatically adjusting the smoothing intensity accordingly.
The mathematical framework ensures that during strong trending periods with clear directional movement, the algorithm reduces smoothing to minimize lag. Conversely, during consolidation phases with mixed signals, increased smoothing helps filter out false breakouts and whipsaws.
📋 PARAMETER CONFIGURATION
Source Selection Strategy:
• HL2 (High+Low)/2 (Default): Recommended for cycle analysis as it represents the midpoint of each period's trading range, reducing impact of opening gaps and closing spikes
• Close Price: Traditional choice reflecting final market sentiment, suitable for end-of-day analysis
• HLC3 (High+Low+Close)/3: Balanced approach incorporating range information with closing emphasis
• OHLC4 (Open+High+Low+Close)/4: Most comprehensive price representation for complete market view
Fast Limit Configuration (Default 0.5):
Controls the maximum responsiveness of the adaptive system. Higher values increase sensitivity to recent price changes but may introduce more noise. This parameter sets the upper bound for the dynamic alpha calculation.
Slow Limit Configuration (Default 0.05):
Determines the minimum responsiveness, providing stability during uncertain market conditions. Lower values increase smoothing but may cause delayed signals. This parameter sets the lower bound for the dynamic alpha calculation.
Parameter Relationship Considerations:
The fast and slow limits work together to define the adaptive range. The wider the range between these limits, the more dramatic the adaptation between trending and consolidating market conditions. Different market characteristics may benefit from different parameter configurations, requiring individual testing and validation.
📊 COLOR CODING SYSTEM
Line Visualization:
• Green Line (MAMA): The fast-adapting moving average that responds quickly to price changes
• Red Line (FAMA): The following adaptive moving average that provides confirmation signals
The fixed color scheme provides consistent visual identification of each line, enabling clear differentiation between the fast-adapting MAMA and the following FAMA throughout all market conditions.
💡 CORE VALUE PROPOSITION
Advantages Over Traditional Moving Averages:
• Cycle Adaptation: Automatically adjusts to market's dominant cycle rather than using fixed periods
• Reduced Lag: Faster response to genuine trend changes while filtering market noise
• Mathematical Foundation: Based on advanced signal processing techniques from telecommunications engineering
• Dual-Line System: Provides both fast adaptation (MAMA) and confirmation (FAMA) in one indicator
Comparative Performance Characteristics:
Unlike fixed-period moving averages that apply the same smoothing regardless of market conditions, MAMA adapts its behavior based on current market cycle characteristics. This may help reduce whipsaws during consolidation periods while maintaining responsiveness during trending phases.
Usage Considerations:
This indicator is designed for technical analysis purposes. The adaptive nature means that parameter optimization should consider the specific characteristics of the asset and timeframe being analyzed. Like all technical indicators, MAMA should be used as part of a comprehensive analysis approach rather than as a standalone signal generator.
Alert Functionality:
The indicator includes alert conditions for MAMA/FAMA crossovers, enabling automated notification of potential momentum shifts. These alerts can assist in timing analysis but should be combined with other forms of market analysis for decision-making purposes.
Fama
Adaptive Trend Lines [MAMA and FAMA]Updated my previous algo on the Adaptive Trend lines, however I have added new functionalities and sorted out the settings.
You can now switch between normalized and non-normalized settings, the colors have also been updated and look much better.
The MAMA and FAMA
These indicators was originally developed by John F. Ehlers (Stocks & Commodities V. 19:10: MESA Adaptive Moving Averages). Everget wrote the initial functions for these in pine script. I have simply normalized the indicators and chosen to use the Laplace transformation instead of the hilbert transformation
How the Indicator Works:
The indicator employs a series of complex calculations, but we'll break it down into key steps to understand its functionality:
LaplaceTransform: Calculates the Laplace distribution for the given src input. The Laplace distribution is a continuous probability distribution, also known as the double exponential distribution. I use this because of the assymetrical return profile
MESA Period: The indicator calculates a MESA period, which represents the dominant cycle length in the price data. This period is continuously adjusted to adapt to market changes.
InPhase and Quadrature Components: The InPhase and Quadrature components are derived from the Hilbert Transform output. These components represent different aspects of the price's cyclical behavior.
Homodyne Discriminator: The Homodyne Discriminator is a phase-sensitive technique used to determine the phase and amplitude of a signal. It helps in detecting trend changes.
Alpha Calculation: Alpha represents the adaptive factor that adjusts the sensitivity of the indicator. It is based on the MESA period and the phase of the InPhase component. Alpha helps in dynamically adjusting the indicator's responsiveness to changes in market conditions.
MAMA and FAMA Calculation: The MAMA and FAMA values are calculated using the adaptive factor (alpha) and the input price data. These values are essentially adaptive moving averages that aim to capture the current trend more effectively than traditional moving averages.
But Omar, why would anyone want to use this?
The MAMA and FAMA lines offer benefits:
The indicator offers a distinct advantage over conventional moving averages due to its adaptive nature, which allows it to adjust to changing market conditions. This adaptability ensures that investors can stay on the right side of the trend, as the indicator becomes more responsive during trending periods and less sensitive in choppy or sideways markets.
One of the key strengths of this indicator lies in its ability to identify trends effectively by combining the MESA and MAMA techniques. By doing so, it efficiently filters out market noise, making it highly valuable for trend-following strategies. Investors can rely on this feature to gain clearer insights into the prevailing trends and make well-informed trading decisions.
This indicator is primarily suppoest to be used on the big timeframes to see which trend is prevailing, however I am not against someone using it on a timeframe below the 1D, just be careful if you are using this for modern portfolio theory, this is not suppoest to be a mid-term component, but rather a long term component that works well with proper use of detrended fluctuation analysis.
Dont hesitate to ask me if you have any questions
Again, I want to give credit to Everget and ChartPrime!
Code explanation as required by House Rules:
fastLimit = input.float(title='Fast Limit', step=0.01, defval=0.01, group = "Indicator Settings")
slowLimit = input.float(title='Slow Limit', step=0.01, defval=0.08, group = "Indicator Settings")
src = input(title='Source', defval=close, group = "Indicator Settings")
input.float: Used to create input fields for the user to set the fastLimit and slowLimit values.
input: General function to get user inputs, like the data source (close price) used for calculations.
norm_period = input.int(3, 'Normalization Period', 1, group = "Normalized Settings")
norm = input.bool(defval = true, title = "Use normalization", group = "Normalized Settings")
input.int: Creates an input field for the normalization period.
input.bool: Allows the user to toggle normalization on or off.
Color settings in the code:
col_up = input.color(#22ab94, group = "Color Settings")
col_dn = input.color(#f7525f, group = "Color Settings")
Constants and functions
var float PI = math.pi
laplace(src) =>
(0.5) * math.exp(-math.abs(src))
_computeComponent(src, mesaPeriodMult) =>
out = laplace(src) * mesaPeriodMult
out
_smoothComponent(src) =>
out = 0.2 * src + 0.8 * nz(src )
out
math.pi: Represents the mathematical constant π (pi).
laplace: A function that applies the Laplace transform to the source data.
_computeComponent: Computes a component of the data using the Laplace transform.
_smoothComponent: Smooths data by averaging the current value with the previous one (nz function is used to handle null values).
Alpha function:
_computeAlpha(src, fastLimit, slowLimit) =>
mesaPeriod = 0.0
mesaPeriodMult = 0.075 * nz(mesaPeriod ) + 0.54
...
alpha = math.max(fastLimit / deltaPhase, slowLimit)
out = alpha
out
_computeAlpha: Calculates the adaptive alpha value based on the fastLimit and slowLimit. This value is crucial for determining the MAMA and FAMA lines.
Calculating MAMA and FAMA:
mama = 0.0
mama := alpha * src + (1 - alpha) * nz(mama )
fama = 0.0
fama := alpha2 * mama + (1 - alpha2) * nz(fama )
Normalization:
lowest = ta.lowest(mama_fama_diff, norm_period)
highest = ta.highest(mama_fama_diff, norm_period)
normalized = (mama_fama_diff - lowest) / (highest - lowest) - 0.5
ta.lowest and ta.highest: Find the lowest and highest values of mama_fama_diff over the normalization period.
The oscillator is normalized to a range, making it easier to compare over different periods.
And finally, the plotting:
plot(norm == true ? normalized : na, style=plot.style_columns, color=col_wn, title = "mama_fama_diff Oscillator Normalized")
plot(norm == false ? mama_fama_diff : na, style=plot.style_columns, color=col_wnS, title = "mama_fama_diff Oscillator")
Example of Normalized settings:
Example for setup:
Try to make sure the lower timeframe follows the higher timeframe if you take a trade based on this indicator!
IchiMAMA (Experimental)Goichi Hosoda's "Ichimoku Kinkō Hyō" is a widely used Trend Following indicator and can be defined as a "system" rather than an indicator.
Published in the late 1960's, consisting of 5 lines.
TenkanSen (Conversion Line) = of the last 9 bars
KijunSen (Base Line) = of the last 26 bars
SenkouSpanA (Leading Span A) = Average of Tenkan&KijunSen shifted -> 26 bars
SenkouSpanB (Leading Span B) = of the last 52 bars
ChikouSpan (Lagging Span) = Price shifted <- 26 bars
On the other hand, Mesa Adaptive Moving Average developed by John Ehlers around early 2000's shows similarities with Hosoda's Tenkan and KijunSen using a different calculation method. For futher info: www.mesasoftware.com
I find MAMA superior to TenkanSen and KijunSen in terms of crossing signals.
Ichimoku:
Thus, decided to replace TenkanSen and KijunSen of regular Ichimoku with MAMA&FAMA of Ehlers and calculated SenkouSpanA accordingly. SenkouSpanB and ChikouSpan stays the same as per Ichimoku's logic. (Periods are 30 by default for cryptocurrencies. If stocks then 26)
IchiMAMA:
This is purely experimental and educational. Hope you'll like it :)
I'd like to thank @everget for MAMA&FAMA
and @KivancOzbilgic for Ichimoku Kinkō Hyō and Volume Based Colored Bars
Fama-French 3 Factor ModelFama-French 3 Factor Model
Extension of the Capital Asset Pricing Model (CAPM)
CAPM
Ra = Rfr +
where,
Ra = Return of the Asset
Rfr = Risk-Free Rate
βa = Beta Coefficient of the Asset
Rm - Rfr = Market Risk Premium
Fama-French 3 Factor
r = rf + β1*(rm - rf) + β2(smh) +β3(hml)
r = Expected rate of return
rf = Risk-free rate
ß = Factor’s coefficient (sensitivity)
(rm – rf) = Market risk premium
SMB (Small Minus Big) = Historic excess returns of small-cap companies over large-cap companies
HML (High Minus Low) = Historic excess returns of value stocks (high book-to-price ratio) over growth stocks (low book-to-price ratio)
Small is set to $EWSC
Invesco S&P SmallCap 600® Equal Weight ETF
Big is set to $EQLW
Invesco S&P 100 Equal Weight ETF
High is set to $IUSV
iShares Core S&P US Value ETF
Low is set to $IUSG
iShares Core S&P US Growth ETF
returns selections
'returns'
'logarithmic returns' (use for realized (historical) returns)
'geometric returns' (compounded returns)
risk-free rate selections:
$DTB3
$DGS2
$DGS5
$DGS10
$DGS30
tf = primary time-frame
rtf = reference time-frame
Ehlers Mother Of Adaptive Moving Averages [CC]The Mother Of Adaptive Moving Averages was created by John Ehlers (Rocket Science For Traders pgs 182-183) and this is definitely my favorite Ehlers moving average script. This works as a trend indicator and a typical moving average. When the mama is above the fama then the stock is in an uptrend and vice versa. Of course it is also good when the price is above the fama and mama lines. Buy when the indicator line is green and sell when it is red.
Let me know if there are other indicator scripts you would like to see me publish or if you want something custom done!
MAMA FAMA KAMA.. chameleon 🎵
Uses Kaufmann's Efficiency Ratio to generate adaptive inputs for Ehler's MAMA/FAMA. Alphas from the Hilbert transform are then used in place for the KAMA calculation.
Original MAMA/FAMA by everget : link
--------------------------------------
If you find it useful please consider a tip/donation :
BTC - 3BMEXEDyWJ58eXUEALYPadbn1wwWKmf6sA
MESA Adaptive Moving AverageIntro
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
Ehlers MESA Adaptive Moving Averages (MAMA & FAMA)Ehlers MESA Adaptive Moving Averages (MAMA & FAMA) script.
These indicators was originally developed by John F. Ehlers (Stocks & Commodities V. 19:10: MESA Adaptive Moving Averages).
Fractal Dimension Adaptive Moving Average (D-AMA)etfhq.com
Overall the D-AMA produced results that were near identical to that of the FRAMA but the D-AMA is a slightly faster average.
It is very difficult to pick between the FRAMA and the D-AMA but becuase the FRAMA offers a slightly longer trade duration it the best Moving Average we have tested so far.
Fractal Adaptive Moving Average (real one)Ignore the other one (it contains some errors).
On this FRAMA you can play with length, SC and FC.
Just read on below links to understand more about this super useful moving average:
etfhq.com
etfhq.com
www.quantshare.com