OPEN-SOURCE SCRIPT
McGinley Dynamic Fusion [MarkitTick]

💡 The McGinley Dynamic is a lesser-known adaptive moving average developed in the 1990s by market technician John R. McGinley, specifically engineered to solve a problem that plagues conventional moving averages: their tendency to lag badly during fast market moves while whipsawing excessively during slow, choppy conditions. Unlike a standard EMA or SMA, the McGinley Dynamic adjusts its own speed automatically based on the relationship between price and its prior value, effectively "hugging" price more tightly when the market accelerates and smoothing out more when it decelerates. This script builds a complete trading framework around a Fast/Slow McGinley Dynamic crossover, layering in higher-timeframe confirmation, signal cooldown filtering, ATR-adaptive trade levels, a live dashboard, and a manual signal-lock mechanism.
✨ Originality and Utility
While McGinley Dynamic implementations exist on TradingView, this script does not simply plot the raw indicator. It combines four distinct engineering layers into a single decision framework:
The value to traders lies in how these layers interact: the McGinley crossover alone would generate frequent false signals in ranging markets, but the HTF filter and cooldown mechanism specifically target the crossover's greatest weakness (over-triggering during consolidation), while the ATR trade-level engine converts a raw directional signal into a fully defined, risk-quantified trade plan without any additional charting work from the user.
🔬 Methodology and Concepts

