Keltner Position Divergence with Reliability ScoringOverview
Keltner-Position Divergence with Reliability Scoring turns where price sits inside its Keltner channel into a bounded oscillator, reads it for divergence against price, and then scores — in real time — whether those divergences have actually been worth acting on for the symbol on your chart, and which direction is carrying the edge. It is a context / research read, not a standalone buy or sell signal.
The idea
A Keltner channel frames price with an ATR envelope around a moving average. Where price sits inside that envelope — pinned to the upper band, mid, or pinned to the lower band — is a bounded read of stretch. When price makes a new high but its Keltner position does not confirm (a lower band-position high), that non-confirmation can precede a turn. This script measures the divergence between price and its Keltner position, then keeps a self-updating track record of whether such divergences pay.
Why these parts are combined (mashup rationale)
Three components form one pipeline, not three separate signals:
A Keltner-position oscillator — price's location within the ATR envelope (0 centre, +1 upper band, −1 lower band), z-scored so the bands and zones mean the same on every asset.
Confirmed-pivot divergence — regular and hidden, between that position line and price, with an optional triple-pivot mode for rarer, stronger disagreements.
A reliability harness — a binomial-proportion confidence test that asks whether each class of divergence has preceded a favourable move (a k×ATR travel over a fixed horizon) more often than a same-zone baseline, reported per direction with a Wilson confidence bound.
Part 1 builds the bounded stretch read, part 2 fires only where price and position disagree, part 3 decides whether that disagreement has actually paid on this instrument. Remove any one and the tool can no longer answer "is this Keltner divergence worth trading here?"
How to use it
Read the verdict panel first. GREEN = these divergences have beaten a same-spot baseline here; RED = they've lost to it (skip, or change the band width / timeframe); AMBER = not statistically established yet; GREY = still gathering data. "Best signal" names the direction with the strongest measured edge; "Reward : risk" is the average best-vs-worst move after a signal, in ATR. A divergence is price making a higher high / lower low while the Keltner-position line does the opposite — marked in the pane and, optionally, on the price chart. It is context, never a standalone trigger.
Settings worth knowing
The regime filter ("Only count signals in regime") restricts the track record to signals that fired in a chosen regime — reverting markets suit divergence, strong trends punish it — so you can measure the edge where it's supposed to work. Costs subtracted (×ATR) raises the bar a signal must clear so the score is net of costs. Band width, MA length and the z-score window adapt the read to any instrument.
Universality & non-repainting
It reads only the chart's own price (configurable source), so it runs on any symbol, any timeframe, with no external data. Pivots confirm a fixed number of bars after the fact, and the track-record harness logs, updates and resolves only on confirmed (closed) bars, so its statistics never inflate or shift intrabar. The live oscillator updates each bar like any oscillator. All figures are in-sample and past-only.
Outputs for other scripts
Generic EXP_* plots — oscillator, signal, probability, edge, edge lower-bound, sample count, regime, band position — are published to the Data Window for use from other scripts via input.source().
Originality
Standard Keltner tools just plot the channel. This one turns band-position into a divergence oscillator and keeps a self-updating, confidence-scored, per-class track record against a same-zone baseline — so you see not just that a divergence printed, but whether and how it has paid on the current market. Clean-room implementation; no third-party Pine code reused.
Concept credits
Keltner channel — Chester Keltner; ATR-band refinement — Linda Raschke
Average True Range — J. Welles Wilder
Binomial score confidence interval — Edwin B. Wilson
Trend-efficiency regime measure — Perry Kaufman
Disclaimer
For research and education only. Not financial advice, not a recommendation, and not a guarantee of future results. All figures are in-sample and past-only. Markets carry risk; do your own research and manage your own risk. Indicator

Elaris RSI Pro [Divergence]Elaris RSI Pro is a professional-grade RSI momentum and divergence indicator built for traders who want cleaner market structure signals, smarter divergence detection, and a more refined trading workflow.
The indicator combines a responsive RSI engine with advanced bullish and bearish divergence detection to help identify potential reversals, continuation setups, and momentum shifts across all market conditions.
Designed with a clean visual experience and optimized performance in mind, Elaris RSI Pro delivers clear signals without unnecessary chart clutter, making it suitable for scalpers, swing traders, and intraday traders alike.
Key Features:
• Regular Bullish & Bearish Divergence Detection
• Hidden Bullish & Bearish Divergence Detection
• Configurable Pivot Detection Engine
• Adjustable Minimum & Maximum Pivot Distance Filters
• Dynamic RSI Momentum Coloring
• Signal Smoothing with EMA Filter
• Overbought / Oversold Zone Visualization
• Optional Divergence Lines & Labels
• Optional Pivot Markers for Advanced Analysis
• Professional Alert Conditions
• Non-Repainting Confirmed Pivot Logic
• Optimized Object Management for Better Performance
Elaris RSI Pro is built using confirmed pivot logic, meaning divergence signals are generated only after pivot confirmation to reduce repainting behavior and improve signal reliability.
The indicator is highly customizable, allowing traders to adapt the sensitivity and visual behavior to different trading styles, markets, and timeframes.
Works well with:
• Market Structure Analysis
• Trend Following Systems
• Support & Resistance Trading
• Smart Money Concepts (SMC)
• Liquidity Sweep Confirmation
• Multi-Timeframe Confluence Strategies
Best used alongside proper risk management and confirmation tools.
Non-Repainting:
This indicator uses confirmed pivot-based calculations. Signals appear only after pivot confirmation and do not repaint historically after confirmation. Indicator

