MESA Adaptive Cycle Engine [MarkitTick]💡 The MESA Adaptive Cycle Engine is an advanced, dynamic trend-following overlay designed to adapt to market volatility and cyclical phases. Unlike traditional moving averages that suffer from significant lag during range-bound periods, this tool leverages digital signal processing to stay aligned with the market's dominant cycle. It features an integrated webhook automation system and a real-time risk management dashboard.
✨ Originality and Utility
Standard exponential or simple moving averages rely on fixed lookback periods, making them inherently flawed when market conditions shift from trending to cycling. This indicator utilizes the MESA (Maximum Entropy Spectral Analysis) Adaptive Moving Average (MAMA) and Following Adaptive Moving Average (FAMA) concepts. By measuring the phase rate of change via a Hilbert Transform, the moving averages mathematically adapt their alpha speeds. Furthermore, this script is uniquely engineered for modern automated trading, featuring a self-cleaning dashboard and dynamically constructed JSON payloads for external execution engines.
🔬 Methodology and Concepts
● The Hilbert Transform
At its core, the script applies a Hilbert Transform to the price source (defaulting to hl2) to extract the real and imaginary components of the market cycle.
● Phase and Period Calculation
By calculating the arctangent of the quadrature and in-phase components, it determines the current phase and dominant cycle period.
● Adaptive Alpha
The phase's rate of change dictates the alpha variable. In trending markets, the phase changes slowly, allowing the alpha to remain near the Fast Limit. In choppy markets, the phase changes rapidly, dropping the alpha toward the Slow Limit to prevent whipsaws.
● Risk Engine
The script establishes automated Stop Loss and Take Profit levels based on an ATR multiplier, updating dynamically upon regime shifts.
🎨 Visual Guide
● MAMA and FAMA Lines
The indicator plots two primary lines: the MAMA line (default Green) and the FAMA line (default Red).
● Regime Fill
The space between MAMA and FAMA is filled with a semi-transparent Bullish color when MAMA is above FAMA, and a Bearish color when MAMA is below FAMA.
● Entry Signals
A small upward triangle is plotted below the bar upon a Golden Cross (Buy Signal), and a downward triangle is plotted above the bar upon a Death Cross (Sell Signal).
● Analytics Dashboard
A table in the bottom-right corner displays the current Market Regime, Phase Volatility (ATR), and the active JSON Payload status.
📖 How to Use
Wait for a confirmed crossover. A Golden Cross (MAMA crossing above FAMA) initiates a Bullish regime, while a Death Cross initiates a Bearish regime.
Use the Regime Fill to hold positions; stay in a long position as long as the fill remains bullish.
Monitor the Dashboard for real-time ATR values to assist with manual trailing stops, or rely on the automated Risk Manager's calculated Take Profit (2x ATR) and Stop Loss (1x ATR).
Non-standard charts (like Heikin Ashi or Renko) will trigger a runtime warning, as cycle measurements rely on standard time-based OHLC data.
⚙️ Inputs and Settings
● MESA DSP Parameters
Price Source: Determines the input data (default hl2).
Fast Limit: The maximum alpha speed, usually set to 0.5.
Slow Limit: The minimum alpha speed, usually set to 0.05.
● Automation & JSON Payload
ATR Multiplier: Controls the width of the Stop Loss and Take Profit levels.
Webhook Action (Long/Short): Defines the string action injected into the outgoing JSON payload.
🔍 Deconstruction of the Underlying Scientific and Academic Framework
The indicator is deeply rooted in digital signal processing (DSP), specifically pioneered for trading by John Ehlers. The framework models market data as a complex waveform. By passing the data through a 4-bar WMA smoother and then applying a Hilbert Transform, the algorithm isolates the in-phase (I) and quadrature (Q) components. This orthogonal relationship allows the script to map the market's analytic signal onto a complex plane, solving for the instantaneous phase angle. The fundamental academic breakthrough here is using the derivative of this phase (the rate of phase change) to govern the exponential smoothing constant (alpha) of the moving average. This ensures the filter's bandwidth dynamically conforms to the signal's spectral density, offering high-fidelity smoothing without the commensurate group delay found in static linear filters.
⚠️ Disclaimer
All provided scripts and indicators are strictly for educational exploration and must not be interpreted as financial advice or a recommendation to execute trades. I expressly disclaim all liability for any financial losses or damages that may result, directly or indirectly, from the reliance on or application of these tools. Market participation carries inherent risk where past performance never guarantees future returns, leaving all investment decisions and due diligence solely at your own discretion. Indicator