• The McGinley Dynamic Engine
The core building block is a recursive moving average that adjusts its step size relative to how far price has moved away from its previous value. Rather than applying a fixed weighting like an EMA, the McGinley Dynamic divides the price-to-prior-value distance by a dynamic denominator that grows sharply when price moves far from the average and shrinks when price sits close to it. This produces a curve that speeds up during trending, high-momentum moves and slows down during sideways congestion, giving it a self-correcting quality that fixed-period moving averages lack. The script instantiates two independent copies of this engine: a Fast McGinley Dynamic (default length 14) and a Slow McGinley Dynamic (default length 50), each with its own configurable "K Constant" that governs how aggressively the adaptive denominator reacts to price displacement.
• Crossover Signal Logic
A long signal is generated when the Fast McGinley Dynamic closes above the Slow McGinley Dynamic after having been at or below it on the prior two bars — a confirmed upward crossover, not an intrabar or provisional one. A short signal mirrors this logic on the downside. This two-bar confirmation approach (checking both the [1] and [2] offsets) ensures the crossover has actually completed on a closed bar before a signal is registered, rather than reacting to a crossover that could still repaint on the current forming bar.
• Higher-Timeframe Directional Filter
When enabled, the script pulls the source price and Fast McGinley Dynamic value from a user-selected higher timeframe (default 4-hour) and requires that the HTF price sit on the correct side of the HTF Fast McGinley Dynamic before allowing a same-direction signal on the working timeframe. This acts as a macro-trend veto: a bullish crossover on the chart timeframe will be ignored if the higher-timeframe trend context is bearish, and vice versa. The higher-timeframe request is built using a confirmed, prior-bar value combined with TradingView's lookahead-on merge policy — the standard non-repainting pattern for pulling higher-timeframe data — so the filter reacts only to fully closed higher-timeframe bars.
• Cooldown / Signal Spacing Filter
To prevent rapid-fire signals during periods where the Fast and Slow McGinley Dynamic lines oscillate around each other, the script tracks the bar index of the last long and last short signal separately. A new signal in the same direction is only permitted once a user-defined minimum number of bars ("Cooldown Bars") has elapsed since the prior one, reducing signal noise without altering the underlying crossover logic itself.
• ATR-Based Trade Level Construction
The moment a qualifying signal fires, the script calculates an Average True Range value over a configurable lookback and uses it to derive five reference prices: an entry (the prior bar's close), a stop loss, and three take-profit targets. Each level is expressed as an ATR multiple away from entry, with independently configurable multipliers for the stop and each take-profit tier. This means the distance between entry and each level automatically expands or contracts with recent volatility rather than using a fixed point or percentage distance, keeping the risk/reward structure proportionate to current market conditions.
• Signal Lock
The optional Lock Signal feature freezes the currently displayed trade levels once toggled on, preventing them from being overwritten by a subsequent crossover. This is useful for traders who want to manually track a single active setup on the chart without the lines and labels shifting each time a new signal condition is technically met.
🎨 Visual Guide

📖 How to Use

⚙️ Inputs and Settings
🔍 Deconstruction of the Underlying Scientific and Academic Framework
The McGinley Dynamic belongs to a broader family of adaptive-smoothing techniques in technical analysis that attempt to address a structural weakness of fixed-weight moving averages: a constant smoothing factor cannot simultaneously be fast enough to track trending markets and slow enough to filter noise in ranging markets. McGinley's original design achieves adaptivity by making the effective smoothing constant a function of the ratio between current price and the prior average value raised to the fourth power — a formulation that causes the adjustment factor to grow disproportionately large when price diverges sharply from the average, automatically accelerating the line's response, and to shrink toward a baseline when price and average are close, automatically slowing the response. This self-referential feedback mechanism places the McGinley Dynamic conceptually closer to adaptive filters used in signal processing (where a filter's gain is modulated by the magnitude of recent error) than to the fixed-coefficient exponential smoothing used in a standard EMA.
The dual-length crossover structure applied here draws on the well-established moving-average-crossover framework from technical trend-following literature, where the relationship between a fast and slow-adaptive series is used as a proxy for shifting momentum regimes, conceptually related to dual-moving-average systems and change-point detection approaches that flag a regime shift once a fast-reacting series diverges from a slow-reacting baseline. The higher-timeframe confirmation layer reflects the top-down, multi-timeframe analysis principle common in technical trading methodology, where signals on a lower timeframe are treated as more reliable when they align with the prevailing direction on a higher timeframe, reducing the frequency of signals that run counter to the dominant trend. Finally, the ATR-scaled trade-level construction is grounded in volatility-normalized position and risk sizing, a standard practice in quantitative trade management where stop and target distances are expressed as a multiple of recent realized volatility (via Average True Range) rather than fixed price or percentage distances, ensuring risk parameters adapt to the current volatility regime rather than remaining static across changing market conditions.
⚠️ 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. We 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.
✨ Originality and Utility
While McGinley Dynamic implementations exist on TradingView, this script does not simply plot the raw indicator. It combines four distinct engineering layers into a single decision framework:
- A recursively self-adjusting dual McGinley Dynamic engine (Fast and Slow) used as a crossover trigger rather than a static trend line.
- An optional higher-timeframe directional filter that requires the HTF trend to agree with the signal direction before a crossover is allowed to fire.
- A cooldown/gap filter measured in bars, which suppresses new signals for a configurable number of bars after the last one, reducing signal clustering during choppy crossover conditions.
- An ATR-based trade management layer that auto-plots Entry, Stop Loss, and three Take Profit levels the moment a signal fires, extended live on the chart with a color-coded risk/reward fill.
The value to traders lies in how these layers interact: the McGinley crossover alone would generate frequent false signals in ranging markets, but the HTF filter and cooldown mechanism specifically target the crossover's greatest weakness (over-triggering during consolidation), while the ATR trade-level engine converts a raw directional signal into a fully defined, risk-quantified trade plan without any additional charting work from the user.
🔬 Methodology and Concepts
• The McGinley Dynamic Engine
The core building block is a recursive moving average that adjusts its step size relative to how far price has moved away from its previous value. Rather than applying a fixed weighting like an EMA, the McGinley Dynamic divides the price-to-prior-value distance by a dynamic denominator that grows sharply when price moves far from the average and shrinks when price sits close to it. This produces a curve that speeds up during trending, high-momentum moves and slows down during sideways congestion, giving it a self-correcting quality that fixed-period moving averages lack. The script instantiates two independent copies of this engine: a Fast McGinley Dynamic (default length 14) and a Slow McGinley Dynamic (default length 50), each with its own configurable "K Constant" that governs how aggressively the adaptive denominator reacts to price displacement.
• Crossover Signal Logic
A long signal is generated when the Fast McGinley Dynamic closes above the Slow McGinley Dynamic after having been at or below it on the prior two bars — a confirmed upward crossover, not an intrabar or provisional one. A short signal mirrors this logic on the downside. This two-bar confirmation approach (checking both the [1] and [2] offsets) ensures the crossover has actually completed on a closed bar before a signal is registered, rather than reacting to a crossover that could still repaint on the current forming bar.
• Higher-Timeframe Directional Filter
When enabled, the script pulls the source price and Fast McGinley Dynamic value from a user-selected higher timeframe (default 4-hour) and requires that the HTF price sit on the correct side of the HTF Fast McGinley Dynamic before allowing a same-direction signal on the working timeframe. This acts as a macro-trend veto: a bullish crossover on the chart timeframe will be ignored if the higher-timeframe trend context is bearish, and vice versa. The higher-timeframe request is built using a confirmed, prior-bar value combined with TradingView's lookahead-on merge policy — the standard non-repainting pattern for pulling higher-timeframe data — so the filter reacts only to fully closed higher-timeframe bars.
• Cooldown / Signal Spacing Filter
To prevent rapid-fire signals during periods where the Fast and Slow McGinley Dynamic lines oscillate around each other, the script tracks the bar index of the last long and last short signal separately. A new signal in the same direction is only permitted once a user-defined minimum number of bars ("Cooldown Bars") has elapsed since the prior one, reducing signal noise without altering the underlying crossover logic itself.
• ATR-Based Trade Level Construction
The moment a qualifying signal fires, the script calculates an Average True Range value over a configurable lookback and uses it to derive five reference prices: an entry (the prior bar's close), a stop loss, and three take-profit targets. Each level is expressed as an ATR multiple away from entry, with independently configurable multipliers for the stop and each take-profit tier. This means the distance between entry and each level automatically expands or contracts with recent volatility rather than using a fixed point or percentage distance, keeping the risk/reward structure proportionate to current market conditions.
• Signal Lock
The optional Lock Signal feature freezes the currently displayed trade levels once toggled on, preventing them from being overwritten by a subsequent crossover. This is useful for traders who want to manually track a single active setup on the chart without the lines and labels shifting each time a new signal condition is technically met.
🎨 Visual Guide
- Fast MD line (default blue) — the fast-length McGinley Dynamic.
- Slow MD line (default orange) — the slow-length McGinley Dynamic.
- Heatmap Candles — when enabled, candle bodies and wicks are recolored based on trend bias: teal/green when the Fast MD sits above the Slow MD (bullish bias), red when below (bearish bias), independent of the raw candle color.
- Entry line (dashed, blue by default) — plotted at the close of the bar prior to signal confirmation, marking the reference entry price.
- Stop Loss line (solid, red by default) — the ATR-derived stop level, labeled with an "✕ SL" tag showing the exact price.
- Take Profit lines (dashed, teal by default, three tiers with increasing opacity) — TP1, TP2, and TP3, each labeled with its price.
- Risk fill — a shaded region between the entry line and stop-loss line, tinted in the stop-loss color, visually representing the risk portion of the trade.
- Reward fill — a shaded region between the entry line and the TP3 line, tinted in the take-profit color, visually representing the potential reward span.
- All trade-level lines and labels extend live to the right edge of the chart until superseded by a new signal or, if Signal Lock is active, held in place.
- 📌 Note : the best way to resolve visual overlap is to navigate to the Object Tree and drag the indicator above the main chart layer, or simply hide the native candles in your chart settings.
📖 How to Use
- A bullish signal occurs when the Fast MD confirms a crossover above the Slow MD, subject to the HTF filter and cooldown filter both being satisfied. The dashboard's Bias row will read "▲ Bull".
- A bearish signal occurs on the mirrored downward crossover, with the Bias row reading "▼ Bear".
- When a signal fires, use the auto-plotted Entry, SL, and TP1/TP2/TP3 lines as a starting framework for trade structure — the R:R progress bar on the dashboard shows the reward-to-risk ratio for TP1 relative to the stop distance.
- The MD Gap row on the dashboard visualizes, as a percentage bar, how far apart the Fast and Slow MD lines currently are, which can help gauge trend strength or an approaching crossover.
- Enabling the HTF Filter is recommended for traders who want signals to align with a broader trend context rather than trading every local crossover.
- Enabling Signal Lock freezes the current trade plan on screen, useful when manually managing an active position and wanting to prevent the levels from updating on the next crossover.
⚙️ Inputs and Settings
- Src / Fast N / Slow N — source price and the lookback lengths for the Fast and Slow McGinley Dynamic calculations. Shorter lengths react faster but generate more signals; longer lengths are smoother but slower to confirm.
- K Const — governs how aggressively the McGinley Dynamic's adaptive denominator responds to price displacement from the prior value. Higher values slow the line's responsiveness.
- HTF Filter / HTF TF — enables the higher-timeframe directional veto and sets which higher timeframe is used for that check.
- Cooldown Bars — minimum number of bars required between two signals of the same direction.
- Lock Signal — freezes the current trade levels in place, blocking updates from subsequent signals.
- ATR Len — lookback length for the Average True Range used to size the SL and TP levels.
- SL Mult / TP1 Mult / TP2 Mult / TP3 Mult — ATR multipliers that set the distance of the stop loss and each take-profit tier from the entry price.
- Heatmap Candles / Trade Levels — visual toggles for the bias-colored candles and the auto-plotted trade-level lines/labels/fills.
- Show Dash / Dash Pos — toggles the on-chart dashboard and sets its screen position.
- Alert action fields (Long/Short/Close Long/Close Short) — customizable string values embedded into the script's JSON alert payloads, allowing the fired alerts to be mapped to specific automation or webhook actions.
🔍 Deconstruction of the Underlying Scientific and Academic Framework
The McGinley Dynamic belongs to a broader family of adaptive-smoothing techniques in technical analysis that attempt to address a structural weakness of fixed-weight moving averages: a constant smoothing factor cannot simultaneously be fast enough to track trending markets and slow enough to filter noise in ranging markets. McGinley's original design achieves adaptivity by making the effective smoothing constant a function of the ratio between current price and the prior average value raised to the fourth power — a formulation that causes the adjustment factor to grow disproportionately large when price diverges sharply from the average, automatically accelerating the line's response, and to shrink toward a baseline when price and average are close, automatically slowing the response. This self-referential feedback mechanism places the McGinley Dynamic conceptually closer to adaptive filters used in signal processing (where a filter's gain is modulated by the magnitude of recent error) than to the fixed-coefficient exponential smoothing used in a standard EMA.
The dual-length crossover structure applied here draws on the well-established moving-average-crossover framework from technical trend-following literature, where the relationship between a fast and slow-adaptive series is used as a proxy for shifting momentum regimes, conceptually related to dual-moving-average systems and change-point detection approaches that flag a regime shift once a fast-reacting series diverges from a slow-reacting baseline. The higher-timeframe confirmation layer reflects the top-down, multi-timeframe analysis principle common in technical trading methodology, where signals on a lower timeframe are treated as more reliable when they align with the prevailing direction on a higher timeframe, reducing the frequency of signals that run counter to the dominant trend. Finally, the ATR-scaled trade-level construction is grounded in volatility-normalized position and risk sizing, a standard practice in quantitative trade management where stop and target distances are expressed as a multiple of recent realized volatility (via Average True Range) rather than fixed price or percentage distances, ensuring risk parameters adapt to the current volatility regime rather than remaining static across changing market conditions.
⚠️ 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. We 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.
Script de código abierto
Fiel al espíritu de TradingView, el creador de este script lo ha convertido en código abierto, para que los traders puedan revisar y verificar su funcionalidad. ¡Enhorabuena al autor! Aunque puede utilizarlo de forma gratuita, recuerde que cualquier republicación del código está sujeta a nuestras Normas internas.
💡 Proprietary indicators. Original research. Built by analysts who trade.
📢 Free Telegram: t.me/MarkitTick_Updates
👑 Premium: markittick.com
📢 Free Telegram: t.me/MarkitTick_Updates
👑 Premium: markittick.com
Exención de responsabilidad
La información y las publicaciones no constituyen, ni deben considerarse como, asesoramiento o recomendaciones financieras, de inversión, de trading u otro tipo, proporcionadas o respaldadas por TradingView. Obtenga más información en Condiciones de uso.
Script de código abierto
Fiel al espíritu de TradingView, el creador de este script lo ha convertido en código abierto, para que los traders puedan revisar y verificar su funcionalidad. ¡Enhorabuena al autor! Aunque puede utilizarlo de forma gratuita, recuerde que cualquier republicación del código está sujeta a nuestras Normas internas.
💡 Proprietary indicators. Original research. Built by analysts who trade.
📢 Free Telegram: t.me/MarkitTick_Updates
👑 Premium: markittick.com
📢 Free Telegram: t.me/MarkitTick_Updates
👑 Premium: markittick.com
Exención de responsabilidad
La información y las publicaciones no constituyen, ni deben considerarse como, asesoramiento o recomendaciones financieras, de inversión, de trading u otro tipo, proporcionadas o respaldadas por TradingView. Obtenga más información en Condiciones de uso.