Vestrix.ai Liquidity AtlasVestrix.ai Liquidity Atlas
Built by Vestrix.ai — Build strategies and indicators with your own words not programming
A multi-layer map of non-obvious liquidity zones — the places where stop orders actually accumulate and where institutional reactions occur. Goes beyond the standard PDH / PWH / ONH levels every chart already shows by combining seven independent zone-detection modules into a single overlay.
What it does
Most "key level" indicators draw the obvious: yesterday's high, the weekly high, the overnight high. These levels matter, but they are public knowledge — every screen on every desk already shows them. The Liquidity Atlas focuses instead on the zones traders rarely chart by hand because each requires its own logic: equal highs, untouched legacy levels, isolated rejection wicks, failed breakouts, large fair-value gaps, untouched time-at-price highs, and round-number magnets.
Each zone type is a separate, individually toggleable module with its own parameters and its own mitigation behaviour. The real edge is confluence — where two or three of these zones overlap, reaction probability is meaningfully higher than at any single level.
How it works
The indicator runs seven detection modules in parallel. Each module identifies its zone type, draws it as a rectangle (so the zone has thickness, not just a line), keeps it on chart while it remains relevant, and removes or fades it once it is mitigated.
1. Equal Highs / Equal Lows (EQH / EQL)
Detects clusters of two or more pivot highs (or lows) that fall within a tight tolerance band. Tolerance is configurable as either an ATR multiplier or a fixed tick distance. These clusters mark resting buy-side / sell-side liquidity — pools of stop orders that have accumulated above the highs or below the lows. When price sweeps through such a zone, the liquidity grab is visible in real time.
2. Naked Levels
Tracks previous-day and previous-week highs / lows that have never been retouched since their formation. The longer a level remains untouched, the stronger its pull, because more time has passed without the resting orders being addressed. Levels expire automatically after a configurable number of days / weeks if they are not retouched.
3. Wick Clusters
Flags individual bars that produced a significant rejection wick — a wick larger than X × ATR, accounting for at least Y % of the bar's total range, and printed at an isolated extreme relative to the previous N bars. These wicks indicate that liquidity was defended at that price without trading occurring there, behaviour consistent with hidden iceberg-style orders.
4. Failed Breakouts
A two-stage detector. First, a pivot must be exceeded by at least X × ATR (the breakout). Then, within a configurable confirmation window, price must close back behind the pivot (the failure). When both conditions are met within the window, the level is marked as a failed-breakout zone — a textbook trap that statistically tends to be retested.
5. Liquidity Voids
Identifies large 3-bar fair-value gaps — only those exceeding a minimum size (X × ATR) qualify. Standard small FVGs are deliberately filtered out to avoid clutter. These voids represent vacuum areas where price moved through quickly without trading, and they tend to be filled later.
6. Naked POC
For each session, the price bucket touched by the most bars is recorded as that session's time-at-price high (a TPO-style approximation of a Point of Control, since Pine Script has no access to true volume profile data). When such a POC is never retested afterwards, it becomes a "naked POC" — typically the strongest single magnet of all the level types listed here. Bucket size is configurable to suit different instruments.
7. Round Quarters
Draws psychological round-number levels around the current price (e.g. every 25 points on ES, every 100 on NQ, every 1000 on BTC). Algorithms and retail stops cluster heavily at these prices. Configurable step size, count, and zone width.
Mitigation modes
Every module that can be mitigated offers three independently configurable mitigation modes:
Delete on Touch — the zone is removed as soon as a wick enters it. Best for keeping the chart clean.
Delete on Close Beyond — the zone is kept until a bar actually closes through it. More conservative, useful for slower timeframes.
Fade on Touch — the zone stays visible but is greyed out. Useful when you want to track historical liquidity events for context.
This per-module flexibility means you can, for example, fade EQH / EQL zones to study past sweeps while having Naked POC zones disappear immediately on first touch.
How to use it
The intended workflow is confluence-based: a single zone alone is rarely enough to trade off. The indicator earns its keep when two or three modules align at the same price.
An EQH that overlaps with a Naked POC above current price is a high-probability magnet — both stop liquidity and an unfilled value area pull.
A Liquidity Void that runs through a Round Quarter suggests the void will likely be filled at minimum to that level.
A Failed Breakout zone right above an EQH marks a textbook stop-run-and-reverse setup.
Recommended starting configuration: enable EQH / EQL, Naked Levels, and Liquidity Voids first. Add Wick Clusters and Naked POC once the chart is comfortable. Failed Breakouts and Round Quarters are best switched on situationally.
Settings
Global: label visibility, label size, max age (bars), fade transparency
Per module: enable toggle, detection thresholds, color, max-zones cap, mitigation mode
Instrument tuning: ATR-based thresholds keep the indicator self-scaling across timeframes; bucket size for Naked POC and step size for Round Quarters need to be adjusted for the instrument (ES default = 0.5 / 25; suggestions in the tooltips for MNQ, BTC, EUR/USD)
Alerts
EQH Sweep / EQL Sweep
Naked Level Hit
Failed Breakout Formed
Liquidity Void Filled
All alerts fire on confirmed bar close (no repainting).
Notes
Pivot-based modules (EQH / EQL, Failed Breakouts) confirm pivots with a Right Bars delay (default 5). New zones therefore appear with that delay relative to the pivot bar — this is normal and avoids repainting.
Wick Clusters, Voids, and Naked POC are computed in real time on the developing bar; only after bar close is the zone state final.
Naked POC is approximated through bar-count buckets, not true tick volume. It correlates strongly with a real Volume Profile POC on most instruments, but is not identical.
Concepts such as Equal Highs / Equal Lows, Liquidity Sweeps, Fair Value Gaps, and Naked POC are public Smart Money / ICT and Market Profile concepts. The contribution of this indicator is the unified detection, mitigation handling, and confluence visualization across all seven modules in a single tool.
Disclaimer
This indicator is provided for educational and analytical purposes only. It is not financial advice and does not predict future price movement. Past performance does not guarantee future results. Trade at your own risk.
Built by Vestrix.ai — Build strategies and indicators with your own words not programming
© 2026 Vestrix.ai. Released for educational use on PulseWire. Indicator