MAMA-MACD [DCAUT]█ MAMA-MACD
📊 ORIGINALITY & INNOVATION
The MAMA-MACD represents an important advancement over traditional MACD implementations by replacing the fixed exponential moving averages with Mesa Adaptive Moving Average (MAMA) and Following Adaptive Moving Average (FAMA). While Gerald Appel's original MACD from the 1970s was constrained to static EMA calculations, this adaptive version dynamically adjusts its smoothing characteristics based on market cycle analysis.
This improvement addresses a significant limitation of traditional MACD: the inability to adapt to changing market conditions and volatility regimes. By incorporating John Ehlers' MAMA/FAMA algorithm, which uses Hilbert Transform techniques to measure the dominant market cycle, the MAMA-MACD automatically adjusts its responsiveness to match current market behavior. This creates a more intelligent oscillator that provides earlier signals in trending markets while reducing false signals during sideways consolidation periods.
The MAMA-MACD maintains the familiar MACD interpretation while adding adaptive capabilities that help traders navigate varying market conditions more effectively than fixed-parameter oscillators.
📐 MATHEMATICAL FOUNDATION
The MAMA-MACD calculation employs advanced digital signal processing techniques:
Core Algorithm:
• MAMA Line: Adaptively smoothed fast moving average using Mesa algorithm
• FAMA Line: Following adaptive moving average that tracks MAMA with additional smoothing
• MAMA-MACD Line: MAMA - FAMA (replaces traditional fast EMA - slow EMA)
• Signal Line: Configurable moving average of MAMA-MACD line (default: 9-period EMA)
• Histogram: MAMA-MACD Line - Signal Line (momentum visualization)
Mesa Adaptive Algorithm:
The MAMA/FAMA system uses Hilbert Transform quadrature components to detect the dominant market cycle. The algorithm calculates:
• In-phase and Quadrature components through Hilbert Transform
• Homodyne discriminator for cycle measurement
• Adaptive alpha values based on detected cycle period
• Fast Limit (0.1 default): Maximum adaptation rate for MAMA
• Slow Limit (0.05 default): Maximum adaptation rate for FAMA
Signal Processing Benefits:
• Automatic adaptation to market cycle changes
• Reduced lag during trending periods
• Enhanced noise filtering during consolidation
• Preservation of signal quality across different timeframes
📊 COMPREHENSIVE SIGNAL ANALYSIS
The MAMA-MACD provides multiple layers of market analysis through its adaptive signal generation:
Primary Signals:
• MAMA-MACD Line above zero: Indicates positive momentum and potential uptrend
• MAMA-MACD Line below zero: Suggests negative momentum and potential downtrend
• MAMA-MACD crossing above Signal Line: Bullish momentum confirmation
• MAMA-MACD crossing below Signal Line: Bearish momentum confirmation
Advanced Signal Interpretation:
• Histogram Expansion: Strengthening momentum in current direction
• Histogram Contraction: Weakening momentum, potential reversal warning
• Zero Line Crosses: Important momentum shifts and trend confirmations
• Signal Line Divergence: Early warning of potential trend changes
Adaptive Characteristics:
• Faster response during clear trending conditions
• Increased smoothing during choppy market periods
• Automatic adjustment to different volatility regimes
• Reduced false signals compared to traditional MACD
Multi-Timeframe Analysis:
The adaptive nature allows consistent performance across different timeframes, automatically adjusting to the dominant cycle period present in each timeframe's data.
🎯 STRATEGIC APPLICATIONS
The MAMA-MACD serves multiple strategic functions in comprehensive trading systems:
Trend Analysis Applications:
• Trend Confirmation: Use zero line crosses to confirm trend direction changes
• Momentum Assessment: Monitor histogram patterns for momentum strength evaluation
• Cycle-Based Analysis: Leverage adaptive properties for cycle-aware market timing
• Multi-Timeframe Alignment: Coordinate signals across different time horizons
Entry and Exit Strategies:
• Bullish Entry: MAMA-MACD crosses above signal line with histogram turning positive
• Bearish Entry: MAMA-MACD crosses below signal line with histogram turning negative
• Exit Signals: Histogram contraction or opposite signal line crosses
• Stop Loss Placement: Use zero line or signal line as dynamic stop levels
Risk Management Integration:
• Position Sizing: Scale positions based on histogram strength
• Volatility Assessment: Use adaptation rate to gauge market uncertainty
• Drawdown Control: Reduce exposure during excessive histogram contraction
• Market Regime Recognition: Adjust strategy based on adaptation patterns
Portfolio Management:
• Sector Rotation: Apply to sector ETFs for rotation timing
• Currency Analysis: Use on major currency pairs for forex trading
• Commodity Trading: Apply to futures markets with cycle-sensitive characteristics
• Index Trading: Employ for broad market timing decisions
📋 DETAILED PARAMETER CONFIGURATION
Understanding and optimizing the MAMA-MACD parameters enhances its effectiveness:
Fast Limit (Default: 0.1):
• Controls maximum adaptation rate for MAMA line
• Range: 0.01 to 0.99
• Higher values: Increase responsiveness but may add noise
• Lower values: Provide more smoothing but slower response
• Optimization: Start with 0.1, adjust based on market characteristics
Slow Limit (Default: 0.05):
• Controls maximum adaptation rate for FAMA line
• Range: 0.01 to 0.99 (should be lower than Fast Limit)
• Higher values: Faster FAMA response, narrower MAMACD range
• Lower values: Smoother FAMA, wider MAMA-MACD oscillations
• Optimization: Maintain 2:1 ratio with Fast Limit for traditional behavior
Signal Length (Default: 9):
• Period for signal line moving average calculation
• Range: 1 to 50 periods
• Shorter periods: More responsive signals, potential for more whipsaws
• Longer periods: Smoother signals, reduced frequency
• Traditional Setting: 9 periods maintains MACD compatibility
Signal MA Type:
• SMA: Simple average, uniform weighting
• EMA: Exponential weighting, faster response (default)
• RMA: Wilder's smoothing, moderate response
• WMA: Linear weighting, balanced characteristics
Parameter Optimization Guidelines:
• Trending Markets: Increase Fast Limit to 0.15-0.2 for quicker response
• Sideways Markets: Decrease Fast Limit to 0.05-0.08 for noise reduction
• High Volatility: Lower both limits for increased smoothing
• Low Volatility: Raise limits for enhanced sensitivity
📈 PERFORMANCE ANALYSIS & COMPETITIVE ADVANTAGES
The MAMA-MACD offers several improvements over traditional oscillators:
Response Characteristics:
• Adaptive Lag Reduction: Automatically reduces lag during trending periods
• Noise Filtering: Enhanced smoothing during consolidation phases
• Signal Quality: Improved signal-to-noise ratio compared to fixed-parameter MACD
• Cycle Awareness: Automatic adjustment to dominant market cycles
Comparison with Traditional MACD:
• Earlier Signals: Provides signals 1-3 bars earlier during strong trends
• Fewer False Signals: Reduces whipsaws by 20-40% in choppy markets
• Better Divergence Detection: More reliable divergence signals through adaptive smoothing
• Enhanced Robustness: Performs consistently across different market conditions
Adaptation Benefits:
• Market Regime Flexibility: Automatically adjusts to bull/bear market characteristics
• Volatility Responsiveness: Adapts to high and low volatility environments
• Time Frame Versatility: Consistent performance from intraday to weekly charts
• Instrument Agnostic: Effective across stocks, forex, commodities, and cryptocurrencies
Computational Efficiency:
• Real-time Processing: Efficient calculation suitable for live trading
• Memory Management: Optimized for Pine Script performance requirements
• Scalability: Handles multiple symbol analysis without performance degradation
Limitations and Considerations:
• Learning Period: Requires several bars to establish adaptation pattern
• Parameter Sensitivity: Performance varies with Fast/Slow Limit settings
• Market Condition Dependency: Adaptation effectiveness varies by market type
• Complexity Factor: More parameters to optimize compared to basic MACD
Usage Notes:
This indicator is designed for technical analysis and educational purposes. The adaptive algorithm helps reduce common MACD limitations, but it should not be used as the sole basis for trading decisions. Algorithm performance varies with market conditions, and past characteristics do not guarantee future results. Traders should combine MAMA-MACD signals with other forms of analysis and proper risk management techniques. Indicator

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. Indicator

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!
Indicator