Hidden Divergence Continuation Zones [AGPro Series]Hidden Divergence Continuation Zones
🟦 Overview
Hidden Divergence Continuation Zones is a focused trend-continuation indicator built around one specific market behavior: hidden divergence that forms during a structured pullback inside an existing directional move.
Most divergence tools are built to search for reversals. They scan regular bullish and bearish divergence, print many labels, and often mix every oscillator event into the same visual map. This script intentionally takes a narrower lane. It does not try to be a general divergence scanner. It looks only for hidden bullish and hidden bearish divergence, because hidden divergence is most useful when the question is not "is the trend ending?" but "is the trend trying to continue after a controlled pullback?"
The result is a cleaner continuation framework:
- confirmed price swing structure
- RSI momentum displacement
- EMA and DMI trend filtering
- ATR-normalized quality scoring
- lower-intensity HDC Watch labels
- forward continuation pockets
- swing connectors
- trigger labels
- compact AGPro dashboard
The purpose is to make hidden continuation structure visible without filling the chart with every possible divergence mark.
🔹 What Makes This Different
This script is separated from both common public divergence tools and our existing AGPro divergence family by design.
It is not a multi-oscillator regular divergence stack. It does not score RSI, MACD, CCI, MFI, and OBV together. That lane is already covered by broader stack-style divergence tools.
It is not an OBV pressure divergence map. It does not study price-versus-participation disagreement through cumulative volume pressure.
It is not a trend dashboard with divergence added as a side feature.
Hidden Divergence Continuation Zones focuses on a single continuation workflow:
1. Confirm that the market has an active directional side.
2. Wait for a valid pullback swing.
3. Compare the new swing against the previous swing.
4. Accept only hidden divergence that supports continuation.
5. Draw a forward pocket from the continuation pivot.
6. Track whether price later triggers from that structure.
That narrow scope is the edge. The script is designed to avoid visual noise and avoid conceptual overlap.
🧭 Core Logic
Bullish hidden continuation:
- the trend filter must support a bullish continuation environment
- price must form a confirmed higher low
- RSI must form a lower low against that higher price low
- the two compared swings must be separated by enough bars
- the structure must be large enough relative to ATR
- the RSI displacement must clear the minimum threshold
- the final continuation score must pass the display threshold
Bearish hidden continuation:
- the trend filter must support a bearish continuation environment
- price must form a confirmed lower high
- RSI must form a higher high against that lower price high
- the two compared swings must be separated by enough bars
- the structure must be large enough relative to ATR
- the RSI displacement must clear the minimum threshold
- the final continuation score must pass the display threshold
The script uses confirmed pivots, so events appear only after the pivot is structurally available. This keeps the logic stable and prevents premature labels from appearing on incomplete swings.
📐 Continuation Score
Each qualified setup is graded with a 0 to 100 continuation score.
The score combines:
- ADX strength above the selected minimum
- ATR-normalized distance between the compared swings
- RSI displacement between the two pivot points
- whether the pullback sits in a continuation-relevant EMA area
- whether the fast and slow EMA structure remains aligned
The default thresholds are designed to keep the chart selective. Normal qualified events are shown as HDC+ or HDC-. Stronger events are shown as PRIME HDC+ or PRIME HDC-.
Lower-intensity confirmed hidden divergence candidates can also be displayed as HDC WATCH labels. These marks are intentionally softer: they add visual context and keep the chart informative, but they do not create continuation pockets or trigger tracking unless the full continuation threshold is reached.
🧩 Continuation Pockets
When a hidden continuation event qualifies, the script projects a forward pocket from the pivot area.
These pockets are not generic support and resistance boxes. They are continuation context zones tied directly to the hidden divergence pivot. Their job is to preserve the important pullback area on the chart after the label appears, so the user can see where the continuation structure was created.
Pocket height is ATR-based, which helps the zones adapt across symbols and timeframes. The number of visible pockets is capped, so older structures are automatically removed and the chart remains clean.
🎯 Trigger Labels
After a hidden divergence pocket is created, the script monitors a limited trigger window.
For bullish continuation, a trigger is printed only when price confirms above the pivot candle reference with the selected ATR buffer.
For bearish continuation, a trigger is printed only when price confirms below the pivot candle reference with the selected ATR buffer.
This keeps the workflow organized:
- hidden divergence creates the continuation pocket
- the pocket defines the structure
- the trigger label marks follow-through from that structure
⚙️ Dashboard
The AGPro panel is built for quick reading:
- Oscillator: current RSI value
- Trend Side: bullish continuation, bearish continuation, or neutral
- Swing Quality: none, building, qualified, or prime
- Continuation Score: latest event score
- Active Pocket: current pocket state and freshness
The first panel row follows the AGPro standard: one merged blue header row with only the script title. Panel location, panel theme, label font size, and panel font size are all adjustable from settings.
🧪 Practical Reading
A clean bullish continuation sequence usually looks like this:
1. Trend Side shows Bull Continuation.
2. Price pulls back and forms a confirmed higher low.
3. RSI makes a lower low at that swing.
4. A continuation pocket appears below/around the pullback area.
5. A trigger label appears only if price follows through during the trigger window.
A clean bearish continuation sequence usually looks like this:
1. Trend Side shows Bear Continuation.
2. Price pulls back and forms a confirmed lower high.
3. RSI makes a higher high at that swing.
4. A continuation pocket appears above/around the pullback area.
5. A trigger label appears only if price follows through during the trigger window.
The best use case is structured trend continuation study, especially when a trader wants to separate controlled pullbacks from random oscillator divergence noise.
🔍 Key Inputs
Trend Continuation Filter:
- Fast EMA Length
- Slow EMA Length
- EMA Slope Lookback
- DMI Length
- ADX Smoothing
- Minimum ADX
Hidden Divergence Engine:
- RSI Length
- Confirmed Pivot Length
- Minimum Pivot Separation
- Minimum Price Swing (ATR)
- Minimum RSI Displacement
- Minimum Continuation Score
- Prime Score Threshold
- Show HDC Watch Labels
- Watch Label Score
Continuation Pockets:
- Show Continuation Pockets
- Pocket Extension Bars
- Pocket Height (ATR)
- Maximum Visible Pockets
- Trigger Window Bars
- Trigger Buffer (ATR)
Visual Layout:
- EMA Backbone
- Swing Connectors
- Event Labels
- Same-Side Label Cooldown
- Label Offset
- Label Font Size
- Maximum Visible Labels
- Maximum Visible Connectors
Panel:
- Show Panel
- Panel Location
- Panel Theme
- Panel Font Size
🟣 Design Notes
The visual design is intentionally restrained:
- no regular divergence clutter
- no multi-oscillator table overload
- no unnecessary signal spam
- no permanent background wash
- no oversized dashboard
- no generic zone engine detached from the core concept
The chart should stay readable while still feeling active and premium. Swing connectors explain where the hidden divergence came from. Pockets preserve the continuation area. Labels are offset from candles and controlled by cooldown settings.
✨ Summary
Hidden Divergence Continuation Zones is built for traders who want a cleaner way to study trend continuation through hidden divergence.
Instead of asking whether every oscillator disagreement matters, this tool asks a more specific question:
Is there a confirmed hidden divergence pullback inside a real trend, and did that structure create a continuation pocket worth tracking?
That focused question is what keeps the script distinct, lightweight, and visually clean.
Indicator

Cumulative Volume Delta Flow [AGPro Series]Cumulative Volume Delta Flow
🔹 **Overview**
Cumulative Volume Delta Flow is a hybrid CVD engine designed to expose order-flow imbalances without requiring footprint charts or exchange-native buy/sell data. It reconstructs cumulative delta using lower-timeframe breakdown when available, with intrabar polarity as a universal fallback — making it work on every symbol and every timeframe. On top of this engine, a triple-layer divergence detector identifies Regular, Hidden, and statistical Exhaustion signals, and every signal is scored by its own statistical strength with a ★/★★/★★★ rating system printed directly on the label.
The indicator is built for traders who want smart-money context at a glance: when buyers are absorbing, when a rally is losing real participation, and when a climactic flush is likely to reverse — with an immediate visual cue of how strong each signal is relative to the recent flow regime.
🔹 **Unique Edge**
Most CVD indicators are single-mode: either they plot cumulative delta, or they call a Regular divergence. This script combines four layers that rarely appear together in one tool:
- Hybrid engine with transparent fallback (no silent failure on high TFs)
- Exhaustion detection based on standard-deviation of CVD change, not price — catches reversals that price-only divergence misses
- Per-signal ★/★★/★★★ strength rating using type-specific statistical metrics (pivot-gap σ for Regular/Hidden, change σ for Exhaustion), so traders instantly know which signals deserve attention
- Optional reaction zones anchored at flow-driven pivots, behaving as dynamic support/resistance born from real participation events rather than pure price structure
🔹 **Methodology**
- The engine computes two parallel delta streams every bar: an intrabar polarity stream (weighted by wick balance for neutral/doji candles) and a lower-timeframe stream that iterates sub-bars and signs each by its close-vs-open direction
- In Hybrid mode, the LTF stream is preferred when it yields a non-zero value; the intrabar stream is used as fallback so the indicator never goes blank on exotic tickers or high timeframes
- A session/daily/weekly reset prevents long-run drift and keeps the cumulative counter meaningful across regime changes
- Pivots are detected on both price and CVD with a shared lookback window; the last two price pivots and their paired CVD values are tested for all four classical divergence relationships
- Exhaustion is a separate statistical trigger: the single-bar CVD change is compared against a 50-bar standard deviation; a σ breach in the direction opposite to the candle body is flagged as climactic absorption
- Each divergence label is rated with stars based on its type: Regular and Hidden use the CVD-pivot gap normalized by 50-bar CVD level stdev (how far apart the two flow pivots are), while Exhaustion uses the σ multiple of the current CVD change (how extreme the climactic event is)
- A cooldown window suppresses signal clustering in chop, and labels are offset by ATR-scaled distance with a leader line so they never collide with candles
🔹 **Signals & Alerts**
On-chart labels with star rating:
- Reg Bull / Reg Bear ★-★★★ — classical reversal divergence (price exhausts, flow refuses)
- Hid Bull / Hid Bear ★-★★★ — continuation divergence (pullback inside an active trend)
- Exh Bull / Exh Bear ★-★★★ — statistical flow climax above the σ threshold
Star thresholds for Regular/Hidden: ★★★ ≥ 2.0σ gap, ★★ ≥ 1.0σ gap, ★ < 1.0σ.
Star thresholds for Exhaustion: ★★★ ≥ 3.0σ, ★★ ≥ 2.0σ, ★ < 2.0σ (minimum trigger is 1.75σ).
Each signal carries its own color code and a leader line connecting the label back to the source candle for fast visual reading. Six discrete alertcondition slots are exposed plus three proactive alert() calls grouped by divergence family, so traders can route regular, hidden, and exhaustion signals to different channels.
🔹 **Key Inputs**
- Calculation Method: Hybrid, LTF Only, or Intrabar Only
- LTF Resolution: Auto (adaptive by chart TF) or fixed 1 / 3 / 5 / 15m
- CVD Reset: Session, Daily, Weekly, or None
- Pivot Length: 2–15 bars
- Toggles for Regular / Hidden / Exhaustion layers independently
- Exhaustion Threshold (σ): 1.0–4.0, default 1.75
- Min Bars Between Signals: anti-clustering cooldown (default 15)
- Reaction Zones: optional, with ATR width, extend length, and max active cap
- Label Size + Label Offset (ATR) for visual tuning
- Info Panel: 5 positions, 4 text sizes, full hide toggle
🔹 **How to Use**
- On the 4H timeframe, run the defaults on liquid instruments: BTCUSDT, ETHUSDT, SPX, ES, major FX pairs
- Treat ★★★ signals as the highest-priority reads of the chart — these are statistical outliers
- Treat ★★ signals as the normal tradeable population — the bulk of decision-making happens here
- Treat ★ signals as background context — use them for bias confirmation, not as primary entries
- Regular divergences are reversal warnings at structural highs/lows; they are most reliable when aligned with a key horizontal level or trendline
- Hidden divergences are trend-continuation entries during pullbacks inside a confirmed trend
- Exhaustion signals mark participation climaxes and often coincide with short-term reversals even when no classical pivot has formed yet
- Check the Info Panel's Last Signal row for the most recent event type and its star rating without scanning the chart
- Enable Reaction Zones when you want persistent S/R context from flow events; keep them off for minimal, label-only use
- Consider combining with a structure tool from the AGPro Series (SFP, Breaker, Unicorn) for confluence
🔹 **Info Panel**
The compact info panel on the chart surfaces seven live metrics: the current cumulative CVD value, the CVD trend classification (Up/Down/Flat based on price relative to its own EMA 21), the last signal's full name and star rating in color, the rolling divergence count over the last 200 bars (Bull / Bear), and the bar-age of the most recent bullish and bearish events. This gives a full situational snapshot without scrolling.
🔹 **Limitations & Transparency**
- CVD from intrabar polarity is an approximation, not true tick-level order flow. Exchange-native buy/sell volume is only available through footprint data
- On very high timeframes (Daily+), LTF breakdown may return partial data; Hybrid mode is recommended
- Divergence signals appear only after both pivot legs are confirmed; the second pivot needs `pivotLen` bars of right-side confirmation, so signals print with that lag
- Exhaustion requires at least 50 bars of CVD history for the standard-deviation baseline
- Star ratings are statistical descriptors of signal strength relative to recent flow, not trade-quality guarantees
- Past performance of any divergence pattern does not guarantee future results; this tool surfaces probabilistic context, not guaranteed reversals
🔹 **Risk Disclosure**
This indicator is an analytical framework, not a trading system or financial advice. Signals are technical observations intended to support decision-making; they do not account for fundamentals, news, liquidity, or your risk tolerance. Always use proper position sizing, stop-loss placement, and risk management. Test the tool on historical data and in a simulated environment before deploying it on live capital. Trading carries risk of substantial loss. Indicator