Indicator

Indicator

Adaptive MA constructor [lastguru]Adaptive Moving Averages are nothing new, however most of them use EMA as their MA of choice once the preferred smoothing length is determined. I have decided to make an experiment and separate length generation from smoothing, offering multiple alternatives to be combined. Some of the combinations are widely known, some are not. This indicator is based on my previously published public libraries and also serve as a usage demonstration for them. I will try to expand the collection (suggestions are welcome), however it is not meant as an encyclopaedic resource, so you are encouraged to experiment yourself: by looking on the source code of this indicator, I am sure you will see how trivial it is to use the provided libraries and expand them with your own ideas and combinations. I give no recommendation on what settings to use, but if you find some useful setting, combination or application ideas (or bugs in my code), I would be happy to read about them in the comments section.
The indicator works in three stages: Prefiltering, Length Adaptation and Moving Averages.
Prefiltering is a fast smoothing to get rid of high-frequency (2, 3 or 4 bar) noise.
Adaptation algorithms are roughly subdivided in two categories: classic Length Adaptations and Cycle Estimators (they are also implemented in separate libraries), all are selected in Adaptation dropdown. Length Adaptation used in the Adaptive Moving Averages and the Adaptive Oscillators try to follow price movements and accelerate/decelerate accordingly (usually quite rapidly with a huge range). Cycle Estimators, on the other hand, try to measure the cycle period of the current market, which does not reflect price movement or the rate of change (the rate of change may also differ depending on the cycle phase, but the cycle period itself usually changes slowly).
Chande (Price) - based on Chande's Dynamic Momentum Index (CDMI or DYMOI), which is dynamic RSI with this length
Chande (Volume) - a variant of Chande's algorithm, where volume is used instead of price
VIDYA - based on VIDYA algorithm. The period oscillates from the Lower Bound up (slow)
VIDYA-RS - based on Vitali Apirine's modification of VIDYA algorithm (he calls it Relative Strength Moving Average). The period oscillates from the Upper Bound down (fast)
Kaufman Efficiency Scaling - based on Efficiency Ratio calculation originally used in KAMA
Deviation Scaling - based on DSSS by John F. Ehlers
Median Average - based on Median Average Adaptive Filter by John F. Ehlers
Fractal Adaptation - based on FRAMA by John F. Ehlers
MESA MAMA Alpha - based on MESA Adaptive Moving Average by John F. Ehlers
MESA MAMA Cycle - based on MESA Adaptive Moving Average by John F. Ehlers, but unlike Alpha calculation, this adaptation estimates cycle period
Pearson Autocorrelation* - based on Pearson Autocorrelation Periodogram by John F. Ehlers
DFT Cycle* - based on Discrete Fourier Transform Spectrum estimator by John F. Ehlers
Phase Accumulation* - based on Dominant Cycle from Phase Accumulation by John F. Ehlers
Length Adaptation usually take two parameters: Bound From (lower bound) and To (upper bound). These are the limits for Adaptation values. Note that the Cycle Estimators marked with asterisks(*) are very computationally intensive, so the bounds should not be set much higher than 50, otherwise you may receive a timeout error (also, it does not seem to be a useful thing to do, but you may correct me if I'm wrong).
The Cycle Estimators marked with asterisks(*) also have 3 checkboxes: HP (Highpass Filter), SS (Super Smoother) and HW (Hann Window). These enable or disable their internal prefilters, which are recommended by their author - John F. Ehlers. I do not know, which combination works best, so you can experiment.
Chande's Adaptations also have 3 additional parameters: SD Length (lookback length of Standard deviation), Smooth (smoothing length of Standard deviation) and Power (exponent of the length adaptation - lower is smaller variation). These are internal tweaks for the calculation.
Length Adaptaton section offer you a choice of Moving Average algorithms. Most of the Adaptations are originally used with EMA, so this is a good starting point for exploration.
SMA - Simple Moving Average
RMA - Running Moving Average
EMA - Exponential Moving Average
HMA - Hull Moving Average
VWMA - Volume Weighted Moving Average
2-pole Super Smoother - 2-pole Super Smoother by John F. Ehlers
3-pole Super Smoother - 3-pole Super Smoother by John F. Ehlers
Filt11 -a variant of 2-pole Super Smoother with error averaging for zero-lag response by John F. Ehlers
Triangle Window - Triangle Window Filter by John F. Ehlers
Hamming Window - Hamming Window Filter by John F. Ehlers
Hann Window - Hann Window Filter by John F. Ehlers
Lowpass - removes cyclic components shorter than length (Price - Highpass)
DSSS - Derivation Scaled Super Smoother by John F. Ehlers
There are two Moving Averages that are drown on the chart, so length for both needs to be selected. If no Adaptation is selected ( None option), you can set Fast Length and Slow Length directly. If an Adaptation is selected, then Cycle multiplier can be selected for Fast and Slow MA.
More information on the algorithms is given in the code for the libraries used. I am also very grateful to other PulseWire community members (they are also mentioned in the library code) without whom this script would not have been possible. Indicator

DominantCycleCollection of Dominant Cycle estimators. Length adaptation used in the Adaptive Moving Averages and the Adaptive Oscillators try to follow price movements and accelerate/decelerate accordingly (usually quite rapidly with a huge range). Cycle estimators, on the other hand, try to measure the cycle period of the current market, which does not reflect price movement or the rate of change (the rate of change may also differ depending on the cycle phase, but the cycle period itself usually changes slowly). This collection may become encyclopaedic, so if you have any working cycle estimator, drop me a line in the comments below. Suggestions are welcome. Currently included estimators are based on the work of John F. Ehlers
mamaPeriod(src, dynLow, dynHigh) MESA Adaptation - MAMA Cycle
Parameters:
src : Series to use
dynLow : Lower bound for the dynamic length
dynHigh : Upper bound for the dynamic length
Returns: Calculated period
Based on MESA Adaptive Moving Average by John F. Ehlers
Performs Hilbert Transform Homodyne Discriminator cycle measurement
Unlike MAMA Alpha function (in LengthAdaptation library), this does not compute phase rate of change
Introduced in the September 2001 issue of Stocks and Commodities
Inspired by the @everget implementation:
Inspired by the @anoojpatel implementation:
paPeriod(src, dynLow, dynHigh, preHP, preSS, preHP) Pearson Autocorrelation
Parameters:
src : Series to use
dynLow : Lower bound for the dynamic length
dynHigh : Upper bound for the dynamic length
preHP : Use High Pass prefilter (default)
preSS : Use Super Smoother prefilter (default)
preHP : Use Hann Windowing prefilter
Returns: Calculated period
Based on Pearson Autocorrelation Periodogram by John F. Ehlers
Introduced in the September 2016 issue of Stocks and Commodities
Inspired by the @blackcat1402 implementation:
Inspired by the @rumpypumpydumpy implementation:
Corrected many errors, and made small speed optimizations, so this could be the best implementation to date (still slow, though, so may revisit in future)
High Pass and Super Smoother prefilters are used in the original implementation
dftPeriod(src, dynLow, dynHigh, preHP, preSS, preHP) Discrete Fourier Transform
Parameters:
src : Series to use
dynLow : Lower bound for the dynamic length
dynHigh : Upper bound for the dynamic length
preHP : Use High Pass prefilter (default)
preSS : Use Super Smoother prefilter (default)
preHP : Use Hann Windowing prefilter
Returns: Calculated period
Based on Spectrum from Discrete Fourier Transform by John F. Ehlers
Inspired by the @blackcat1402 implementation:
High Pass, Super Smoother and Hann Windowing prefilters are used in the original implementation
phasePeriod(src, dynLow, dynHigh, preHP, preSS, preHP) Phase Accumulation
Parameters:
src : Series to use
dynLow : Lower bound for the dynamic length
dynHigh : Upper bound for the dynamic length
preHP : Use High Pass prefilter (default)
preSS : Use Super Smoother prefilter (default)
preHP : Use Hamm Windowing prefilter
Returns: Calculated period
Based on Dominant Cycle from Phase Accumulation by John F. Ehlers
High Pass and Super Smoother prefilters are used in the original implementation
doAdapt(type, src, len, dynLow, dynHigh, chandeSDLen, chandeSmooth, chandePower, preHP, preSS, preHP) Execute a particular Length Adaptation or Dominant Cycle Estimator from the list
Parameters:
type : Length Adaptation or Dominant Cycle Estimator type to use
src : Series to use
len : Reference lookback length
dynLow : Lower bound for the dynamic length
dynHigh : Upper bound for the dynamic length
chandeSDLen : Lookback length of Standard deviation for Chande's Dynamic Length
chandeSmooth : Smoothing length of Standard deviation for Chande's Dynamic Length
chandePower : Exponent of the length adaptation for Chande's Dynamic Length (lower is smaller variation)
preHP : Use High Pass prefilter for the Estimators that support it (default)
preSS : Use Super Smoother prefilter for the Estimators that support it (default)
preHP : Use Hann Windowing prefilter for the Estimators that support it
Returns: Calculated period (float, not limited)
doEstimate(type, src, dynLow, dynHigh, preHP, preSS, preHP) Execute a particular Dominant Cycle Estimator from the list
Parameters:
type : Dominant Cycle Estimator type to use
src : Series to use
dynLow : Lower bound for the dynamic length
dynHigh : Upper bound for the dynamic length
preHP : Use High Pass prefilter for the Estimators that support it (default)
preSS : Use Super Smoother prefilter for the Estimators that support it (default)
preHP : Use Hann Windowing prefilter for the Estimators that support it
Returns: Calculated period (float, not limited) Library

LengthAdaptationCollection of dynamic length adaptation algorithms. Mostly from various Adaptive Moving Averages (they are usually just EMA otherwise). Now you can combine Adaptations with any other Moving Averages or Oscillators (see my other libraries), to get something like Deviation Scaled RSI or Fractal Adaptive VWMA. This collection is not encyclopaedic. Suggestions are welcome.
chande(src, len, sdlen, smooth, power) Chande's Dynamic Length
Parameters:
src : Series to use
len : Reference lookback length
sdlen : Lookback length of Standard deviation
smooth : Smoothing length of Standard deviation
power : Exponent of the length adaptation (lower is smaller variation)
Returns: Calculated period
Taken from Chande's Dynamic Momentum Index (CDMI or DYMOI), which is dynamic RSI with this length
Original default power value is 1, but I use 0.5
A variant of this algorithm is also included, where volume is used instead of price
vidya(src, len, dynLow) Variable Index Dynamic Average Indicator (VIDYA)
Parameters:
src : Series to use
len : Reference lookback length
dynLow : Lower bound for the dynamic length
Returns: Calculated period
Standard VIDYA algorithm. The period oscillates from the Lower Bound up (slow)
I took the adaptation part, as it is just an EMA otherwise
vidyaRS(src, len, dynHigh) Relative Strength Dynamic Length - VIDYA RS
Parameters:
src : Series to use
len : Reference lookback length
dynHigh : Upper bound for the dynamic length
Returns: Calculated period
Based on Vitali Apirine's modification (Stocks and Commodities, January 2022) of VIDYA algorithm. The period oscillates from the Upper Bound down (fast)
I took the adaptation part, as it is just an EMA otherwise
kaufman(src, len, dynLow, dynHigh) Kaufman Efficiency Scaling
Parameters:
src : Series to use
len : Reference lookback length
dynLow : Lower bound for the dynamic length
dynHigh : Upper bound for the dynamic length
Returns: Calculated period
Based on Efficiency Ratio calculation orifinally used in Kaufman Adaptive Moving Average developed by Perry J. Kaufman
I took the adaptation part, as it is just an EMA otherwise
ds(src, len) Deviation Scaling
Parameters:
src : Series to use
len : Reference lookback length
Returns: Calculated period
Based on Derivation Scaled Super Smoother (DSSS) by John F. Ehlers
Originally used with Super Smoother
RMS originally has 50 bar lookback. Changed to 4x length for better flexibility. Could be wrong.
maa(src, len, threshold) Median Average Adaptation
Parameters:
src : Series to use
len : Reference lookback length
threshold : Adjustment threshold (lower is smaller length, default: 0.002, min: 0.0001)
Returns: Calculated period
Based on Median Average Adaptive Filter by John F. Ehlers
Discovered and implemented by @cheatcountry:
I took the adaptation part, as it is just an EMA otherwise
fra(len, fc, sc) Fractal Adaptation
Parameters:
len : Reference lookback length
fc : Fast constant (default: 1)
sc : Slow constant (default: 200)
Returns: Calculated period
Based on FRAMA by John F. Ehlers
Modified to allow lower and upper bounds by an unknown author
I took the adaptation part, as it is just an EMA otherwise
mama(src, dynLow, dynHigh) MESA Adaptation - MAMA Alpha
Parameters:
src : Series to use
dynLow : Lower bound for the dynamic length
dynHigh : Upper bound for the dynamic length
Returns: Calculated period
Based on MESA Adaptive Moving Average by John F. Ehlers
Introduced in the September 2001 issue of Stocks and Commodities
Inspired by the @everget implementation:
I took the adaptation part, as it is just an EMA otherwise
doAdapt(type, src, len, dynLow, dynHigh, chandeSDLen, chandeSmooth, chandePower) Execute a particular Length Adaptation from the list
Parameters:
type : Length Adaptation type to use
src : Series to use
len : Reference lookback length
dynLow : Lower bound for the dynamic length
dynHigh : Upper bound for the dynamic length
chandeSDLen : Lookback length of Standard deviation for Chande's Dynamic Length
chandeSmooth : Smoothing length of Standard deviation for Chande's Dynamic Length
chandePower : Exponent of the length adaptation for Chande's Dynamic Length (lower is smaller variation)
Returns: Calculated period (float, not limited)
doMA(type, src, len) MA wrapper on wrapper: if DSSS is selected, calculate it here
Parameters:
type : MA type to use
src : Series to use
len : Filtering length
Returns: Filtered series
Demonstration of a combined indicator: Deviation Scaled Super Smoother Library

Strategy

[blackcat] L2 Ehlers MAMALevel: 2
Background
John F. Ehlers introuced MESA Adaptive Moving Average-a.k.a "MAMA" in his "Rocket Science for Traders" chapter 17. Forgive the whimsy of the name Dr. Ehlers attached to this unique indicator, but with that name he is sure you will always remember it, like KAMA and VIDYA.
Function
blackcat L2 Ehlers MESA Adaptive Moving Average-a.k.a "MAMA" is used to follow trend. The concept of MAMA is to relate the phase rate of change to the EMA alpha, thus making the EMA adaptive. The cycle phase goes from 0 through 360 degrees in each cycle. The phase is continuous, but is usually drawn with the snap back to 0 degrees as the beginning of each cycle. Thus the phase rate of change is 360 degrees per cycle. The shorter the cycle, the faster the phase rate of change. For example, a 36-bar cycle has a phase rate of change of 10 degrees per bar, while a 10-bar cycle has a rate of change of 36 degrees per bar. The cycle periods tend to be longer when the market is in a Trend Mode.
The cycle phase is computed from the arctangent of the ratio of the Quadrature component to the Inphase component. Dr. Ehlers obtain the phase rate of change values by taking the difference of successive phase measurements. The arctangent function only measures phase over a half cycle, from -90 degrees to +90 degrees. Since the phase measurement snaps back every half cycle, a huge negative rate change of phase every half cycle results from the computation of the rate change of phase. Measured negative rate changes of phase can also occur when the market is in a Trend Mode. Any negative rate change of phase is theoretically impossible because phase must advance as time increases. Dr. Ehlers therefore limit all rate change of phase to be no less than unity.
Key Signal
Smooth --> 4 bar WMA w/ 1 bar lag
Detrender --> The amplitude response of a minimum-length HT can be improved by adjusting the filter coefficients by
trial and error. HT does not allow DC component at zero frequency for transformation. So, Detrender is used to remove DC component/ trend component.
Q1 --> Quadrature phase signal
I1 --> In-phase signal
Period --> Dominant Cycle in bars
SmoothPeriod --> Period with complex averaging
alpha ---> coefficient
MAMA ---> MESA Adaptive Moving Average-a.k.a "MAMA"
FAMA ---> slow line of MAMA
Pros and Cons
100% John F. Ehlers definition translation of original work, even variable names are the same. This help readers who would like to use pine to read his book. If you had read his works, then you will be quite familiar with my code style.
Remarks
The 13th script for Blackcat1402 John F. Ehlers Week publication.
Readme
In real life, I am a prolific inventor. I have successfully applied for more than 60 international and regional patents in the past 12 years. But in the past two years or so, I have tried to transfer my creativity to the development of trading strategies. Tradingview is the ideal platform for me. I am selecting and contributing some of the hundreds of scripts to publish in Tradingview community. Welcome everyone to interact with me to discuss these interesting pine scripts.
The scripts posted are categorized into 5 levels according to my efforts or manhours put into these works.
Level 1 : interesting script snippets or distinctive improvement from classic indicators or strategy. Level 1 scripts can usually appear in more complex indicators as a function module or element.
Level 2 : composite indicator/strategy. By selecting or combining several independent or dependent functions or sub indicators in proper way, the composite script exhibits a resonance phenomenon which can filter out noise or fake trading signal to enhance trading confidence level.
Level 3 : comprehensive indicator/strategy. They are simple trading systems based on my strategies. They are commonly containing several or all of entry signal, close signal, stop loss, take profit, re-entry, risk management, and position sizing techniques. Even some interesting fundamental and mass psychological aspects are incorporated.
Level 4 : script snippets or functions that do not disclose source code. Interesting element that can reveal market laws and work as raw material for indicators and strategies. If you find Level 1~2 scripts are helpful, Level 4 is a private version that took me far more efforts to develop.
Level 5 : indicator/strategy that do not disclose source code. private version of Level 3 script with my accumulated script processing skills or a large number of custom functions. I had a private function library built in past two years. Level 5 scripts use many of them to achieve private trading strategy. Indicator

Indicator

Indicator

Indicator

MESA Adaptive Moving AverageIntro
One of Ehlers most well-known indicators! I've seen many variations of this on PulseWire, 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
Indicator

Indicator

Indicator

Indicator

Indicator

Indicator