SMT Divergence [UAlgo]SMT Divergence is a comparative market structure indicator designed to detect disagreement between a primary instrument and a second reference symbol. The script looks for situations where the main chart prints a stronger structural move, while the comparison symbol fails to confirm that move. This kind of disagreement is often referred to as SMT divergence and is commonly used to identify potential weakness in continuation or hidden strength into reversal conditions.
The script works by tracking confirmed swing highs and swing lows on both instruments. Once enough pivots are stored, it compares the latest structural movement in the primary chart against the latest comparable movement in the reference symbol. If the primary chart makes a lower low while the comparison symbol makes a higher low, the script identifies bullish SMT divergence. If the primary chart makes a higher high while the comparison symbol makes a lower high, the script identifies bearish SMT divergence.
What makes this script especially practical is its flexible comparison logic. It can work in a time matched mode, where the comparison swings must occur near the same bars as the primary swings, or in an independent mode, where the script simply uses the most recent valid swings from both instruments. It also supports inverse correlation logic, allowing the user to compare instruments that normally move in opposite directions.
The indicator can then display SMT labels directly on the main chart, draw structure lines between the relevant swing points, show a live information table, and optionally render the comparison symbol as candles inside the oscillator pane. This creates a complete workflow for divergence monitoring instead of only printing occasional labels.
In practical use, SMT Divergence can help traders identify moments when the primary symbol appears to be making an aggressive structural move without proper confirmation from a related market. These moments can provide useful context for potential exhaustion, liquidity events, or directional imbalance between correlated instruments.
🔹 Features
🔸 Dual Symbol Market Structure Comparison
The script compares the active chart against a second user selected symbol. Both instruments are processed using the same pivot logic, which creates a consistent framework for structural comparison.
🔸 Bullish SMT Detection
Bullish SMT is identified when the primary chart makes a lower low while the comparison symbol makes a higher low. This can suggest hidden relative strength in the comparison instrument or possible exhaustion in the primary one.
🔸 Bearish SMT Detection
Bearish SMT is identified when the primary chart makes a higher high while the comparison symbol makes a lower high. This can suggest weakening confirmation and possible vulnerability in the primary move.
🔸 Positive and Inverse Correlation Modes
The script supports both normal and inverse correlation logic. In normal mode, lows are compared with lows and highs are compared with highs. In inverse mode, lows are compared with highs and highs are compared with lows. This makes the tool flexible enough for both positively correlated and negatively correlated markets.
🔸 Time Matched and Independent Swing Modes
The user can choose whether swing comparison should require approximate time alignment or simply use the most recent valid swings from each symbol. This allows the script to be either stricter or more flexible depending on the relationship between the two markets.
🔸 Pivot Strength Control
Swing highs and lows are built from confirmed pivots using user defined left and right bar settings. This allows the user to control how sensitive or how selective the swing structure should be.
🔸 Minimum Price Difference Filter
A minimum price difference percentage can be required before a divergence is accepted. This helps avoid labeling very small and potentially insignificant swing differences.
🔸 Max Swing Memory Control
The script stores a limited number of recent swings for both the primary and comparison symbol. This keeps the logic focused on relevant structure and prevents unnecessary buildup of stale pivots.
🔸 On Chart Labels and Lines
Detected SMT events can be labeled directly on the main chart. The script can also draw structure lines across the primary and comparison swing legs used in the divergence.
🔸 Live Info Table
An information table can display the active comparison symbol, correlation mode, divergence count, and the latest signal direction. This makes the script easier to monitor in real time.
🔸 Optional Compare Candle Panel
The comparison symbol can be plotted as candles in the indicator pane. This allows the user to visually inspect whether the second instrument is confirming or rejecting the move seen in the primary chart.
🔸 Alert Support
The script includes separate alerts for bullish SMT, bearish SMT, and any SMT event.
🔹 Calculations
1) Defining Swing and Divergence Objects
type SwingPoint
int barIdx
int barTm
float price
bool isHigh
type SMTDivergence
int barIdx
int barTm
bool isBullish
float primaryPrice
float comparePrice
string primarySymbol
string compareSymbol
label lbl
line ln1
line ln2
type SymbolData
float h
float l
float c
This is the structural base of the whole script.
A SwingPoint stores one confirmed pivot with its bar index, time, price, and whether it is a high or a low.
An SMTDivergence object stores the final event once a divergence is confirmed. It keeps the primary and comparison prices, the involved symbols, the direction, and the visual references used for labels and lines.
A SymbolData object is used as a clean container for each symbol’s high, low, and close series.
So before any logic runs, the script already has a full structure for swing storage and divergence output.
2) Requesting the Comparison Symbol Data
= request.security(compareSymbolInput, timeframe.period, , lookahead = barmerge.lookahead_off)
SymbolData primaryData = SymbolData.new(high, low, close)
SymbolData compareData = SymbolData.new(compareHigh, compareLow, compareClose)
This block loads the second symbol on the same chart timeframe.
The primary chart uses the current symbol’s own high, low, and close. The comparison symbol is requested with request.security , and its values are placed into a matching data structure.
This means both symbols are analyzed on an equal timeframe basis, which is essential for consistent swing comparison.
3) Finding Pivot Highs and Pivot Lows on Both Symbols
float primaryPivotHigh = ta.pivothigh(primaryData.h, pivotLeftBars, pivotRightBars)
float primaryPivotLow = ta.pivotlow(primaryData.l, pivotLeftBars, pivotRightBars)
float comparePivotHigh = ta.pivothigh(compareData.h, pivotLeftBars, pivotRightBars)
float comparePivotLow = ta.pivotlow(compareData.l, pivotLeftBars, pivotRightBars)
This is the swing discovery engine.
The script uses the same pivot settings for both instruments. A pivot high or pivot low is only confirmed after the required number of bars has passed on each side.
This means the divergence engine is built from confirmed structure, not from temporary highs and lows that can disappear before confirmation.
4) Storing Swings in Memory
method addSwing(array swings, SwingPoint newSwing) =>
swings.push(newSwing)
if swings.size() > maxSwingsToStore
swings.shift()
swings
if not na(primaryPivotHigh)
primarySwings.addSwing(SwingPoint.new(bar_index - pivotOffset, time , primaryPivotHigh, true))
if not na(primaryPivotLow)
primarySwings.addSwing(SwingPoint.new(bar_index - pivotOffset, time , primaryPivotLow, false))
if not na(comparePivotHigh)
compareSwings.addSwing(SwingPoint.new(bar_index - pivotOffset, time , comparePivotHigh, true))
if not na(comparePivotLow)
compareSwings.addSwing(SwingPoint.new(bar_index - pivotOffset, time , comparePivotLow, false))
Once a pivot is confirmed, it is pushed into the appropriate swing array.
The true pivot bar is pivotRightBars bars in the past, so the script subtracts that offset from the current bar index and time. Each array only keeps the latest user defined number of swings.
So the script maintains a rolling structural memory for both markets without allowing the arrays to grow indefinitely.
5) Retrieving the Latest and Previous Swings
method getLastSwing(array swings, bool isHigh) =>
SwingPoint result = na
if swings.size() > 0
for i = swings.size() - 1 to 0
SwingPoint sw = swings.get(i)
if sw.isHigh == isHigh
result := sw
break
result
method getPreviousSwing(array swings, bool isHigh) =>
SwingPoint result = na
int count = 0
if swings.size() > 1
for i = swings.size() - 1 to 0
SwingPoint sw = swings.get(i)
if sw.isHigh == isHigh
count += 1
if count == 2
result := sw
break
result
These two helper methods are used to build the swing pairs required for divergence detection.
getLastSwing returns the most recent high or low swing of the requested type.
getPreviousSwing returns the swing before that.
This is important because SMT logic always compares two consecutive structure points on the primary side and two corresponding structure points on the comparison side.
6) Enforcing Maximum Distance Between Swing Points
method isWithinRange(SwingPoint sw1, SwingPoint sw2) =>
not na(sw1) and not na(sw2) and math.abs(sw1.barIdx - sw2.barIdx) <= maxBarsLookback
This method makes sure the two swings being compared are not too far apart in time.
If the latest and previous swing are separated by more than the allowed bar distance, the setup is ignored.
This helps keep the analysis focused on fresh and structurally related moves rather than comparing swings that are too old or too distant to be meaningful together.
7) Time Matched Swing Search
method findSwingNearBar(array swings, int targetBar, bool isHigh, int toleranceBars) =>
SwingPoint result = na
int minDiff = 999999
if swings.size() > 0
for i = swings.size() - 1 to 0
SwingPoint sw = swings.get(i)
if sw.isHigh == isHigh
int diff = math.abs(sw.barIdx - targetBar)
if diff <= toleranceBars and diff < minDiff
minDiff := diff
result := sw
result
This method is used only when the user selects time matched mode.
The idea is to find a comparison symbol swing that occurred near the same bar as the primary swing. The script searches for the nearest swing of the correct type inside the allowed tolerance window.
So time matched mode is stricter because it requires approximate timing alignment between the two instruments.
8) Minimum Price Difference Filter
method pctDiff(float price1, float price2) =>
math.abs(price1 - price2) / ((price1 + price2) / 2) * 100
This function measures the percentage difference between two prices.
The result is later used as an optional minimum swing magnitude filter. If the primary chart’s new swing differs only slightly from its previous one, the script can ignore that divergence candidate.
So the minimum difference filter helps reduce weaker signals that are based on very small structure changes.
9) Bullish SMT Detection Logic
if not na(primaryPivotLow) and not na(primaryLastLow) and not na(primaryPrevLow)
SwingPoint usedCompareLast = na
SwingPoint usedComparePrev = na
bool targetSwingHigh = inverseCorrelation ? true : false
if useTimeMatching
usedCompareLast := compareSwings.findSwingNearBar(primaryLastLow.barIdx, targetSwingHigh, timeToleranceBars)
usedComparePrev := compareSwings.findSwingNearBar(primaryPrevLow.barIdx, targetSwingHigh, timeToleranceBars)
else
usedCompareLast := compareSwings.getLastSwing(targetSwingHigh)
usedComparePrev := compareSwings.getPreviousSwing(targetSwingHigh)
This is the setup stage for bullish SMT.
The script only begins the test when a new primary pivot low has just been confirmed and both the latest and previous primary lows are available.
Then it decides what kind of comparison swings are needed.
In normal correlation mode, bullish SMT compares primary lows to comparison lows.
In inverse correlation mode, bullish SMT compares primary lows to comparison highs.
Then the script either uses time matched lookup or independent swing retrieval depending on the chosen mode.
So before the bullish condition itself is tested, the script first builds the proper comparison pair according to both timing mode and correlation mode.
10) Bullish SMT Confirmation Conditions
if not na(usedCompareLast) and not na(usedComparePrev)
if primaryLastLow.isWithinRange(primaryPrevLow)
bool primaryLL = primaryLastLow.price < primaryPrevLow.price
bool compareHL = inverseCorrelation ? (usedCompareLast.price < usedComparePrev.price) : (usedCompareLast.price > usedComparePrev.price)
bool meetsMinDiff = minPriceDiff == 0.0 or (primaryLastLow.price.pctDiff(primaryPrevLow.price) >= minPriceDiff)
Bullish SMT is confirmed when three things happen.
First, the primary chart must make a lower low:
primaryLastLow.price < primaryPrevLow.price
Second, the comparison symbol must fail to confirm that weakness. In normal correlation mode this means the comparison symbol makes a higher low. In inverse correlation mode the logic is adjusted accordingly because the relationship is reversed.
Third, if the minimum difference filter is enabled, the primary low must differ enough from the previous low.
So bullish SMT is essentially a lower low in the main chart that is not properly confirmed by the comparison market.
11) Creating the Bullish Divergence Event
if primaryLL and compareHL and meetsMinDiff and primaryLastLow.barIdx != lastBullPrimaryIdx
bullishSMT := true
lastBullPrimaryIdx := primaryLastLow.barIdx
SMTDivergence newDiv = SMTDivergence.new(primaryLastLow.barIdx, primaryLastLow.barTm, true, primaryLastLow.price, usedCompareLast.price, syminfo.tickerid, compareSymbolInput, na, na, na)
newDiv.drawVisuals(primaryPrevLow.barTm, primaryPrevLow.price, usedCompareLast.barTm, usedComparePrev.barTm, usedComparePrev.price)
divergences.push(newDiv)
Once the bullish conditions are met, the script creates a new SMT divergence object.
It stores the primary swing information, the comparison swing information, the involved symbols, and the bullish direction. Then it calls the visual drawing method and pushes the divergence into the history array.
The duplicate protection check against lastBullPrimaryIdx prevents the same primary swing from being labeled repeatedly.
12) Bearish SMT Detection Logic
if not na(primaryPivotHigh) and not na(primaryLastHigh) and not na(primaryPrevHigh)
SwingPoint usedCompareLastH = na
SwingPoint usedComparePrevH = na
bool targetSwingHigh = inverseCorrelation ? false : true
if useTimeMatching
usedCompareLastH := compareSwings.findSwingNearBar(primaryLastHigh.barIdx, targetSwingHigh, timeToleranceBars)
usedComparePrevH := compareSwings.findSwingNearBar(primaryPrevHigh.barIdx, targetSwingHigh, timeToleranceBars)
else
usedCompareLastH := compareSwings.getLastSwing(targetSwingHigh)
usedComparePrevH := compareSwings.getPreviousSwing(targetSwingHigh)
This is the mirror setup stage for bearish SMT.
It begins only when a new primary pivot high has been confirmed and the required primary highs exist. Then it selects the proper comparison swing type according to the chosen correlation mode.
In normal correlation mode, bearish SMT compares highs with highs.
In inverse correlation mode, bearish SMT compares highs with lows.
So this block prepares the correct structural pair for the bearish test.
13) Bearish SMT Confirmation Conditions
if not na(usedCompareLastH) and not na(usedComparePrevH)
if primaryLastHigh.isWithinRange(primaryPrevHigh)
bool primaryHH = primaryLastHigh.price > primaryPrevHigh.price
bool compareLH = inverseCorrelation ? (usedCompareLastH.price > usedComparePrevH.price) : (usedCompareLastH.price < usedComparePrevH.price)
bool meetsMinDiff = minPriceDiff == 0.0 or (primaryLastHigh.price.pctDiff(primaryPrevHigh.price) >= minPriceDiff)
Bearish SMT is confirmed when the primary chart makes a higher high while the comparison symbol fails to confirm that strength.
In normal correlation mode, the comparison symbol must make a lower high. In inverse correlation mode the logic is adjusted to preserve the intended structural disagreement.
The minimum difference filter is applied here as well.
So bearish SMT is the opposite structure of bullish SMT, focused on unconfirmed upside continuation.
14) Creating the Bearish Divergence Event
if primaryHH and compareLH and meetsMinDiff and primaryLastHigh.barIdx != lastBearPrimaryIdx
bearishSMT := true
lastBearPrimaryIdx := primaryLastHigh.barIdx
SMTDivergence newDiv = SMTDivergence.new(primaryLastHigh.barIdx, primaryLastHigh.barTm, false, primaryLastHigh.price, usedCompareLastH.price, syminfo.tickerid, compareSymbolInput, na, na, na)
newDiv.drawVisuals(primaryPrevHigh.barTm, primaryPrevHigh.price, usedCompareLastH.barTm, usedComparePrevH.barTm, usedComparePrevH.price)
divergences.push(newDiv)
Once the bearish rules are satisfied, the script creates a bearish SMT divergence object, draws its visuals, and stores it in the divergence history array.
The duplicate protection check against lastBearPrimaryIdx prevents repeated labeling of the same primary high.
15) Drawing Labels and Lines
method drawVisuals(SMTDivergence div, int prevTime, float prevPrice, int compareTime, int prevCompareTime, float prevComparePrice) =>
if showLabels
string labelText = div.isBullish ? "🔺 SMT" : "🔻 SMT"
string tooltipText = str.format("{0} SMT Divergence {1} vs {2} Price: {3}", div.isBullish ? "Bullish" : "Bearish", div.primarySymbol, div.compareSymbol, str.tostring(div.primaryPrice, format.mintick))
color labelColor = div.isBullish ? bullishColor : bearishColor
div.lbl := label.new(div.barIdx, div.primaryPrice, labelText, xloc = xloc.bar_index, yloc = div.isBullish ? yloc.belowbar : yloc.abovebar, color = labelColor, textcolor = color.white, style = div.isBullish ? label.style_label_up : label.style_label_down, tooltip = tooltipText, size = size.small, force_overlay = true)
if showLines and not na(prevTime) and not na(prevPrice)
color lineColor = div.isBullish ? bullishColor : bearishColor
div.ln1 := line.new(prevTime, prevPrice, div.barTm, div.primaryPrice, xloc = xloc.bar_time, color = lineColor, width = 2, style = line.style_solid, force_overlay = true)
if not na(prevComparePrice) and not na(prevCompareTime) and not na(compareTime)
div.ln2 := line.new(prevCompareTime, prevComparePrice, compareTime, div.comparePrice, xloc = xloc.bar_time, color = lineColor, width = 2, style = line.style_solid)
This method creates the chart visuals for each divergence.
The label is placed directly at the primary swing location, above price for bearish SMT and below price for bullish SMT.
If line drawing is enabled, the script also draws one line across the primary chart’s two relevant swing points and another line across the comparison symbol’s swing leg.
So the user can see both the signal marker and the underlying structural disagreement that produced it.
16) Limiting Divergence History
if divergences.size() > maxDivergencesToShow
SMTDivergence rmDiv = divergences.shift()
rmDiv.cleanup()
This block controls object history.
If the stored divergence count exceeds the chosen limit, the oldest divergence is removed from the array and all its visuals are deleted.
This keeps the chart clean and prevents unlimited buildup of old labels and lines.
17) Building the Information Table
var table infoTable = table.new(position.top_right, 2, 6, bgcolor = color.new(#2222b3, 10), border_width = 1, border_color = color.new(color.white, 80), frame_width = 2, frame_color = color.new(color.white, 70))
if showTable and barstate.islast
table.cell(infoTable, 0, 1, "Primary", text_color = color.gray, text_size = size.tiny)
table.cell(infoTable, 1, 1, syminfo.tickerid, text_color = color.white, text_size = size.tiny)
table.cell(infoTable, 0, 2, "Compare", text_color = color.gray, text_size = size.tiny)
table.cell(infoTable, 1, 2, compareSymbolInput, text_color = color.white, text_size = size.tiny)
table.cell(infoTable, 0, 3, "Correlation", text_color = color.gray, text_size = size.tiny)
table.cell(infoTable, 1, 3, inverseCorrelation ? "Inverse" : "Positive", text_color = inverseCorrelation ? color.orange : color.aqua, text_size = size.tiny)
table.cell(infoTable, 0, 4, "Divergences", text_color = color.gray, text_size = size.tiny)
table.cell(infoTable, 1, 4, str.tostring(divergences.size()), text_color = color.white, text_size = size.tiny)
This table provides a compact real time summary.
It shows:
the primary symbol,
the comparison symbol,
the current correlation mode,
the number of stored divergences,
and the most recent signal direction.
So the table functions as a monitoring dashboard rather than only a decorative element.
18) Determining the Last Signal for the Table
string lastSignal = "None"
color signalColor = color.gray
if divergences.size() > 0
SMTDivergence lastDiv = divergences.get(divergences.size() - 1)
lastSignal := lastDiv.isBullish ? "🔺 Bullish" : "🔻 Bearish"
signalColor := lastDiv.isBullish ? bullishColor : bearishColor
This block determines what the table should show as the latest signal.
If at least one divergence has been stored, the script reads the newest one and displays whether it was bullish or bearish, along with the corresponding color.
So the info table always reflects the current state of the divergence history.
19) Alert Conditions
alertcondition(bullishSMT, title = "Bullish SMT Divergence", message = "🔺 Bullish SMT Divergence detected on {{ticker}}! Primary made Lower Low while {{interval}} comparison made Higher Low.")
alertcondition(bearishSMT, title = "Bearish SMT Divergence", message = "🔻 Bearish SMT Divergence detected on {{ticker}}! Primary made Higher High while {{interval}} comparison made Lower High.")
alertcondition(bullishSMT or bearishSMT, title = "Any SMT Divergence", message = "SMT Divergence detected on {{ticker}}!")
The script provides three alert types.
One triggers only on bullish SMT.
One triggers only on bearish SMT.
One triggers on any SMT event.
This makes the indicator useful both for visual study and for live event monitoring.
20) Compare Candle Panel
color compareBodyColor = compareClose >= compareOpen ? color.new(#00E676, 0) : color.new(#FF5252, 0)
color compareWickColor = compareClose >= compareOpen ? color.new(#00E676, 30) : color.new(#FF5252, 30)
color compareBorderColor = compareClose >= compareOpen ? color.new(#00C853, 0) : color.new(#D50000, 0)
plotcandle(compareOpen, compareHigh, compareLow, compareClose, title = "Compare Symbol Candles", color = compareBodyColor, wickcolor = compareWickColor, bordercolor = compareBorderColor, display = showCandlePanel ? display.all : display.none)
This block renders the comparison symbol as candles inside the indicator pane.
The candle colors are determined by the comparison symbol’s own open and close direction. If the user enables the candle panel, this gives a quick visual reference for how the second instrument is behaving without needing to open a separate chart.
So the user can study SMT signals and the comparison structure in the same pane. Indicator

MACD Advanced: Trend-Weighted MomentumMACD Advanced Overview
MACD Advanced is a refined version of the classic Moving Average Convergence Divergence. While the standard MACD identifies changes in momentum, it often produces false signals in ranging markets or against a strong higher-timeframe trend. This script addresses that by "tilting" the MACD calculation based on the slope of a Higher Timeframe (HTF) Moving Average.
How it Works
The script integrates a Trend Bias Factor derived from the rate of change of a long-period EMA (default 200) from a user-defined timeframe.
The Math: It calculates the ratio between the current HTF EMA and its value $n$ bars ago. This ratio is then used to offset the MACD line.
Bullish Bias: If the HTF EMA is sloping upward, the MACD is shifted higher, making bearish crossovers harder to trigger and bullish ones more sensitive.
Bearish Bias: If the HTF EMA is sloping downward, the MACD is dragged lower, prioritizing short-side momentum.
Key Features
MTF Integration: Analyze the daily trend while trading on the 5m or 15m chart.
Dynamic Histogram: The visual fill between the MACD and its momentum provides a clear look at when momentum is accelerating or exhausting relative to the trend.
Customizable Sensitivity: Adjust the lookback period for the trend slope to match your specific asset’s volatility.
How to Trade
Trend Confirmation: Look for the MACD line (the columns) to cross the zero line. This indicates that both short-term momentum and long-term trend are in alignment.
Momentum Exhaustion: When the inner histogram (the fill) begins to shrink back toward the MACD columns, it suggests a potential pull-back or profit-taking zone.
Divergences: Look for price making a new high while the MACD Advanced makes a lower high; the trend-weighting makes these divergences more prominent during trend exhaustion.
Technical Approach
Normalization of MTF Data: The script uses request.security with barmerge.gaps_off to ensure that higher timeframe data is mapped correctly to the current chart bars without creating visual "steps" or "staircases."
The Delta Calculation: Instead of a simple boolean filter,
we calculate a relative value r = EMA_ current/EMA_ lookback
By adding r - 1 to the standard MACD calculation, we create a non-linear offset. This means the more aggressive the trend, the more the MACD is displaced.
Visual Architecture: The script uses two plot outputs (g1 and g2) and a fill() function. This creates a "ribbon" effect that is more intuitive than the standard "centered" histogram, as it shows momentum relative to the trend-weighted line rather than a static zero axis.
Since this version of the MACD is "weighted" by a higher-timeframe trend, it changes how you read common signals. On a standard chart, the MACD just shows momentum; here, it shows momentum relative to the "big picture" slope.
Here is how to effectively use the MACD Advanced on a live chart:
1. Finding the "Trend-Momentum" Alignment
The most powerful signal from this indicator occurs when the Trend Factor and the Momentum Histogram both agree.
The Bullish Setup: Look for the MACD columns (the "base") to be above the zero line, while the inner fill (the "histogram") is bright green.
Interpretation: The Daily trend is up, and the intraday momentum is also accelerating.The
Bearish Setup: Look for the MACD columns to be below the zero line, while the inner fill is bright red.
Interpretation: The Daily trend is down, and intraday selling pressure is increasing.
2. Reading the "Hidden" Divergence
Because we’ve added a trend offset r-1, this indicator identifies "Trend Exhaustion" better than a standard MACD.
Standard Divergence: Price makes a higher high, but MACD makes a lower high.
Advanced Divergence: If the price makes a higher high, but the MACD Advanced is flat or lower, it means the Higher Timeframe EMA is losing its slope. Even if the price looks strong, the "Big Picture" is flattening out. This is often a precursor to a major reversal.
3. The "Snap-Back" Trade (Mean Reversion)
Since you are using a 200 EMA as the trend filter, the indicator will naturally pull back toward zero when the price gets too far from that average.
The Signal: If the MACD Advanced is "overextended" (very high or very low relative to its recent history) and the inner histogram crosses back toward the zero line, it’s a sign that the price is likely to "snap back" to the mean.
Application: This is great for exiting a trend trade before the actual trend reversal happens.
Pro Tip: The "Zero-Cross" Filter
In a strong uptrend (Daily EMA 200 is rising), the MACD Advanced will rarely cross below zero. If you see the histogram dip into the red while the MACD columns stay green/above zero, treat that as a "Buy the Dip" opportunity rather than a "Sell" signal.
The Chart shows regular MACD vs ADVANCED MACD one can easily observe the difference between them and the trend is identified easily. Indicator

RSI Overbought/Oversold + Divergence IndicatorDESCRIPTION:
This script combines the Relative Strength Index ( RSI ), Moving Average and Divergence indicator to make a better decision when to enter or exit a trade.
- The Moving Average line (MA) has been made hidden by default but enhanced with an RSIMA cloud.
- When the RSI is above the selected MA it turns into green and when the RSI is below the select MA it turns into red.
- When the RSI is moving into the Overbought or Oversold area, some highlighted areas will appear.
- When some divergences or hidden divergences are detected an extra indication will be highlighted.
- When the divergence appear in the Overbought or Oversold area the more weight it give to make a decision.
- The same color pallet has been used as the default candlestick colors so it looks familiar.
HOW TO USE:
The prerequisite is that we have some knowledge about the Elliot Wave Theory, the Fibonacci Retracement and the Fibonacci Extension tools.
Wave 1
(1) When we receive some buy signals we wait until we receive some extra indications.
(2) On the RSI Overbought/Oversold + Divergence Indicator we can see a Bullish Divergence and our RSI is changing from red to green ( RSI is higher then the MA).
(3) If we are getting here into the trade then we need to use a stop loss. We put our stop loss 1 a 2 pips just below the lowest wick. We also invest maximum 50% of the total amount we want to invest.
Wave 2
(4) Now we wait until we see a clear reversal and here we starting to use the Fibonacci Retracement tool. We draw a line from the lowest point of wave(1) till the highest point of wave (1). When we are retraced till the 0.618 fib also called the golden ratio we check again the RSI Overbought/Oversold + Divergence Indicator. When we see a reversal we do our second buy. We set again a stop loss just below the lowest wick (this is the yellow line on the chart). We also move the stop loss we have set in step (3) to this level.
Wave 3
(5) To identify how far the uptrend can go we need to use the Fibonacci Extension tool. We draw a line from the lowest point of wave(1) till the highest point of wave (1) and draw it back to the lowest point of wave (2). Wave (3) is most of the time the longest wave and can go till it has reached the 1.618 or 2.618 fib. On the 1.618 we can take some profit. If we don't want to sell we move our stop loss to the 1 fib line (yellow line on the chart).
(6) We wait until we see a clear reversal on the Overbought/Oversold + Divergence Indicator and sell 33% to 50% of our investment.
Wave 4
(7) Now we wait again until we see a clear reversal and here we starting to use the Fibonacci Retracement tool. We draw a line from the lowest point of wave(2) till the highest point of wave (3). When we are retraced till the 0.618 fib also called the golden ratio we check again the RSI Overbought/Oversold + Divergence Indicator. When we see a reversal we buy again. We set again a stop loss just below the lowest wick (this is the yellow line on the chart).
(8) If we bought at the first reversal ours stop los was triggered (9) and we got out of the trade.
(9) If we did not bought at step (7) because our candle did not hit the 0.618 fib or we got stopped out of the trade we buy again at the reversal.
Wave 5
(10) To identify how far the uptrend can go we need to use the Fibonacci Extension tool. We draw a line from the lowest point of wave(2) till the highest point of wave (3) and draw it back to the lowest point of wave (4). Most of the time wave 5 goes up till it has reached the 1 fib. And that is the point where we got out of the trade with all of our investment. In this trade we got out of the trade a bit earlier. We received the sell signals and got a reversal on the Overbought/Oversold + Divergence Indicator.
We are hoping you learned something so you can make better decisions when to get into or out of a trade.
If you have any question just drop it into the comments below.
FEATURES:
• You can show/hide the RSI .
• You can show/hide the MA.
• You can show/hide the lRSIMA cloud.
• You can show/hide the Stoch RSI cloud.
• You can show/hide and adjust the Overbought and Oversold zones.
• You can show/hide and adjust the Overbought Extended and Oversold Extended zones.
• You can show/hide the Overbought and Oversold highlighted zones.
• Etc...
HOW TO GET ACCESS TO THE SCRIPT:
• Favorite the script and add it to your chart.
REMARKS:
• This advice is NOT financial advice.
• We do not provide personal investment advice and we are not a qualified licensed investment advisor.
• All information found here, including any ideas, opinions, views, predictions, forecasts, commentaries, suggestions, or stock picks, expressed or implied herein, are for informational, entertainment or educational purposes only and should not be construed as personal investment advice.
• We will not and cannot be held liable for any actions you take as a result of anything you read here.
• We only provide this information to help you make a better decision.
• While the information provided is believed to be accurate, it may include errors or inaccuracies.
Good Luck and have fun,
The CryptoSignalScanner Team
Indicator

Indicator

Indicator

Indicator

Indicator

Indicator

Indicator

Indicator

Indicator
