Delta Void Profile [BigBeluga]Delta Void Profile is an advanced order flow and market structure framework engineered to reveal the "negative space" in price action. By contrasting traditional volume accumulation with a unique Inverse Liquidity Void map, this indicator identifies where the market is most anchored and where it is most fragile.
While standard profiles show where the crowd has transacted, the Delta Void Profile simultaneously highlights where the market *failed* to trade, marking the "liquidity vacuums" that often dictate explosive price movements.
🔵 THE DUAL-ENGINE FRAMEWORK
The Normal Profile (Right Side): This is your primary volume distribution. It visualizes the total relative volume transacted at each price bin within the lookback period, providing a clear view of high-interest zones.
The Inverse "Void" Profile (Left Side): This profile measures the "gap" between the maximum volume peak and the current bin. Longer bars on the left signify Volume Voids —areas where price moved too quickly for significant liquidity to build.
Intraday Delta Breakdown: Within the normal profile, the script calculates a granular Buy/Sell Delta . Each bin features a central divider and percentage labels, showing exactly which side of the market dominated that specific price node.
🔵 CORE ARCHITECTURE
Liquidity Vacuum Identification: The indicator automatically highlights the "Deepest Gap"—the price area with the least historical transacted volume relative to the peak. These zones act as magnets or "slip-zones" where price is likely to expand rapidly without resistance.
HVN & Gap Pivot Detection: Depending on your strategy, the tool automatically plots dashed structural lines at either High Volume Nodes (HVN) —representing fair value and heavy support/resistance—or at Volume Gaps —representing liquidity pockets.
Dynamic Gradient Resolution: The profile uses a color-gradient system based on volume density. Brighter, more saturated bins represent institutional interest, while faded bins represent retail noise or transitional zones.
🔵 FEATURES
High-Definition Bins: Customizable vertical resolution (Bin Count) allows you to transition from a macro structural view to a high-definition "micro-scalping" look at order flow.
Delta Efficiency Labels: Real-time percentage labels on the right-hand profile give you an immediate breakdown of supply and demand percentages for every price level.
Void Strength Labels: The inverse profile calculates and prints the "Gap Percentage," explicitly labeling areas where liquidity is significantly missing.
UI Scaling: Fully adjustable global text and label sizes ensure the profile remains readable on any screen resolution or chart layout.
🔵 STRATEGIC APPLICATION
Trading the HVN (High Volume Nodes): Use HVN levels as anchors for your stop-loss or as high-probability entry points. These are prices where the market has historically agreed on "Value".
Exploiting the Voids: When price enters a high-percentage "Gap" zone on the left profile, expect increased volatility. Because there is no "friction" from historical orders, price often "teleports" through these voids until it reaches the next high-volume cluster.
Delta Confirmation: Use the Buy/Sell percentage labels to confirm breakouts. If price is breaking an HVN resistance and the delta shows high Buy dominance, the probability of a successful breakout increases significantly.
Mean Reversion Targets: Voids often act as targets for mean reversion. If price is overextended, look for the nearest "Volume Gap" pivot as a natural magnet for a relief rally or pullback.
Delta Void Profile transforms your chart into a map of institutional activity and structural weakness. By identifying the voids in the market, you can stop trading into the "heavy" areas and start targeting the "light" areas where the real price expansion occurs. Indicator

Institutional Displacement & Volume Delta [Bigbeluga]🔵 OVERVIEW
Institutional Displacement & Volume Delta is an advanced price action tool designed to identify high-conviction market moves, often referred to as "Displacement." It filters out market noise by highlighting candles that exhibit both significant price expansion and institutional-level volume.
By utilizing lower timeframe (LTF) data, the indicator deconstructs each displacement candle to reveal the internal "Buy vs. Sell" volume balance, allowing traders to see the true intent behind aggressive market shifts.
🔵 CONCEPT
Institutional Displacement — Identifies "Power Candles" that have a large body relative to their wicks, signaling a one-sided move by major market participants.
Volume Spike Filtering — Only qualifies a move as a "Shift" if the volume significantly exceeds a user-defined moving average.
Intrabar Volume Deconstruction — Uses a secondary, lower timeframe (e.g., 1m) to calculate exactly how much of a candle's total volume was dedicated to buying versus selling.
Internal Volume Blocks — Visually splits the body of displacement candles into color-coded sections (Buy Block and Sell Block) based on the internal delta ratio.
Market State Muting — Optionally mutes the color of "choppy" or low-volume bars to keep the focus purely on high-probability institutional activity.
🔵 HOW IT WORKS (IN-DEPTH)
1️⃣ Qualification of Displacement
The script first evaluates the "Body-to-Range" ratio. A candle must be mostly "body" (minimal wicks) to prove that the price didn't face significant rejection.
It then checks the Volume Multiplier. The volume must be X times higher than the 20-period average to confirm institutional "heavy lifting."
If both conditions are met, the bar is labeled a "Bullish Shift" or "Bearish Shift."
2️⃣ Lower Timeframe (LTF) Volume Analysis
Standard candles only show total volume. This indicator uses request.security_lower_tf to peak inside the bar.
It sums up every 1-minute (or user-defined) sub-candle to categorize volume as "Buy" or "Sell" based on the sub-candle's closing direction.
This calculation provides the Delta —the net difference between aggressive buyers and sellers.
3️⃣ Visual Representation
The main candle body is hollowed out, and a "Volume Block" is inserted inside.
The split point of the inner block represents the ratio of Buy vs. Sell volume. If a Bullish Displacement bar has a large Red inner block at the top, it may signal that sellers were heavily defending that area despite the bullish close.
Floating labels provide immediate access to the exact Volume and Delta figures.
🔵 KEY FEATURES
Precise Shift Identification: Combines price expansion (Displacement) with volume spikes.
Internal Delta Blocks: Unique visual deconstruction of candle volume ratios.
Institutional Dashboard: Displays real-time data for the most recent shift, including total volume, delta, and a session shift counter.
Muted Chop Mode: Grey-scales non-significant candles to highlight the "Path of Least Resistance."
Error Handling: Built-in notification if the user selects an LTF timeframe that is mathematically incompatible with the current chart.
🔵 DASHBOARD METRICS
Last Shift: Indicates the direction (Bullish/Bearish) of the most recent displacement.
Shift Vol: The total volume transacted during the most recent high-conviction move.
Shift Δ: The net delta of the last shift, showing the dominant aggressive party.
Shift Count: A running tally of Bullish vs. Bearish shifts since the chart was loaded.
🔵 HOW TO USE
Identifying Ignition: A Displacement bar appearing at a support or resistance level often marks the start of a new trend (Trend Ignition).
Spotting Traps: Look for "Bullish Shifts" where the Sell Block makes up a large portion of the candle body. This indicates heavy absorption by sellers and may lead to a failed breakout.
Confluence with Delta: Use the Dashboard's "Shift Δ" to confirm that the displacement move is backed by strong net buying/selling rather than just high-volume churn.
Exit Timing: If price enters a consolidation zone and the "Shift Count" starts alternating rapidly between Bullish and Bearish, it indicates institutional indecision.
🔵 CONCLUSION
Institutional Displacement & Volume Delta provides a specialized lens into market momentum. By focusing on displacement and the internal mechanics of volume, it helps traders align themselves with the "smart money" and avoid the low-probability volatility of retail-driven noise. Indicator

Liquidity Matrix | AnonycryptousLiquidity Matrix | Anonycryptous
Description & user manual
**Credits**
The sweep detection engine in Liquidity Matrix draws conceptual inspiration from the Liquidity Sweep Filter by AlgoAlpha. The approach to identifying swing-based stop hunts, classifying sweeps by volume significance, and filtering by trend direction is based on ideas first demonstrated in their open-source script, author: AlgoAlpha (pulsewire.com/u/AlgoAlpha)
---
Why this indicator is different;
Most liquidity indicators show you one thing. A zone. A sweep marker. A supply box. A trendline. Each tool tries to solve one problem, and if you want to understand the full picture, you stack five or six indicators on the same chart until it becomes unreadable.
Liquidity Matrix works differently.
It is not a signal indicator. It does not tell you when to buy or sell. It does not score your trades or track your win rate. What it does is something more fundamental: it maps the full landscape of liquidity around price, across ten independent engines, all configurable, all in one overlay.
The core idea is that liquidity drives price. Retail traders place stops at predictable locations — below swing lows, above swing highs, at equal highs and lows, at structural pivots, inside fair value gaps. Institutional participants know this. They move price to those locations, collect that liquidity, and then move in the direction they were always going. If you understand where the liquidity is, where it has already been taken, and what levels are still sitting unmitigated, you understand the context before you place a trade.
Liquidity Matrix gives you that map.
What makes it different from other multi-engine indicators is that every engine is genuinely independent. You can run just the liquidity zones. Or just the voids and HTF levels. Or every engine at once and build your own confluence system. There is no forced reading. There is no house view on what the market is doing. You bring your methodology. The indicator gives you the context to apply it.
It also does something no single-purpose tool does: it shows you the volume behind every level. Not just where the stop clusters are — but how much liquidity was there when they formed. A zone created on 2.4M volume is not the same as a zone created on 58K. The indicator makes that difference visible.
Important notice
Liquidity Matrix does not generate trading signals.
It does not tell you when to buy or sell.
It does not predict market direction.
It does not guarantee any outcome.
All trading decisions remain entirely with the user.
Always apply your own judgment and manage your own risk.
1. Overview
Liquidity Matrix is a multi-engine liquidity context indicator built around one idea: before you place a trade, understand where the liquidity is.
What it includes:
- Liquidity zones: probability-scored pivot clusters with volume intensity rendering
- Equal highs and equal lows: zones where retail stops stack at matching price levels
- Trend engine: directional band with accumulated sweep volume tracking
- Sweep detection: swing-level stop hunt identification with safe stop placement
- HTF liquidity levels: higher timeframe high/low levels as horizontal reference lines
- Dynamic trendlines: automatically detected diagonal support and resistance with touch volume
- Supply and demand zones: SMC-based structural zones with BOS conversion
- Weekend gap: Friday close reference with gap fill tracking
- Liquidity voids: fair value gaps with gradient layer fill tracking
- RSI divergence: price chart divergence detection with candle coloring and optional trailing stop
- Dashboard: live market context across all active engines
2. Liquidity zones
2.1 How they form
Liquidity zones are identified at confirmed pivot highs and lows. A pivot forms when a price extreme holds for a configurable number of bars on both sides. Each zone is scored using a probability model that weighs four factors: distance from current price, age of the zone, whether it is still fresh (untested), and the volume present at formation.
The result is a probability score from 0 to 100 displayed on the chart. A score above 70 appears in green. Between 40 and 70 it appears in gold. Below 40 it appears in red.
The fill intensity of each zone box scales automatically with the normalized volume at formation. Higher volume at creation means a fuller, more opaque box. This makes the visual weight of each zone reflect its actual significance without requiring manual evaluation.
Zones above price are BSL — buy side liquidity. These are where long stops and breakout orders sit. Zones below price are SSL — sell side liquidity. These are where short stops and breakdown orders sit.
2.2 Sweep markers
When price breaks through the bottom of a demand zone or the top of a supply zone, a circle marker appears on the chart — above the candle for a supply zone break (bearish), below the candle for a demand zone break (bullish). The zone fades to indicate the liquidity has been consumed. This is distinct from the swing sweep detection engine, which operates independently.
2.3 Settings
Pivot left and right bars control detection sensitivity. Fewer bars on the right produces faster confirmation but reduces accuracy. The volume filter removes zones that formed on below-average activity. Fresh zones only hides tested zones to keep the chart clean. Max zones controls how many active zones are held at once. The swept zone transparency and show swept toggle control what remains visible after a zone is consumed.
2.4 In practice
Look for price approaching an unmitigated zone with a high probability score on high-volume context. The higher the score and the more opaque the box, the more likely institutional interest was present at formation. When multiple zones stack closely — visible as a cluster — that price area has concentrated stop density. When a zone is swept and the circle marker appears, the liquidity at that level has been cleared. Stops are gone. The level loses its significance as a target.
Volume note: all volume values in Liquidity Matrix are expressed in the base currency of the trading pair. On BTC/USDT, the value shown is in BTC. On SOL/USDT, it is in SOL. To convert to USD equivalent, multiply by the current price. This applies to every volume label across all engines.
3. Equal highs and equal lows
3.1 How they form
Equal highs and equal lows (EQH/EQL) are zones where price has tested the same level on two or more separate occasions without closing through it. These represent areas where retail stop orders have accumulated in a predictable way. Matching swing highs create a resistance cluster with long stops resting above. Matching swing lows create a support cluster with short stops resting below.
The zones are rendered as filled boxes using a linefill between two lines. The box spans from the lower of the two matching pivots to the higher, creating a clearly visible area of concentrated liquidity.
3.2 Settings
Tolerance (ATR×) controls how precisely two pivots must match to qualify as equal. A lower tolerance requires a near-exact match. A higher tolerance allows approximate levels to be grouped. The minimum age prevents recent, unconfirmed pivots from forming zones too early. The removal mode determines whether a zone is removed when price touches the wick, the body, or the body at twice ATR distance.
3.3 In practice
An EQH/EQL zone directly above or below price is a high-probability target for a liquidity sweep. When price approaches such a level, consider whether the move has the characteristics of a stop hunt: a spike through the level, a strong close back inside, and a reversal. The volume label on each zone shows the total volume from both matching pivots combined — giving you a sense of how much liquidity is sitting there.
4. Trend engine
4.1 How it works
The trend engine calculates a rolling volatility band using ATR. When price is above the upper band, the trend direction is bullish. When price is below the lower band, it is bearish. The band tracks the dominant directional bias and changes color accordingly.
As the trend unfolds, peak and valley levels form at local turning points within the band. The engine accumulates the volume from sweep events at each of these turning points and displays it as a label on the band. The label shows the total volume cleared at that inflection point — a direct measure of how much liquidity was consumed as the trend moved through that level.
4.2 In practice
The trend direction is shown in the dashboard as bull or bear. Use this as your macro bias filter. Look for setups in the direction of the trend. The volume labels along the band show where the significant sweeps occurred — these points represent former liquidity levels that have already been consumed and are unlikely to act as targets again. The current edge of the band is where the next sweep may occur.
5. Sweep detection
5.1 How it works
The sweep detection engine monitors rolling swing highs and lows using a configurable lookback. When price spikes through a swing level on the wick and closes back inside, a sweep event is recorded. The wick must penetrate the level by at least a minimum ATR multiple. The close must reject with a minimum strength relative to the candle range. An optional EMA filter and cooldown period reduce false triggers.
Sweeps are classified as major or minor based on normalized volume. A sweep on above-average volume is marked with a solid triangle. A below-average sweep is marked with a hollow triangle.
When a sweep fires, a safe stop line is drawn at the sweep extreme — the wick tip. This is the correct location for a stop loss after a sweep, because the liquidity that was resting there has already been consumed. Placing a stop beyond a consumed sweep is placing it where no further stop hunt is likely to occur.
5.2 Settings
The wick minimum ATR multiple and minimum rejection percentage filter out weak sweeps. The EMA filter aligns sweeps with the broader trend. The cooldown prevents repeated triggers from the same level. Major sweep threshold (normalized volume) separates significant events from minor ones.
5.3 In practice
A major sweep on a significant EQH or liquidity zone is one of the cleanest setups in the indicator. Price took the liquidity, volume confirms the institutional event, and the safe stop line gives you a clear invalidation level. The smaller the distance between current price and the safe stop line, the more attractive the risk structure.
6. HTF liquidity levels
6.1 How they form
Higher timeframe high and low levels represent the largest clusters of resting liquidity on the chart. Monthly, weekly, daily, previous day, 4-hour, and 1-hour levels are supported. Each level is drawn as a horizontal line starting at the bar time of the HTF candle that created it and extending a configurable number of bars to the right.
The volume of the HTF candle is shown as a label at the right edge of the line. Higher volume on the HTF candle means more institutional activity was present when that level formed. Monthly levels have the highest opacity. Opacity decreases progressively as timeframe decreases, so the relative significance is immediately visible.
6.2 Settings
Each timeframe is individually toggleable. Line style (solid, dashed, dotted), width, and color are configurable. Extend bars controls how far the line projects to the right. The liquidity label can be hidden if a cleaner chart is preferred.
6.3 In practice
HTF levels are major liquidity magnets. Price tends to move toward unmitigated monthly and weekly highs and lows before reversing. When a HTF level aligns with a liquidity zone or EQH/EQL cluster, the confluence strengthens the case for a sweep at that level. The dashboard shows the nearest HTF level above and below current price so you can read the closest target without examining every line on the chart.
7. Dynamic trendlines
7.1 How they form
The trendline engine scans historical pivot highs and lows and finds the best-fit diagonal line across multiple touch points. A valid trendline requires at least two confirmed touches with minimal deviation, a score that weighs touch count, recency, tightness of touches, and span. The highest-scoring line for both support and resistance is drawn automatically every bar.
Volume accumulates at each confirmed touch point. The label at the end of the line shows the total accumulated volume across all touches — the more volume that has interacted with the trendline, the more significant it is as a structural level.
A channel fill renders between the support and resistance lines and changes color based on whether price is in the upper or lower half of the channel.
7.2 Settings
Pivot length controls detection sensitivity. Lookback bars limits how far back the engine searches. ATR length controls the volatility smoothing used for touch tolerance. Max violations allows lines to remain valid after a small number of wick pierces. Touch tolerance and max distance filter noise. Extend bars projects the lines forward.
7.3 In practice
A trendline with high accumulated volume and multiple tight touches is a strong structural level. When price approaches it from inside the channel, it is approaching a level where multiple institutional interactions have occurred. The volume label tells you how much. A break and retest of such a line — particularly with a sweep marker — is a high-quality location for a trade idea.
8. Supply and demand zones
8.1 How they form
Supply and demand zones are identified using structural pivot points. When a new swing high forms, a supply zone is created at that level. When a new swing low forms, a demand zone is created. Zones are sized using an ATR-based width multiplier. An overlap filter prevents duplicate zones from stacking in the same price area.
When price breaks through a zone boundary, the zone converts to a BOS line — a thin horizontal marker showing where market structure was broken. This mirrors the SMC (smart money concepts) approach where a broken supply zone confirms bullish structure, and a broken demand zone confirms bearish structure.
8.2 Settings
Swing length controls how many bars are required on each side of a pivot for zone formation. Zone width scales the height of each box relative to ATR. The midline (POI) can be toggled to show the point of interest at the center of each zone. History to keep limits the total number of visible zones. HH/LH/HL/LL labels mark each swing point with its structural context. BOS color is configurable separately from zone colors.
8.3 In practice
Supply and demand zones show you where price left an imbalance after a structural break. When a demand zone holds and price bounces from it, the zone remains valid. When price breaks through it, the BOS line marks where that structure was invalidated. These zones work best in combination with the liquidity zone engine — when both a liquidity zone and a demand zone overlap in the same price area, the confluence raises the probability of a significant reaction.
Note on terminology: liquidity zones and supply/demand zones are different concepts. Liquidity zones mark where stop orders are likely to be resting based on pivot volume and probability scoring. Supply and demand zones mark structural imbalances where price left quickly. Both can occur at the same level, but they represent different phenomena.
9. Weekend gap
9.1 How it works
The weekend gap engine records the last confirmed Friday close price and tracks whether price returns to fill that level during the following weekend and early week. On assets that trade continuously (crypto, 24/7 markets), the gap fill tracks whether price has revisited the Friday close since the weekend began.
The Friday close is drawn as a horizontal reference line extending forward into the week. The gap fill zone renders between the Friday close and price during the relevant window. A bullish gap (price above Friday close) renders in green. A bearish gap (price below Friday close) renders in red. When the gap is filled, it clears automatically.
9.2 Settings
Line style, width, and color are configurable. Extend days controls how far the Friday close line remains visible. Bull and bear gap colors are independently adjustable.
9.3 In practice
The Friday close acts as a liquidity magnet for early week price action. Markets frequently return to fill the weekend gap before continuing in the dominant direction. The dashboard shows the gap status (open, percentage, or filled) so you can monitor it without keeping the line visible on all timeframes. On CME futures charts, the gap window is literal — the market was closed and the gap in data is visible. On crypto charts, the market was open but institutional behavior around the weekly close creates the same magnetic effect.
10. Liquidity voids
10.1 How they form
A liquidity void (also called a fair value gap or imbalance) forms when price moves quickly in one direction across three consecutive candles, leaving a gap between the wick of the first candle and the wick of the third candle. No trading occurred in that gap area. Price tends to return to fill these zones as the market seeks balance.
The void is rendered as a gradient of 13 layers. Each layer fills individually as price touches it, changing to the filled color. This gives a precise view of how much of the void has been mitigated and how much remains unvisited. A volume label shows the total volume from the bars that created the void.
10.2 Settings
Mode controls whether all historical voids are shown or only the most recent N bars. Threshold (ATR×) sets the minimum gap size relative to ATR(144) — smaller values detect more voids, larger values filter to only significant imbalances. Bullish and bearish colors are independently configurable. The filled void color can be adjusted or filled voids can be removed entirely by toggling the show filled setting.
10.3 In practice
Unfilled voids below price are areas where no transactions occurred during an upward move. They act as potential support and pullback targets. Unfilled voids above price are areas where no transactions occurred during a downward move. They act as potential resistance and rally targets. When a void aligns with a liquidity zone or HTF level, the overlap represents an area with both structural significance and a gap to fill. The volume label on each void gives you a sense of how much liquidity was consumed when the void was created — larger voids on higher volume represent more significant imbalances.
11. RSI divergence
11.1 How it works
RSI divergence occurs when price and RSI move in opposite directions at swing points. A bullish divergence forms when price makes a lower low while RSI makes a higher low — momentum is increasing even though price is still falling, which often precedes a reversal upward. A bearish divergence forms when price makes a higher high while RSI makes a lower high — momentum is weakening even though price is still rising, which often precedes a reversal downward.
The engine detects these events mechanically using pivot-based RSI analysis. When a divergence is confirmed, a box is drawn directly on the price chart spanning all candles between the two pivot points. Circle markers appear at each pivot on the price candle. This keeps the divergence signal on the chart where the price action is, rather than requiring a separate RSI pane below.
Candle coloring reflects RSI momentum continuously. When RSI is above 50 and below the overbought level, candles are colored green — the gradient becomes more intense as RSI approaches the overbought threshold. The closer RSI is to overbought, the stronger the green. When RSI crosses the overbought level, coloring stops entirely — momentum is at an extreme and the gradient no longer adds information.
The same logic applies in reverse below 50. Candles are colored red with increasing intensity as RSI approaches the oversold level. When RSI crosses below the oversold threshold, coloring stops.
This means the gradient is always telling you how much room is left in the current momentum move — fully colored means RSI is just above 50 with a long runway ahead, faded means RSI is approaching an extreme. When the color disappears, the move is at full extension.
An optional trailing stop activates after a divergence is confirmed by an RSI 50 crossover. For a bullish divergence, the stop activates when RSI crosses back above 50 and trails below price using ATR distance. It closes when price breaks the stop level or RSI reaches the overbought threshold. For a bearish divergence, the stop activates on an RSI cross below 50 and trails above price until price breaks through or RSI reaches oversold.
Note: if the RSI divergence engine is disabled while a trailing stop is active, the stop line will disappear immediately without triggering a close. Do not disable the engine mid-trade while relying on the trailing stop as an active risk tool.
11.2 Settings
RSI length — period for the RSI calculation. Default 14.
Sensitivity — controls the pivot detection window. High detects more divergences using smaller pivots. Medium is the default. Low requires larger structural pivots and produces fewer but stronger signals.
Show bullish / show bearish — each direction can be toggled independently so you only see what is relevant to your current bias.
Bullish color / bearish color — the color used for the divergence box, circle markers, candle gradient, and trailing stop line.
RSI candle coloring — toggle the gradient candle coloring on or off without affecting divergence detection.
Overbought level — RSI level at which candle coloring stops on the upside. Default 70. Raise this to 80 for assets that tend to stay overbought for extended periods.
Oversold level — RSI level at which candle coloring stops on the downside. Default 30. Raise this to 20 for assets that tend to stay oversold for extended periods.
Trailing stop — toggle the trailing stop line on or off independently.
ATR length / ATR multiplier — control the sensitivity of the trailing stop. A higher multiplier gives the stop more room and reduces premature exits on volatile assets.
11.3 In practice
Use the divergence engine as a momentum context layer on top of the liquidity engines. A bullish divergence forming at an unmitigated liquidity zone or demand zone adds significant weight to the expectation of a reversal. A bearish divergence forming just below a major HTF level or supply zone suggests the move upward may be losing momentum before reaching that target.
The dashboard row shows the current divergence state — none, bullish, or bearish — so you can monitor it without inspecting the chart.
The candle gradient is the most immediately useful visual element. Watch for candles that are deeply colored — RSI has momentum but has not yet reached an extreme. When the gradient begins fading, RSI is extending. When it disappears entirely, RSI has crossed the overbought or oversold threshold and the move is at full extension. This is often where divergence begins to form on the next cycle.
For overbought and oversold levels: on assets like BTC or ETH that can sustain strong trends, consider raising the overbought level to 75 or 80 and lowering the oversold level to 20 or 25. This prevents the coloring from stopping too early during genuine momentum moves. On more volatile altcoins where RSI whipsaws frequently around the extremes, the default 70/30 setting works well.
12. Dashboard
The dashboard displays a live summary of all active engine data in one panel. It updates every bar.
Rows shown:
Header — indicator name and timeframe label.
Trend — current direction from the trend engine: bull, bear, or ranging.
Liq zones — count of active BSL and SSL zones in view.
Nearest BSL — closest buy side liquidity level above current price.
Nearest SSL — closest sell side liquidity level below current price.
Top zone — highest probability unmitigated zone and its score.
Safe SL — current safe stop level from the sweep detection engine.
ATR (14) — current ATR value for context.
HTF — section divider for higher timeframe levels.
HTF above — nearest higher timeframe level above price.
HTF below — nearest higher timeframe level below price.
Market — section divider for market context rows.
Gap — weekend gap status: off, open (direction and percentage), or filled.
TL dist — distance from the nearest active trendline in ATR multiples.
BOS/CHoCH — whether the supply/demand structure engine is active.
EQH/EQL — count of active equal high and equal low zones.
Engines — total number of active engines.
Divergence — current RSI divergence state: none, bullish, or bearish.
Anonycryptous — version reference.
Dashboard position and text size are configurable.
13. Settings overview
Liquidity zones
- Enable/disable master toggle
- Pivot left and right bars
- Volume filter threshold
- Dynamic zone width
- Show fresh only
- Show swept zones
- Swept zone transparency
- Max zones
- Bull and bear zone colors
- Midline toggle and color
- Swept zone circle marker toggle, colors, and size
Equal highs and equal lows
- Enable/disable master toggle
- Pivot lookback length
- Tolerance (ATR×)
- Minimum age
- Removal mode (wick, body, body×2)
- EQH and EQL zone colors
- Show volume label
- Show accumulated sweep volume
Trend engine
- Enable/disable master toggle
- Trend band length
- Bull and bear band colors
- Show major/minor sweep volume labels
- Major sweep normalized volume threshold
Sweep detection
- Enable/disable master toggle
- Swing lookback
- Minimum wick ATR multiple
- Minimum rejection percentage
- EMA filter toggle, length, and timeframe
- Cooldown bars
- Major sweep normalized volume threshold
- Volume filter toggle
- Bull and bear colors
- Marker size
Safe stop line
- Line style, color, and extension bars
- Glow toggle
- Auto-remove after N bars
HTF liquidity levels
- Enable/disable master toggle
- Individual toggles for monthly, weekly, daily, previous day, 4H, P4H, 1H, P1H
- Line style, width, and color
- Extend bars
- Show liquidity label
Dynamic trendlines
- Enable/disable master toggle
- Pivot length
- Lookback bars
- ATR length
- Max violations
- Touch tolerance (ATR×)
- Max slope (degrees)
- Max distance (ATR×)
- Extend bars
- Show channel fill
- Show volume on touch
- Support and resistance colors
- Line width and style
Supply and demand zones
- Enable/disable (controls zones and BOS simultaneously)
- Swing length
- Zone width (ATR×0.1)
- History to keep
- Supply and demand colors and outlines independently
- Show midline (POI)
- Midline color
- Show HH/LH/HL/LL labels
- BOS color and line width
Weekend gap
- Enable/disable master toggle
- Show gap fill and show Friday close line independently
- Extend line (days)
- Bull and bear gap colors
- Friday close line color, width, and style
Liquidity voids
- Enable/disable master toggle
- Mode (present / historical)
- Lookback bars (for present mode)
- Void threshold (ATR×)
- Bullish and bearish void colors
- Show filled voids
- Filled void color
- Show volume label
RSI divergence
- Enable/disable master toggle
- RSI length
- Sensitivity (high, medium, low)
- Show bullish and bearish independently
- Bullish and bearish colors
- RSI candle coloring toggle
- Overbought level (default 70)
- Oversold level (default 30)
- Trailing stop toggle
- ATR length and multiplier for trailing stop
Dashboard
- Enable/disable
- Position
- Size
14. How to use
The indicator does not prescribe a method. It provides context. How you use that context depends on your own approach. The following describes the logic behind combining the engines effectively.
Start with bias. The dashboard trend row shows the current directional bias. The nearest HTF levels above and below give you the macro targets. If the weekly high is the nearest HTF above price, the market may be running toward that level before reversing.
Identify the nearest liquidity. The nearest BSL and SSL rows in the dashboard show the closest unmitigated zones. These are the most likely near-term targets for price. A high-probability zone score adds weight to the expectation that price will visit that level.
Look for confluence. When a liquidity zone, an EQH/EQL cluster, an HTF level, and a void all align at the same price area, the confluence is significant. Price has multiple reasons to move to that location. Once it arrives, multiple forms of liquidity can be consumed in one move.
Read the sweep markers. When a sweep triangle fires, liquidity was taken. The safe stop line shows the consumed level. If the sweep occurred at a high-probability zone with volume confirmation, the conditions for a reversal are in place. The triangle type (solid for major, hollow for minor) tells you how significant the volume event was.
Use the gap. In the early part of the week, the weekend gap status is visible on the dashboard. If the gap is open and price is below the Friday close, price has a tendency to return to that level. This can serve as a short-term directional bias early in the week.
Check the voids. Unfilled voids represent areas the market has not yet returned to. If price is approaching an unfilled void from outside, it is approaching a zone of imbalance that the market may seek to fill. A void aligned with a swept zone or an EQH/EQL cluster adds structural weight to the expected reaction.
15. Notes
- Liquidity Matrix is a context indicator. It maps where liquidity is, where it has been taken, and what levels remain unmitigated. It does not generate entry signals.
- All volume values are in the base currency of the trading pair. BTC/USDT shows volume in BTC. SOL/USDT shows volume in SOL. Multiply by price to approximate USD value.
- The sweep detection engine uses swing-based pivots. The supply/demand BOS engine uses a separate pivot. These are independent systems with independent lookback settings.
- On lower timeframes, more engines running simultaneously increases computation. If the indicator is slow to load, reduce the number of active engines or lower lookback values.
- HTF levels require the chart timeframe to be lower than the HTF being referenced. A daily chart will not show daily HTF levels accurately.
- The dynamic trendline engine runs every bar. On very long chart histories with tight tolerances, this may produce slightly longer load times.
- The liquidity void threshold is relative to ATR(144). On assets with low average volatility, the default threshold may produce very few voids. Reduce the threshold to increase sensitivity.
- Weekend gap tracking works on all assets. On CME futures, the gap is a literal data gap. On crypto and 24/7 assets, the gap reflects the Friday close level as an institutional reference.
16. Disclaimer
This indicator by Anonycryptous is provided for educational and informational purposes only.
All outputs are based on historical price and volume data.
Past behavior does not guarantee future results.
Trading involves substantial risk of loss.
Use at your own discretion.
Indicator

Liquidity Echo[BullByte]LIQUIDITY ECHO
Liquidity Echo is an original indicator built on a purpose-written four-layer detection architecture where no layer produces a standalone signal and the detection logic is arranged as one unified model. It was built around one core idea: institutional money does not enter markets randomly. It enters at specific price levels where liquidity has been engineered, collected, and then abandoned. This indicator detects those exact moments, measures the market response, and presents a structured reversal entry with full visual trade management directly on the chart.
Each of the four detection layers was built to be structurally dependent on the others. The HTF compression zone does not produce a signal. The volume vacuum does not produce a signal. The sweep classification does not produce a signal. The pressure gradient does not produce a signal. None of these elements has any standalone output. A signal exists only when all four agree simultaneously, and the quality score that grades each signal is a composite function of how strongly each layer fired. Remove any single layer and the remaining three produce nothing. This structure is intended as one unified detection system rather than a collection of separate tools with unrelated outputs.
---
WHAT PROBLEM THIS SOLVES
Most retail traders face two specific problems. The first is identifying where a move is likely to begin before it has already happened. The second is knowing whether a sharp price spike at a key level is a genuine smart money reversal or a continuation trap.
Standard tools like RSI, MACD, or Bollinger Bands measure price behavior in isolation. They tell you what price has done but not why, and they do not account for where price sits relative to higher timeframe institutional order flow and supply and demand. Liquidity Echo reads the higher timeframe environment first, identifies where price is coiling inside a compression zone, and then waits for a specific sequence of events at that level before generating any signal.
---
THE ORIGIN AND OBSERVATION BEHIND THIS INDICATOR
Markets frequently spike through obvious support and resistance levels, trigger stop losses clustered just beyond those levels, and then reverse sharply in the opposite direction. This behavior is often repeatable. A large institutional buy order requires sellers. Those sellers are often concentrated just below visible support, where stop loss orders from long positions accumulate. A liquidity sweep through that level can absorb resting liquidity and is often followed by a reversal. This is the stop hunt mechanism that Liquidity Echo is built to identify.
What separates this indicator from any generic spike detector is the requirement that the sweep occur at a level where the higher timeframe is actively compressing. Compression at a level indicates institutional interest, because large participants cause range contraction when they absorb one side of order flow without allowing free price movement. A sweep through a compressed zone is treated as a stronger reversal context than a sweep through an ordinary pivot.
---
WHY THESE FOUR SPECIFIC LAYERS AND WHY THEY ARE ORIGINAL
Layer one is the HTF compression zone. The indicator measures the current higher timeframe bar range against the average of the three preceding bars. When the current bar is significantly narrower than recent history, the market is coiling and a zone is registered. Compression zones are color-coded by touch count. A fresh untested zone appears in soft purple. A zone tested once appears slightly lighter. A zone tested twice or more appears in orange, indicating stronger significance because repeated testing without a break can show that the level is being defended.
Layer two is the volume vacuum. Institutional stop hunts are frequently preceded by a quiet period where market participation drops. The vacuum condition requires that volume fall below a calibrated threshold for a minimum number of consecutive bars before the sweep fires. This helps filter out sweeps that occur on already active volume, which may behave more like continuation moves than reversals.
Layer three is the sweep classification. A spike sweep occurs when a candle wicks sharply through the zone boundary and closes back inside. A grind sweep occurs when price pushes slowly through the zone over several bars and then closes back across the boundary without any sharp wick. The spike path is further subdivided. A minor sweep is a small wick extension above the calibrated minimum. A major sweep extends beyond a configurable ATR multiple, indicating a more aggressive stop hunt. A flush sweep represents the most violent classification where a large cluster of stops was cleared in a single candle. Each level contributes differently to the signal quality score.
Layer four is the pressure gradient. This is a separate momentum-shift measurement rather than a standard oscillator. It measures the rate of change of a within-bar close location across three bars, derived from the delta concept used in options market microstructure analysis and adapted here as a momentum shift detector timed specifically to the sweep event. Each bar's delta is computed as the ratio of where the close falls within the high-low range, normalized between negative one and positive one. The gradient is the rate of change in this delta from two bars ago to the current bar. A positive gradient on a potential long signal means buying pressure was already accelerating across three bars even while price was spiking down through the zone. This supports the reversal context before the entry candle closes.
The sweep classification is not a wick ratio filter applied to any candle. It measures wick extension in ATR units specifically relative to a compressed higher timeframe zone boundary, which is a combined spatial and volatility measurement that requires both the zone and the ATR context simultaneously to compute. The volume vacuum is not a simple volume moving average crossover. It uses a coefficient of variation derived threshold that adapts to whether the instrument has session-structured volume or continuous volume flow, a behavioral classification the indicator measures itself in real time.
---
AUTO-CALIBRATION ENGINE
The auto-calibration engine is the original technical contribution that makes the four-layer system viable across all asset classes without manual configuration. Many tools that use ATR thresholds, volume ratios, wick filters, or compression logic rely on manual settings or presets, either through a fixed number or an asset class preset. This indicator reduces that requirement by adapting its thresholds to the chart's own behavior.
The engine measures three behavioral properties of the current chart at runtime.
The wick-body ratio is the average total wick length divided by the average body size over the calibration window. Different instruments can behave very differently. Some show sharp wick-driven sweeps, while others tend to grind through levels more slowly. The engine uses this measurement to set the minimum wick requirement for spike detection and to decide whether grind mode should activate automatically.
The volume coefficient of variation is the standard deviation of volume divided by its mean. A high coefficient means volume is session-structured with clear spikes and quiet periods. A low coefficient means volume flows continuously. This calibrates the vacuum threshold and the volume averaging window specific to the instrument's own behavior pattern.
The ATR mean percentile measures where current volatility sits within its recent historical range. This calibrates the compression sensitivity so the narrowing threshold adapts to instruments that are normally tight versus instruments that are normally wide.
The Sensitivity Bias input is the only manual judgment required. Conservative tightens all thresholds uniformly for fewer, higher-conviction signals. Neutral applies thresholds exactly as measured. Aggressive loosens thresholds for conditions where more signals are preferred. The bias scales every derived threshold by a fixed multiplier so the relationship between all layers remains internally consistent regardless of the setting chosen.
---
SIGNAL QUALITY SCORING
Every signal that passes all four confirmation layers receives a quality score from zero to ten built from four components.
Zone compression strength contributes up to three points. A ratio below 0.55 between the current HTF range and its three-bar average scores three points. Below 0.68 scores two. Below the effective narrowing threshold scores one.
Sweep severity contributes up to three points. A flush sweep scores three. A major sweep scores two. A minor or grind sweep scores one.
Pressure gradient magnitude contributes up to two points. A gradient above 0.55 in absolute value scores two. Above 0.25 scores one.
Zone touch count contributes up to two points. A zone tested twice or more scores two. Tested once scores one. An untested zone scores zero on this dimension.
Scores from eight to ten produce a PRIME grade. Six to seven is HIGH. Four to five is MED. Below four is LOW. A gold diamond marks PRIME signals on the chart. A green circle marks HIGH. A yellow square marks MED. A gray cross marks LOW. Traders who want fewer signals can focus on the higher-grade markers.
---
HOW TO READ WHAT APPEARS ON THE CHART
The EMA line renders as two overlapping plots. A wide semi-transparent outer glow and a solid thinner inner line. Both turn green when price is above the EMA and red when below. Long signals only fire above the EMA. Short signals only fire below it. The EMA is a directional filter, not a signal source.
Compression zones appear as filled rectangular boxes spanning the full higher timeframe bar range at the moment of detection. Fresh zones are soft purple. Zones tested once are a slightly lighter purple. Zones tested twice or more shift to orange.
Volume vacuum bars carry a very faint yellow background tint on candles where the low-volume precondition is active. The tint is intentionally near-invisible at 96 percent transparency so it provides context without competing with price action. It marks where the trap was being set, not where it fired.
Grind sweep markers appear as small orange triangles. An upward triangle below the bar marks a bullish grind sweep detected in progress. A downward triangle above marks a bearish grind sweep. These appear before the commitment candle confirms the signal. They are early warning markers only.
When a signal fires, a label appears below the bar for a long entry and above the bar for a short entry. MINIMAL mode shows direction, grade, and score. DETAIL mode adds sweep type, zone price, and all trade levels.
The trade forecast visualization draws immediately on signal confirmation. A blue line marks entry. A red line marks the stop loss. Two dashed green lines mark Target 1 and Target 2. A light green box fills the entry to Target 1 zone. A lighter green box fills the Target 1 to Target 2 zone. A light red box fills the stop to entry zone. The first green box deepens in shade when Target 1 is hit. The second deepens when Target 2 is hit. The stop line updates in real time when trailing stop or breakeven is active.
The trailing stop renders as a dual-layer line matching the EMA visual style. Green for a long trail, red for a short trail. It ratchets in the direction of the trade and never moves against the position.
TRADE ANALYSIS - CHART OVERVIEW
BTC Perpetual Futures Contract
BINANCE:BTCUSD.P
Time Frame 5 mins
WHAT THE SIGNALS TELL US:
This chart demonstrates both long and short reversal opportunities in the same trading session. The first signal was a LONG entry triggered by a minor spike sweep below zone 76079.9, graded MED 5/10 quality, which reached both targets in the example shown. The second signal was a SHORT entry triggered by a grind sweep above zone 76577.6, graded MED 4/10 quality, after price failed to sustain the rally and began reversing. Multiple orange triangle markers throughout the chart show where the grind sweep detection algorithm identified slow institutional accumulation or distribution patterns that preceded directional moves. The yellow square quality symbols indicate both signals were medium-grade setups-not the highest conviction (which would show gold diamonds), but sufficient quality to warrant entries with proper risk management.
WHAT THE DASHBOARD ELEMENTS MEAN:
The dashboard provides real-time market context that helps evaluate signal quality and trade conditions. The STATE indicator shows whether the system is scanning for new setups or managing an active position. HTF ZONE tracking displays how many compression zones are currently being monitored-these are the price levels where institutional liquidity is likely to accumulate. COMPRESS indicates whether price range is narrowing (coiling energy) or expanded (post-move). ATR% measures current volatility relative to recent history: HOT means explosive conditions favorable for hitting targets, FLAT means low volatility where moves stall. VACUUM detects when volume drops below normal before a sweep, signaling institutional preparation. VOL RATIO compares current bar volume to the rolling average-spikes confirm that stops were actually hunted. SWEEP classification (MINOR, MAJOR, FLUSH, GRIND) tells you how aggressively the level was cleared. GRADIENT measures momentum direction-positive favors longs, negative favors shorts. TREND with EMA shows the macro directional filter-price above EMA enables longs, below enables shorts. CALIBRATION LIVE means thresholds auto-adjust to the current instrument's behavior, while GRIND mode activates when the system detects slow-push sweep patterns. Quality scoring combines all these factors to produce the 0-10 grade that appears on each signal label.
---
THE DASHBOARD PANEL
The dashboard sits in the top right corner of the chart and displays the complete state of the indicator at the current bar in real time. It is organized into thirteen rows.
The header row shows the indicator name, the author name, the current sensitivity bias setting, and whether calibration is live or locked.
The state row shows whether the indicator is scanning for a setup or has an active trade. When active it shows LONG ACTIVE or SHORT ACTIVE . The right side of this row shows the stop loss distance in price units and ATR multiples.
The HTF zone row shows whether the zone system is active and how many zones are currently tracked.
The compression row shows the current compression strength as NONE, LIGHT, MEDIUM, or STRONG . The right side shows the current ATR percentile with a HOT, NORM, or FLAT label indicating whether volatility is elevated, normal, or suppressed.
The vacuum row shows whether the volume vacuum condition is currently active and displays the current volume ratio as a multiple of the rolling average.
The sweep row shows the current sweep classification if a sweep is pending or the classification of the most recent signal if a trade is active. The gradient value is displayed on the right with green coloring for positive, red for negative, and white for near-zero.
The quality row shows the visual quality bar and the grade with score when a trade is active. The quality bar uses simple characters to show the score at a glance.
The TP1 and TP2 row shows exact target prices when a trade is active and updates to show HIT when each level is reached.
The stop row shows the current stop loss price and whether it is initial, trailing, or moved to breakeven.
The position row shows what percentage of the position remains open after any partial close at Target 1.
The trend row shows whether the macro bias is BULL or BEAR based on the EMA and displays the current EMA value.
The sweep expiry row shows how many bars remain in the commitment window if a sweep is pending but not yet confirmed.
The calibration row shows whether the auto-calibration engine is LIVE or LOCKED , and shows the grind mode status and the configured stop loss ATR multiplier.
---
A WALK-THROUGH OF A COMPLETE SIGNAL
Consider a bullish example. The higher timeframe has been compressing for several bars. The compression zone is registered and appears as a purple box on the chart between two price levels, for example 42200 and 42350 on a Bitcoin five-minute chart. Price approaches from above and enters the zone. Volume begins to drop across two or three bars, triggering the vacuum condition and tinting those bars with a faint yellow background.
On the next bar price spikes sharply below the bottom of the zone to 42080, creating a wick of approximately 120 points below 42200. The wick extends 0.9 ATR below the zone boundary, qualifying as a MAJOR sweep. The candle body closes back at 42210, inside the zone. The pressure gradient at this point reads positive 0.38, meaning buying pressure has been accelerating across the last three bars despite the downward spike.
All four conditions are now satisfied: compression zone present, volume vacuum active, MAJOR sweep detected, gradient positive and above threshold. The sweep state is recorded. The dashboard updates to show SWEEP : MAJOR and the remaining bars in the commitment window begin counting down.
On the following bar a bullish candle forms. It has a body of 85 points, which exceeds the minimum body size requirement relative to ATR. Volume on this candle is 1.2 times the rolling average, above the 0.65 minimum. The candle closes at 42310, above the zone low of 42200. All commitment candle conditions pass. The signal fires.
A label appears below that bar reading LONG HIGH 7/10. A green circle shape appears above the bar marking a HIGH grade signal. The trade forecast boxes appear: a green box from 42310 to 42510 for Target 1 region, a lighter green box from 42510 to 42660 for Target 2 region, and a red box from 42310 down to 41910 for the stop zone. The entry line is drawn at 42310. The stop line is drawn at 41910. Target 1 is drawn at 42510. Target 2 is drawn at 42660.
The dashboard updates to show LONG ACTIVE, the exact stop and target prices, the quality grade of HIGH at 7 out of 10, and POS REMAIN at 100 percent.
When price reaches 42510 the TP1 box deepens in shade. The dashboard shows HIT on the TP1 row. POS REMAIN drops to 50 percent. If breakeven is enabled the stop line on the chart moves up to 42310 and the dashboard stop type changes to BREAKEVEN .
When price reaches 42660 the TP2 box deepens. The dashboard shows HIT on the TP2 row. The trade closes. The lines and boxes move into history if the historical display option is enabled, fading slightly to distinguish them from any new active trade.
Chart Example of a Long "High" Grade Signal full lifecycle
BTC Perpetual Futures Contract
BINANCE:BTCUSD.P
Time Frame 5 mins
IMAGE 1: SIGNAL GENERATION & PRE-CONDITIONS
What Triggered the Signal: A grind sweep was detected at zone 77699.7. Price slowly pushed below the compression level over several bars (orange triangle marker visible on left side), then reversed with a commitment candle. Dashboard shows SWEEP: GRIND with GRADIENT: 0.54 confirming positive momentum shift. VACUUM: NO indicates volume was not in vacuum state during this particular signal. The sweep window counter shows 7/8 bars remaining, meaning the indicator is waiting for final commitment candle confirmation before entering the trade.
Pre-Condition Dashboard Readings:
COMPRESS: NONE - No active compression detected at this moment
ATR%: 42.9% NORM - Volatility in normal range
VACUUM: NO - Volume condition not active
VOL RATIO: 1.51x - Volume 1.51 times the average
GRADIENT: 0.54 - Strong positive momentum
TREND: BEAR - EMA at 77762.5, price below (note: this signal appears to have fired despite bearish EMA, possibly EMA filter was disabled or price was transitioning)
IMAGE 2: TRADE SETUP & ACTIVE MANAGEMENT
Trade Entry Confirmation: The commitment candle confirmed, and the trade entered. Dashboard now shows STATE: LONG ACTIVE, indicating the position is open. Signal label displays " LONG HIGH 6/10 Sweep: GRIND Zone: 77723.0" with green circle quality marker (HIGH grade).
Stop Loss & Target Calculation:
Entry Zone: 77838.0
Stop Loss: 77511.2 (placed 2 ATR below entry)
SL Distance: 327.5 points (2 ATR) shown in dashboard as "SL DIST: 327.5 (2 ATR)"
Target 1: 78166.2 (327.5 points profit, 1 R) - 50% position close
Target 2: 78411.8 (573 points profit, 1.5R) - remaining 50%
Active Trade Dashboard:
STATE: LONG ACTIVE
QUALITY: ||||||||.... (8 bars filled) GRADE: HIGH 6/10
TP1 (50%): 78166.2 | TP2 (50%): 78411.8
STOP: 77511.2 | TYPE: INITIAL
POS REMAIN: 100% (full position still open)
TREND: BULL (EMA 21: 77774.8) - price has crossed above EMA confirming bullish bias
VACUUM: ACTIVE (yellow highlight visible on some bars)
VOL RATIO: 0.09x - Low volume, waiting for high volume to confirm institutional participation
GRADIENT: 0.66 (Strong positive momentum)
SWEEP EXP: In Trade (window closed, position active)
IMAGE 3: TRADE PROGRESS & ACHIEVEMENT
Target Achievement: Price rallied from the entry at 77838 and reached 78,411.0 (shown in the top right), representing a 573-point profit. The green profit boxes are fully filled showing price traveled through both reward zones. Purple horizontal line visible near 78,390 level marking current price or a new resistance zone.
Post-Trade Dashboard:
STATE: SCANNING (trade closed, position exited)
HTF ZONE: ACTIVE with COUNT: 1 zones being tracked
COMPRESS: NONE
ATR%: 9.1% FLAT - volatility compressed significantly after the move
VACUUM: ACTIVE - volume vacuum condition now present (post-move exhaustion)
VOL RATIO: 0.53x - volume dropped to 53% of average confirming the move is complete
TREND: BULL (EMA 21: 78227.4) - price well above EMA
Quality/Grade/TP fields: - (cleared because no active trade)
In the example shown, both level 1 (78166.2) and level 2 (78411.8) were touched. The trade reached approximately 1.0R at TP1 and 1.5R at TP2, with 50% of the position closed at each level. The grind sweep at 77723.0 identified the liquidity absorption area that preceded the rally. The current price of 78,390.0 represents approximately 573 points of illustrative move from the entry.
---
RECOMMENDED SETTINGS BY MARKET
For cryptocurrency on a 5-minute chart, the recommended HTF reference is 15 minutes. The EMA can be set to 21 for fast trend alignment. The sensitivity bias can start at NEUTRAL and be adjusted to AGGRESSIVE on high-liquidity pairs during active sessions.
For equity index futures on a 5-minute chart, the recommended HTF reference is 30 minutes or 1 hour. The EMA can be set to 50. The sensitivity bias works best at CONSERVATIVE or NEUTRAL because index instruments tend to grind slowly and produce more noise with aggressive settings.
For forex major pairs on a 15-minute chart, the recommended HTF reference is 1 hour. The grind sweep path is particularly effective on forex due to the low wick-body ratio of most major pairs. The EMA at 50 provides clean directional filtering.
For equities on daily charts , the recommended HTF reference is 4 hours. The calibration window can be increased to 200 bars for more stable threshold measurement on slower instruments.
The indicator works on any timeframe and any asset class without requiring manual configuration because the auto-calibration engine reads the instrument's behavior directly. The recommended settings above are starting points for users who prefer guidance. The behavior metrics displayed in the dashboard can help users understand whether their current settings are appropriate for the instrument they are trading.
---
TRADE MANAGEMENT DEFAULTS AND HOW TO ADJUST THEM
The default stop loss distance is two ATR. This is intentionally wider than typical scalping tools to accommodate the nature of liquidity sweep entries, where price frequently makes one final push against the position before reversing. A stop placed too tightly below or above a sweep zone will be taken out by the very move the signal is identifying.
Target 1 defaults to two ATR from entry, producing a one-to-one risk-to-reward on the first half of the position. Target 2 defaults to 3.5 ATR, producing a one-to-1.75 risk-to-reward on the remaining position. By default fifty percent of the position is closed at Target 1 and fifty percent runs to Target 2. This split can be adjusted between ten and ninety percent in the settings.
The breakeven option moves the stop to the entry price once Target 1 is hit. This eliminates all risk on the remaining position after the first target is reached.
The trailing stop option activates a ratcheting stop that follows the lowest low of the last four bars for long trades and the highest high for short trades, minus or plus the configured ATR offset. The trail can start immediately at entry or only after Target 1 is hit, depending on the Trailing Starts After setting.
The timeout setting closes the trade if Target 1 is not reached within the configured number of bars. This prevents capital from being tied up in stalled setups indefinitely.
The minimum bars between signals setting prevents back-to-back entries on the same directional impulse. At the default of eight bars on a five-minute chart, this means a new signal in the same direction cannot fire within forty minutes of the previous one.
---
HOW TO USE THE TWO-BAR CONFIRMATION OPTION
The two-bar confirmation setting requires that both the commitment candle and the candle immediately before it close in the signal direction and on the correct side of the zone. This setting is intended for instruments that produce many false commitment candles on the first bar of a potential reversal. On indices and slower-moving instruments enabling this option reduces entries by approximately thirty to forty percent but eliminates most of the premature entries where the reversal fails on the first bar.
The cost of this setting is one bar of lag. On a five-minute chart this means the entry is delayed by five minutes from the initial sweep detection. On a one-minute chart this delay is acceptable for intraday scalping. On a fifteen-minute chart the delay may cause significant slippage relative to the optimal entry zone. Users should test this option on their specific instrument and timeframe before relying on it.
---
WHAT THE GRIND PATH DETECTS AND WHY IT EXISTS
The grind sweep path exists because not all instruments produce sharp spike wicks through key levels. Equity indices in particular tend to slowly close beyond a level across multiple bars before reversing. A traditional wick-based detection system would miss these sweeps entirely because no individual candle has a wick large enough to qualify.
The grind path looks back a configurable number of bars to check whether price was outside the zone boundary during any of those bars. If price was beyond the zone and the current bar closes back inside with a body in the reversal direction and the gradient confirms the momentum shift, the condition qualifies as a grind sweep. It receives the same treatment as a spike sweep from the commitment candle onward.
The orange triangle markers on the chart show where grind conditions were detected, which is useful for understanding how often this path fires on your specific instrument versus the spike path.
---
ALERTS
Eight alert conditions are available . The Long Signal and Short Signal alerts fire when a full confirmed entry is generated. The Bull Sweep and Bear Sweep alerts fire when a sweep is detected but before the commitment candle has confirmed. These earlier alerts allow traders to watch for the setup manually and decide whether to act. The Target 1 Hit and Target 2 Hit alerts notify when each level is reached. The Breakeven alert fires when the stop is moved to entry. The Trailing On alert fires when the trailing stop activates.
All alerts use PulseWire's standard alert condition system. To set an alert, add the indicator to your chart, click the alert creation button, and select any of the eight named conditions from the dropdown. Alerts can be set to once per bar close on the signal conditions to ensure only confirmed bars trigger notifications.
---
IMPORTANT NOTES ON TIMEFRAME ALIGNMENT
The HTF reference should always be set to a timeframe higher than the chart you are viewing the indicator on. Setting the HTF reference to the same timeframe as the chart produces redundant zone detection that does not add higher timeframe context. Setting it to a lower timeframe is not valid and should be avoided.
The indicator requires a minimum number of bars equal to the calibration window before any signals are generated. At the default calibration window of 100 bars, the first 100 candles on any chart will show no signals while the engine builds its behavioral measurements. This is indicated in the code by the ready condition and is by design.
On very low timeframes such as one-minute charts, the calibration window represents only about 100 minutes of data. Users on one-minute charts may want to increase the calibration window to 200 bars for more stable threshold measurement across a full session.
---
DISCLAIMER
This indicator is published for educational and informational purposes only. Nothing in this publication or in the indicator's output constitutes financial advice, investment advice, or a recommendation to buy or sell any financial instrument. All trading involves substantial risk of loss. Past signal performance visible on historical charts does not guarantee or predict future results. The visual trade management levels shown on the chart are illustrative and do not represent guaranteed exit points. Slippage, spread, and market conditions will affect actual trade outcomes. Always apply your own analysis and risk management before entering any trade. Never risk more than you can afford to lose. Indicator

Indicator

Delta Absorption Scanner[MarkitTick]💡 This advanced analytical tool is engineered to bridge the gap between price action and order flow dynamics by identifying critical moments where market participants encounter significant liquidity barriers. In the modern trading landscape, volume alone is often insufficient to determine market direction. The Delta Absorption Scanner provides a sophisticated lens through which traders can observe the interaction between aggressive market orders and passive limit orders, specifically highlighting "Absorption" events. These events occur when high-volume "Effort" fails to produce a proportional price "Result," signaling a potential exhaustion of the current trend or a hidden accumulation/distribution phase. By synthesizing volume delta, candle spread, and multi-timeframe context into a unified interface, this script empowers traders to make decisions based on the structural integrity of the market rather than superficial price movements.
✨ Originality and Utility
The primary utility of this script lies in its multi-layered approach to market analysis, moving beyond simple oscillators or trend-following moving averages.
Unlike standard volume indicators that merely report total activity, this scanner differentiates between buying and selling pressure by calculating candle-based delta, allowing for a more granular view of market intent.
The script introduces a unique "Scanner" architecture that monitors four distinct high-timeframe (HTF) perspectives simultaneously. This provides an institutional-grade view of the trend without the need to constantly switch chart intervals.
It incorporates a proprietary "Absorption" detection logic that correlates delta percentage with the physical spread of the candle. This identifies "hidden" strength or weakness that is often invisible to the naked eye.
The inclusion of Fair Value Gap (FVG) and Swing High/Low detection within the dashboard creates a comprehensive "Confluence Engine," ensuring that short-term delta signals are validated by higher-level market structures.
By utilizing non-repainting multi-timeframe logic (security calls with index offsets), the indicator maintains the highest standards of data integrity, making it suitable for both discretionary trading and systemic strategy development.
🔬 Methodology and Concepts
The core logic begins with the calculation of "Candle Delta," which determines the dominant force within a single bar based on its polarity. If a candle closes above its open, the entire volume is attributed to positive delta; if it closes below, it is negative.
The indicator then calculates the "Spread," defined as the absolute distance between the high and low of the bar. This metric is critical for the "Effort vs. Result" analysis.
Absorption is mathematically flagged when a candle exceeds the user-defined "Minimum Delta %" threshold but fails to generate significant directional movement, or when the spread is disproportionately small compared to the volume injected.
The Support (S3) and Resistance (R3) levels are derived from the most recent significant high-volume or high-delta bars, creating dynamic zones that reflect where institutional liquidity was last engaged.
Multi-Timeframe Integration: The script utilizes the request.security() function with a bar offset. This ensures that the data displayed from higher timeframes is "confirmed" and prevents the visual bias known as repainting.
Trend determination on the dashboard is calculated using a proprietary relationship between the current price and the 14-period smoothed high/low averages, providing a stable "Trend Bias" for each monitored timeframe.
● Main Feature Components
• Volume Delta labels
The script places dynamic labels above or below candles that exhibit significant delta. These labels display the Delta percentage, helping traders identify where "Climax" volume is occurring.
• Spread Analysis (S)
Next to the Delta % is a value representing the "Spread." This allows for an immediate visual comparison: High Delta with Low Spread suggests passive absorption (reversal), while High Delta with High Spread suggests aggressive momentum (continuation).
• Multi-Timeframe (HTF) Dashboard
A sophisticated table displayed on the chart that aggregates data from up to four higher timeframes. This dashboard is the "brain" of the scanner, providing a bird's-eye view of the market's broader health.
🎨 Visual Guide
Positive Delta Labels: Displayed as green labels with white text. These signify bars where buying volume was dominant.
Negative Delta Labels: Displayed as red labels with white text. These signify bars where selling volume was dominant.
Neutral/Spread Labels: Displayed in a dark neutral color to represent bars where the spread is being analyzed without a significant delta bias.
Dashboard - Trend Column: Displays "UP" in green for bullish regimes and "DN" in red for bearish regimes for each of the four HTF settings.
Dashboard - S3/R3 Column: Displays the price of the nearest significant support or resistance level identified by the script.
Dashboard - Distance % Column: A dynamic calculation showing how far the current price is from the S3/R3 levels. Green indicates distance from support, while red indicates distance from resistance.
Dashboard - FVG Column: Displays "+FVG" in green if a bullish Fair Value Gap exists on that timeframe, or "-FVG" in red if a bearish gap is present.
Dashboard - Swing Column: Identifies if the current price is near a local "Top" or "Bottom" based on pivot logic.
📖 How to Use
Step 1: Identify "Effort" on the Chart. Look for a large Delta % label (e.g., >20%) appearing at a local high or low.
Step 2: Analyze the "Result." If the Delta is high (Green/Positive) but the candle spread (S) is small and price fails to move higher, this is a classic Bearish Absorption signal. Limit sellers are "absorbing" the market buyers.
Step 3: Consult the Dashboard. Check if the HTF trends are in alignment. For a short trade based on Bearish Absorption, you ideally want to see "DN" trends on higher timeframes and the presence of a "-FVG."
Step 4: Proximity to S/R. Use the "Dist %" column to ensure you are not selling directly into a higher-timeframe support (S3) or buying directly into resistance (R3).
Step 5: Confluence. The highest probability trades occur when a Delta climax appears at a dashboard-confirmed Swing Top/Bottom in the direction of the HTF trend.
⚙️ Inputs and Settings
Positive/Negative Delta Color: Customizes the aesthetic of the bull/bear labels to match your chart theme.
Max Labels on Chart: Controls the lookback period for visual labels to maintain chart performance and reduce clutter.
Minimum Delta % to Show: A sensitivity filter. Higher values (e.g., 50%) will only show the most extreme volume events, while lower values (e.g., 10%) provide more frequent signals.
Show Spread (S): Toggles the visibility of the candle spread value within the labels.
HTF 1-4 Settings: Allows the user to define which timeframes the dashboard should track (e.g., 1H, 4H, Daily, Weekly).
Dashboard Position: Permits the user to move the table to different corners of the chart for better visibility.
🔍 Deconstruction of the Underlying Scientific and Academic Framework
• The Law of Effort vs. Result
Based on the principles established by Richard Wyckoff, this indicator quantifies "Effort" as Volume Delta and "Result" as Price Spread. In a balanced market, increased effort should lead to an equivalent result. When these two diverge (Anomalies), it suggests a change in market character.
• Auction Market Theory (AMT)
The indicator utilizes AMT principles by identifying areas of "High Volume Nodes" (represented by S3/R3) where the market has found value or met significant opposition. The "Distance %" feature measures the market's deviation from these nodes, which often acts as a mean-reversion catalyst.
• Order Flow Imbalance
While traditional indicators use price as a lagging derivative, the Delta Absorption Scanner attempts to lead price by observing the imbalance between aggressive market participants. By isolating the delta within each bar, the script identifies where one side of the "Auction" is becoming exhausted.
• Statistical Significance of Spread
The inclusion of spread analysis is rooted in statistical volatility measurements. A narrow spread during high volume indicates a high density of limit orders (Liquidity), which is a precursor to price reversals or significant breakouts once the liquidity is exhausted.
• Multi-Timeframe Structuralism
The scanner's architecture is based on the theory that lower-timeframe "noise" is resolved by higher-timeframe "structure." By mapping FVGs and Swings across four dimensions, the script applies a fractal analysis to the current bar's delta events.
⚠️ 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

Indicator

Naive Bayes DNA Heatmap | GainzAlgoThe Naive Bayes Volume Heatmap is a predictive analytical suite that moves beyond traditional lagging indicators. While a standard RSI or MACD simply tells you where price has been, this system uses Gaussian Machine Learning to determine the statistical probability of where price is going.
By analyzing the Volume of a candle, the internal distribution of volume, delta, and price force, the indicator visualizes market sentiment as a multi-layered heatmap. It allows traders to see whether the current price action is backed by institutional flow or is simply noise.
Core Logic: The Naive Bayes Engine
The brain of the system is a Gaussian Naive Bayes (GNB) classifier. This is a machine learning algorithm that calculates the probability of an event based on prior conditions.
How it Learns
The model continuously "trains" itself on a lookback window (default 500 bars). It analyzes two primary features:
Intensity (Feature 1): Relative Volume (1m mode) or Net Delta (Footprint mode).
Directional Force (Feature 2): The relationship between price spread and volume (1m mode) or POC Distance (Footprint mode).
Here is the self contained function that does the heavy lifting of the probability analysis:
f_naive_bayes(float feat1, float feat2, float target, int len) =>
m1_f1 = ta.sma(target > 0 ? feat1 : na, len), m1_f2 = ta.sma(target > 0 ? feat2 : na, len)
m0_f1 = ta.sma(target <= 0 ? feat1 : na, len), m0_f2 = ta.sma(target <= 0 ? feat2 : na, len)
v1_f1 = math.pow(ta.stdev(target > 0 ? feat1 : na, len), 2), v1_f2 = math.pow(ta.stdev(target > 0 ? feat2 : na, len), 2)
v0_f1 = math.pow(ta.stdev(target <= 0 ? feat1 : na, len), 2), v0_f2 = math.pow(ta.stdev(target <= 0 ? feat2 : na, len), 2)
p1 = nz(ta.sma(target > 0 ? 1.0 : 0.0, len), 0.5)
l1 = f_pdf(feat1, nz(m1_f1), nz(v1_f1)) * f_pdf(feat2, nz(m1_f2), nz(v1_f2)) * p1
l0 = f_pdf(feat1, nz(m0_f1), nz(v0_f1)) * f_pdf(feat2, nz(m0_f2), nz(v0_f2)) * (1.0 - p1)
prob = nz(l1 / (l1 + l0 + 0.000001), 0.5)
This function is the engine of the indicator. It implements a Gaussian Naive Bayes Classifier directly in Pine Script to calculate the real-time probability of a bullish move.
Here is a breakdown of how this code processes market data:
Class Separation (The "M" and "V" Variables)
The function splits historical data into two buckets based on the target (Price Action):
Bucket 1 (Bullish): Data from bars that closed green.
Bucket 0 (Bearish): Data from bars that closed red.
It then calculates the Mean (m) and Variance (v) for each feature within those buckets. This creates two distinct "profiles"—essentially a mathematical fingerprint of what a Bullish bar looks like versus a Bearish one.
Bayesian Inference (The Result)
Finally, it applies Bayes' Theorem to combine these likelihoods with the Prior Probability (p1)—which is simply the historical win rate of green bars over the lookback period.
The final prob is a normalized value between 0 and 1. If the result is 0.85, the model is signaling an 85% statistical probability that the current market conditions align with historical bullish reversals.
The Math
As discussed above, the engine uses the Probability Density Function (PDF) to map these features onto a bell curve. It asks: "In the past, when we saw this specific volume intensity and this specific price force, how often did the next bar close green versus red?"
The result is a Win Probability %. If the probability is >50%, the bias is Bullish; <50% is Bearish.
The Heatmap
The Heatmap is a vertical stack of 20 independent probability layers.
Multi-Horizon Smoothing: Each layer represents a different generation of the Naive Bayes calculation, ranging from ultra-fast (5-bar smoothing) to long-term (100-bar smoothing).
Specialized Features
The Power Index (The White Line)
The Power Index is your Confluence Meter . It scans all 20 layers of the data and counts how many are currently signaling a trend above a 60% threshold.
A spiking Power Index indicates that the trend is synchronizing across all time horizons, a high-probability entry signal.
Footprint Mode vs. 1-Minute Mode
1-Minute Precision: When active, the script uses request.security_lower_tf to deconstruct the current chart bar into 1-minute slices. It finds the "hidden" intent inside the candle that standard indicators miss.
Footprint Analysis: This mode hooks into raw Exchange Order Flow. It calculates Aggressive Buying vs. Aggressive Selling to feed the Naive Bayes engine the most "raw" data possible.
The sidebars: Unique to Footprint mode, these wide neon bars appear to the right of the heatmap.
Real-Time Volume Scaling: The bars grow and shrink based on the current bar's Buy/Sell volume ratio.
Divergence Spotting: If the Heatmap is bright Aqua (Bullish) but the Pink Sell Box is 80% full, you are witnessing Absorption, big players are absorbing the selling, often leading to a massive squeeze.
How to Use the Suite
The Elite Entry
Identify the Bias: Check the NB Probability in the table. You want to see >65% for a high-probability trade.
Confirm the Match: Ensure the heatmap layers are expanding (moving from the dark center toward the bright edges).
Check the Power Index: Wait for the white line to curve upward, confirming momentum is stacking.
The Signal: When the "NB SIGNAL" cell in the table flips to ELITE LONG or ELITE SHORT, the statistical edge is at its peak.
The Elite Exit
Exit when the inner layers of the heatmap turn back to Midnight Charcoal or the opposite color. This indicates that the immediate heartbeat of the trend has faded, even if the longer-term layers are still colored. Indicator

Indicator

Relative Volume Context [Alturoi]Relative Volume Context evaluates whether current volume is unusual relative to its historical time-of-day or calendar context.
Instead of comparing volume to a global average, the script estimates expected volume for the current time bucket (e.g., minute of hour, hour of day, day of week, month). This creates a like-for-like comparison against historical behavior occurring at the same structural moment.
All outputs are derived from a single statistical volume model.
How It Works
For each selected time bucket, the script maintains:
Sample size (N)
Mean volume (expected value)
Variance (used for Z-Score)
When a new bar forms, current volume is compared to the historical statistics of its bucket.
This produces:
Expected Volume – Typical volume for this time bucket
Difference – Actual minus expected
Surprise (%) – Relative deviation from expected
Z-Score – Standardized deviation from the historical distribution
Sample Size & Confidence – Transparency into statistical reliability
Optional session-aware bucketing allows intraday traders to model volume relative to session structure.
Why Time Conditioning Matters
Volume follows structural patterns (open, midday, close, weekday effects).
Comparing current volume to a global average ignores these effects.
By conditioning volume on time, the indicator helps distinguish:
Routine activity
Statistically elevated participation
Structurally quiet periods
How to Use
This indicator is designed as a contextual tool, not a trading signal.
It may assist in:
Evaluating whether breakouts occur with elevated participation
Distinguishing routine session volume from abnormal spikes
Assessing whether price movement is supported by unusual activity
Interpret readings alongside price structure and risk management.
Disclaimer
This script is provided for educational and informational purposes only and does not constitute financial advice. Trading involves risk, and past behavior does not guarantee future results. Indicator

Kalman Volume Trend [BigBeluga]🔵 OVERVIEW
Kalman Volume Trend is an advanced trend-following system that combines the predictive power of a Kalman Filter with real-time volume delta analysis. Unlike standard moving averages that suffer from significant lag, the Kalman Filter uses a recursive mathematical algorithm to estimate the "true" trend by filtering out market noise.
The indicator not only identifies directional regimes but also visualizes the intensity of buying and selling pressure directly on the trend line, providing a multi-dimensional view of market conviction.
🔵 CONCEPT
Kalman Filter Logic — A state-space model that predicts price movement and then corrects itself based on new data, resulting in a smoother yet more responsive trend line than traditional EMAs.
Adaptive ATR Bands — The trend direction is determined by price breaking through volatility-adjusted bands, reducing whipsaws in sideways markets.
Volume-Weighted Trend Lines — The indicator plots "Volume Bars" extending from the trend line, where the length and color represent the relative strength of the volume delta.
Cumulative Trend Statistics — It tracks the total buy volume, sell volume, and net delta from the exact moment a new trend begins.
🔵 HOW IT WORKS (IN-DEPTH)
1️⃣ The Kalman Filtering Process
The script utilizes two primary parameters: Process Noise (Q) and Measurement Noise (R) .
It calculates a "State Estimate" (the trend) by balancing its previous prediction against the current price.
If the price is "jittery" (high R), the filter smooths the line; if the trend is moving decisively (low Q), it tracks the price more aggressively.
2️⃣ Trend Direction & Volatility Bands
Two bands are projected around the Kalman line based on a multiplier of the Average True Range (ATR) .
A Bullish trend is triggered when price closes above the upper band.
A Bearish trend is triggered when price closes below the lower band.
Once a trend is established, the opposite band acts as the trailing "Trend Line" to provide a clear buffer for price fluctuations.
3️⃣ Volume Delta Visualization
Small vertical candles ("Volume Bars") are plotted along the trend line.
These bars represent the Normalized Volume Delta (Close vs. Open and Volume intensity).
Large bars indicate high-conviction participation, while small bars suggest waning interest or consolidation.
4️⃣ Extreme Volume & Cumulative Dashboard
When volume exceeds 1.5x its recent average, an "X" label appears on the chart to mark an Exhaustion or Ignition point.
A bottom-right dashboard displays a vertical histogram showing the balance of power (BUY vs. SELL vs. DELTA) for the current trend only .
🔵 KEY FEATURES
Recursive Kalman Algorithm: High-accuracy trend tracking with minimal lag.
Integrated Volume Profiling: See volume delta without needing a separate sub-window.
Dynamic Trend Dashboard: Automatically resets at every trend flip to show fresh volume stats.
Volatility-Aware: Uses 200-period ATR to ensure bands adapt to changing market conditions.
Volume Extreme Alerts: Identifies high-volume spikes that often precede trend reversals.
🔵 DASHBOARD METRICS
BUY — Total volume accumulated on bullish candles since the trend started.
SELL — Total volume accumulated on bearish candles since the trend started.
DELTA — The net difference between buying and selling pressure.
TOTAL VOLUME — The total "fuel" spent during the current directional regime.
🔵 HOW TO USE
Riding the Trend: Stay in the trade as long as the Kalman line color remains consistent.
Spotting Weakness: If the Kalman line is Bullish (Blue) but the Volume Bars are consistently negative or shrinking, the trend may be losing steam.
High-Volume Breakouts: Look for the "X" labels at the start of a trend shift; this confirms institutional participation in the new direction.
Dashboard Confirmation: Use the vertical histogram to confirm if the buyers or sellers are truly in control during a pullback to the trend line.
🔵 CONCLUSION
Kalman Volume Trend offers a sophisticated approach to trend analysis by merging high-level signal processing with raw volume data. By focusing on "clean" price data and weighting it with volume delta, it helps traders filter out market noise and focus on high-conviction movements. Indicator

Volume Flow Analysis [UAlgo]Volume Flow Analysis is a price mapped volume study that distributes historical activity across price levels and separates that activity into directional pressure, stealth style movement, imbalance zones, absorption zones, Point of Control, Value Area, and profile shape. Instead of reading volume only bar by bar, the script converts a rolling section of chart history into a horizontal market map where each price level receives its own buy pressure, sell pressure, and movement efficiency profile.
The script works on the latest bar and rebuilds the full map from a rolling historical window. That window can either use the full user selected lookback or a shorter effective depth when decay is enabled. This gives more recent bars a stronger influence while older bars gradually lose weight. The result is a profile that can behave either like a stable historical map or like a more adaptive flow view depending on the selected decay factor.
Inside each price bucket, the script estimates directional pressure by splitting volume into buy side and sell side portions based on where price closed inside the bar range. It then distributes those portions across all buckets touched by the bar using proportional overlap. At the same time, it builds a separate stealth flow style measure based on range per unit of volume, which acts as a proxy for how much price movement occurred relative to participation.
From there, the script identifies the Point of Control, expands outward to build the seventy percent Value Area, classifies the overall profile shape, highlights extreme buy or sell imbalances, detects absorption style conditions, and optionally extends those key zones across the historical range. A legend table summarizes the active state of the map so the user can read the distribution quickly.
In practical use, Volume Flow Analysis is useful for studying where participation concentrated, where directional pressure was strongest, where flow became unbalanced, and whether the profile currently resembles a balanced, short covering, long liquidation, or double distribution structure.
🔹 Features
🔸 Price Bucket Volume Mapping
The script divides the active price range into user defined buckets and allocates volume into those levels according to actual price overlap. This creates a true horizontal flow map instead of a simple vertical volume display.
🔸 Buy Pressure and Sell Pressure Separation
Each price bucket stores both estimated buy side volume and estimated sell side volume. These two components are then drawn side by side so the user can see which side dominated each price level.
🔸 Decay Weighted Historical Memory
Older bars can gradually lose influence through the decay factor. This lets the profile emphasize fresher activity while still preserving historical structure.
🔸 Stealth Flow Layer
The script includes an additional stealth flow style metric based on range relative to volume. This highlights zones where price moved efficiently with relatively less participation.
🔸 Point of Control and Value Area
The indicator automatically finds the highest volume bucket as the Point of Control and expands from that level until seventy percent of total volume is captured to form the Value Area.
🔸 Imbalance Detection
Price levels with one sided pressure above the selected imbalance ratio are highlighted as buy or sell imbalance zones. These can also be extended across the profile range.
🔸 Absorption Detection
Buckets with unusually high total volume but unusually low stealth flow are marked as absorption. This can suggest heavy participation with reduced price efficiency.
🔸 Profile Shape Classification
The script classifies the overall profile as D shape, B shape, P shape, or b shape using the distribution of volume across the upper, middle, and lower thirds of the profile.
🔸 Range Box and Historical Scope Label
A dashed range box shows the active calculation window and displays the effective number of bars used in the current map.
🔸 Built In Legend and Summary Table
A table in the lower right corner explains the map colors and also reports the current buy sell balance, profile shape, and whether imbalance or absorption layers are active.
🔹 Calculations
1) Determining the Effective Historical Window
int nCalc = i_decay == 1.0 ? i_lookback : int(math.ceil(math.log(0.01) / math.log(i_decay)))
int N = math.max(1, math.min(nCalc, i_lookback))
N := math.min(N, bar_index)
This is the first major step of the script.
If decay is set to 1.0, the script simply uses the full user selected lookback.
If decay is below 1.0, the script solves for how many bars are needed until the decay weight falls to roughly one percent of its original value. That value becomes the effective calculation depth.
Then the script clamps that depth so it never exceeds the lookback input and never exceeds available chart history.
So the map can behave in two different ways:
a full fixed history profile,
or a dynamically shortened profile where older bars become practically irrelevant.
2) Finding the Active Price Range and Bucket Size
float pH = high
float pL = low
for i = 0 to N - 1
pH := math.max(pH, high )
pL := math.min(pL, low )
float bSz = (pH - pL) / i_buckets
This block establishes the vertical bounds of the map.
The script scans the effective historical window and finds the highest price and lowest price inside it. Then it divides that full range by the selected number of price levels.
The result is the bucket size, which determines the height of every price cell in the flow map.
So the whole analysis space is always defined by the actual recent trading range rather than by arbitrary static levels.
3) Initializing Buy, Sell, and Stealth Arrays
array bVol = array.new(i_buckets, 0.0)
array sVol = array.new(i_buckets, 0.0)
array stV = array.new(i_buckets, 0.0)
These three arrays are the main storage layer of the profile.
bVol stores buy pressure per bucket.
sVol stores sell pressure per bucket.
stV stores the stealth flow style metric per bucket.
As each historical bar is processed, its weighted contribution is distributed into these arrays according to price overlap.
So the script is building three parallel price maps at the same time.
4) Splitting Each Bar Into Buy and Sell Pressure
float b_v = rng == 0 ? (v_i / 2) : (v_i * (c_i - l_i) / rng)
float s_v = v_i - b_v
This is the directional volume model.
If a bar has zero range, volume is split evenly between buy side and sell side.
Otherwise, the script estimates buy pressure from where the close sits inside the bar range. A close nearer the high gives more weight to buy pressure. A close nearer the low gives less weight to buy pressure. Sell pressure is simply the remainder.
This is not exchange level aggressor data, but it is a practical price location based estimate of directional pressure inside each candle.
So every bar contributes both a buy component and a sell component to the profile.
5) Defining the Stealth Flow Proxy
float st_m = v_i == 0 ? rng : rng / v_i
This line creates the stealth flow style measurement.
The idea is simple. If price covers a relatively large range with relatively little volume, the ratio becomes larger. If price needs heavy volume to achieve the same range, the ratio becomes smaller.
So this metric behaves like a movement efficiency proxy:
higher values suggest cleaner movement per unit of volume,
lower values suggest heavier participation per unit of movement.
It is important to interpret this as a derived proxy rather than a direct exchange measured stealth order flow.
6) Applying Decay Weight to Historical Bars
float d_m = math.pow(i_decay, i)
Every historical bar receives a decay multiplier based on how far back it is.
The most recent bar gets the largest weight. Older bars receive progressively smaller weights as long as decay is below one.
This means the final profile is not just a raw accumulation of past activity. It is a weighted accumulation where recent flow can dominate older structure if the user wants a more adaptive map.
7) Distributing a Bar Across All Touched Buckets
int minIdx = math.max(0, math.floor((l_i - pL) / bSz))
int maxIdx = math.min(i_buckets - 1, math.floor((h_i - pL) / bSz))
for j = minIdx to maxIdx
float b_min = pL + j * bSz
float b_max = b_min + bSz
float ovr = math.max(0, math.min(h_i, b_max) - math.max(l_i, b_min))
if ovr > 0
float prop = ovr / rng
bVol.set(j, bVol.get(j) + b_v * prop * d_m)
sVol.set(j, sVol.get(j) + s_v * prop * d_m)
stV.set(j, stV.get(j) + st_m * prop * d_m)
This is one of the most important calculations in the whole script.
For every bar, the script determines which price buckets were touched by that bar. It then measures how much of the bar overlapped each bucket. That overlap fraction is used to distribute buy pressure, sell pressure, and stealth flow into the correct levels.
So if a bar spends more of its range inside a given bucket, more of its volume contribution goes into that bucket.
This makes the map much more realistic than assigning the full bar volume to only one price level.
8) Handling Zero Range Bars
else
int idx = math.max(0, math.min(i_buckets - 1, math.floor((c_i - pL) / bSz)))
bVol.set(idx, bVol.get(idx) + b_v * d_m)
sVol.set(idx, sVol.get(idx) + s_v * d_m)
stV.set(idx, stV.get(idx) + st_m * d_m)
If a bar has no range, the script cannot distribute it by overlap. In that case, it assigns the full weighted contribution to the bucket containing the close.
This ensures that flat or compressed bars still contribute to the profile without breaking the overlap logic.
9) Building Total Volume, Point of Control, and Summary Totals
float tVolMax = 0.0
float stMax = 0.0
float stMin = 1e10
int poc = 0
float pocV = 0.0
float sumV = 0.0
array tVol = array.new(i_buckets, 0.0)
for j = 0 to i_buckets - 1
float t = bVol.get(j) + sVol.get(j)
float st = stV.get(j)
tVol.set(j, t)
sumV += t
if t > tVolMax
tVolMax := t
if t > pocV
pocV := t
poc := j
After all bars are processed, the script combines buy and sell pressure for each bucket into total volume.
At the same time, it calculates:
the total profile volume,
the maximum bucket volume,
the Point of Control bucket,
and the minimum and maximum stealth values.
The Point of Control is simply the bucket with the largest accumulated total volume.
So this stage turns the raw arrays into a complete profile summary.
10) Calculating the Seventy Percent Value Area
float trg = sumV * 0.70
float cur = pocV
int vH = poc
int vL = poc
while cur < trg and (vH < i_buckets - 1 or vL > 0)
float vUp = vH < i_buckets - 1 ? tVol.get(vH + 1) : -1.0
float vDn = vL > 0 ? tVol.get(vL - 1) : -1.0
if vUp >= vDn and vUp >= 0
vH += 1
cur += vUp
else if vDn > vUp and vDn >= 0
vL -= 1
cur += vDn
else
break
This is the Value Area expansion algorithm.
The script starts at the Point of Control and keeps adding the next larger neighboring bucket, either above or below, until the accumulated total reaches seventy percent of overall profile volume.
The upper and lower boundaries of that expansion become the Value Area High and Value Area Low.
So the Value Area always forms around the Point of Control and grows toward whichever neighboring levels contain the most activity.
11) Classifying the Profile Shape
float vTop = 0.0
float vMid = 0.0
float vBot = 0.0
int third = math.floor(i_buckets / 3)
for j = 0 to i_buckets - 1
float v = tVol.get(j)
if j < third
vBot += v
else if j < third * 2
vMid += v
else
vTop += v
string shp = "D-Shape (Balanced)"
if vTop > sumV * 0.20 and vBot > sumV * 0.20 and vMid < sumV * 0.50
shp := "B-Shape (Double Dist)"
else if poc > i_buckets * 0.5 and vTop > vBot * 1.3
shp := "P-Shape (Short Covering)"
else if poc < i_buckets * 0.5 and vBot > vTop * 1.3
shp := "b-Shape (Long Liquidation)"
The script divides the profile into upper, middle, and lower thirds and compares how much volume sits in each section.
If upper and lower thirds both carry meaningful volume while the middle is relatively weak, the script labels the profile as a B shape.
If the Point of Control sits high and the upper section dominates, it labels the profile as a P shape.
If the Point of Control sits low and the lower section dominates, it labels the profile as a b shape.
Otherwise, the default label is D shape.
So the shape classifier is reading where the distribution is concentrated and how balanced it looks across the full price range.
12) Computing the Average Stealth Level
float avgSt = 0.0
int stCnt = 0
for j = 0 to i_buckets - 1
if stV.get(j) > 0
avgSt += stV.get(j)
stCnt += 1
avgSt := stCnt > 0 ? avgSt / stCnt : 0.0
This block computes the average positive stealth value across all populated buckets.
That average later becomes part of the absorption logic. Buckets with much lower than average stealth, combined with very high total volume, are flagged as absorption.
So the script uses the stealth map not only for display width, but also for analysis.
13) Detecting Imbalances and Absorption
bool imbB = i_showImb and s > 0 and b / s >= i_imbRatio
bool imbS = i_showImb and b > 0 and s / b >= i_imbRatio
bool absr = i_showAbs and t > avgV * 1.5 and st < avgSt * 0.5
These are the main analytical event conditions.
A buy imbalance exists when buy pressure is at least the selected ratio times larger than sell pressure.
A sell imbalance exists when sell pressure is at least the selected ratio times larger than buy pressure.
Absorption is defined differently. It requires:
total bucket volume above one and a half times the average bucket volume,
and stealth flow below half the average stealth value.
That means the bucket saw heavy participation but relatively poor movement efficiency, which can suggest absorbed flow.
So imbalances mark one sided aggression, while absorption marks heavy activity with suppressed movement.
14) Scaling the Visual Width of Each Layer
int wS = int((s / tVolMax) * i_width)
int wB = int((b / tVolMax) * i_width)
int wSt = int(((st - stMin) / math.max(1e-10, stMax - stMin)) * (i_width / 2))
The map is drawn horizontally, so the script converts each metric into width.
Sell pressure width and buy pressure width are scaled relative to the largest total bucket volume.
Stealth flow width is scaled separately relative to the stealth range and is limited to half the main map width.
So every bucket gets a visual footprint that reflects its relative pressure and stealth intensity.
15) Drawing the Buy, Sell, and Stealth Blocks
if wS > 0
_boxes.push(box.new(xStart, pHi, xStart + wS, pLo, bgcolor = cS, border_color = bc, border_width = bw))
if wB > 0
_boxes.push(box.new(xStart + wS, pHi, xStart + wS + wB, pLo, bgcolor = cB, border_color = bc, border_width = bw))
if i_showSt and wSt > 0
_boxes.push(box.new(xStart + wS + wB, pHi, xStart + wS + wB + wSt, pLo, bgcolor = c_stealth, border_color = bc, border_width = 1))
This is the actual map renderer.
The sell block is drawn first.
The buy block is drawn immediately after it.
If stealth flow display is enabled, the stealth block is drawn after both pressure blocks.
So each price level becomes a compact three part flow bar:
sell pressure,
buy pressure,
and optional stealth flow.
16) Extending Imbalance and Absorption Zones Across the Range
if i_showZones
if imbB
_boxes.push(box.new(bar_index - N + 1, pHi, bar_index + 1, pLo, bgcolor = color.new(c_buy, 90), border_color = na))
if imbS
_boxes.push(box.new(bar_index - N + 1, pHi, bar_index + 1, pLo, bgcolor = color.new(c_sell, 90), border_color = na))
if absr
_boxes.push(box.new(bar_index - N + 1, pHi, bar_index + 1, pLo, bgcolor = color.new(color.rgb(255, 0, 255), 85), border_color = na))
If zone extension is enabled, the script projects imbalance and absorption buckets horizontally across the entire historical calculation window.
This makes key buckets easier to see in relation to actual price bars rather than only inside the right side profile map.
So the indicator can show both a profile view and a chart level zone view at the same time.
17) Drawing the Range Box and Historical Scope Label
if i_showRng
_boxes.push(box.new(bar_index - N + 1, pH, bar_index + 1, pL, bgcolor = na, border_color = c_range, border_style = line.style_dashed))
_labels.push(label.new(bar_index - int(N / 2) + 1, pH, "N: " + str.tostring(N), textcolor = c_range, style = label.style_label_down, color = color.new(color.black, 100), size = size.small))
This block outlines the active analysis window on the chart.
The dashed box marks the highest and lowest prices used by the profile, and the label shows the effective bar count N.
So the user can always see exactly which portion of chart history is feeding the current flow map.
18) Drawing the Point of Control
if i_showPOC
float pPrice = pL + (poc + 0.5) * bSz
int endX = i_extPOC ? bar_index + i_width : bar_index + 1
_lines.push(line.new(bar_index - N + 1, pPrice, endX, pPrice, color = c_poc, width = 2))
The Point of Control line is drawn at the midpoint of the highest volume bucket.
If extension is enabled, the line continues forward through the map width. Otherwise it stops at the right edge of the historical window.
So the Point of Control remains a clear reference level for the most active price area inside the map.
19) Drawing the Value Area
if i_showVA
float vaTop = pL + (vH + 1) * bSz
float vaBot = pL + vL * bSz
_boxes.push(box.new(bar_index + 1, vaTop, bar_index + 1 + i_width, vaBot, border_color = c_va, bgcolor = color.new(c_va, 90), border_style = line.style_dashed))
This draws the seventy percent Value Area as a translucent box on the right side of the profile.
The top and bottom are derived from the expanded Value Area bucket boundaries, and the box spans the full map width.
So the user can immediately see where most of the profile activity was concentrated around the Point of Control.
20) Buy Sell Dominance Summary
float tB = bVol.sum()
float tS = sVol.sum()
float tV = tB + tS
float pB = tV > 0 ? (tB / tV) * 100 : 0
float pS = tV > 0 ? (tS / tV) * 100 : 0
string dTxt = pB >= pS ? "Bullish " + str.tostring(pB, "#") + "%" : "Bearish " + str.tostring(pS, "#") + "%"
This block calculates the total buy side share and total sell side share across the whole profile.
Whichever side holds the greater percentage becomes the dominant flow label in the table.
So the summary does not only show local bucket conditions. It also provides a broad view of which side controlled more of the weighted participation inside the entire mapped range. Indicator

Volume Defense Zones [MarkitTick]💡 The Volume Defense Zones is a professional-grade liquidity analysis engine designed to identify institutional interest by isolating ultra-high volume transactions and mapping them as dynamic support and resistance zones. Unlike standard volume indicators that merely plot vertical bars, this script utilizes a sophisticated heatmap engine and a multi-timeframe (MTF) overlay to provide a three-dimensional view of market participation. By calculating the Volume Weighted Average Price (VWAP) specifically for high-intensity bars, the indicator creates "Defense Zones"—price levels where large-scale players have historically committed significant capital.
● ✨ Originality and Utility
This indicator distinguishes itself from the vast library of open-source tools through its unique "Search Depth" logic and automated zone merging capabilities. While many scripts identify volume spikes, they often clutter the chart with overlapping lines that lose relevance over time. This system solves that problem by:
• Dynamic Zone Consolidation
The script includes a proprietary merge threshold algorithm. If two high-volume defense levels are within a user-defined percentage of each other, the script automatically merges them into a single "Defense Box." This reflects the reality of market "zones" rather than surgical price points.
• Multi-Timeframe Institutional Benchmarking
By integrating a built-in MTF overlay, traders can visualize 4-hour or Daily volume defense zones while trading on a 5-minute chart. This ensures that the user is always aware of the "Big Picture" liquidity levels that are likely to hold during intraday volatility.
• Historical Ghosting and Breakout Analysis
The script tracks whether a zone is "active" or "broken." When price breaches a defense level, the zone doesn't simply disappear; it transforms into a "Ghost Zone" (dotted line), allowing traders to analyze S/R flips and historical retests of previously defended levels.
● 🔬 Methodology and Concepts
The core logic of the Volume Defense Zones is rooted in the identification of "Abnormal Volume" relative to a historical lookback period.
• Peak Volume Identification
The script maintains a rolling window of volume data defined by the "Comparison Length" input. A bar is classified as "Ultra High Volume" only if its volume exceeds the maximum volume recorded in that lookback window. This ensures that the signals adapt to changing market regimes (e.g., high-volatility sessions vs. low-volume holidays).
• The Defense Calculation
For every identified volume peak, the script calculates a localized VWAP using the internal formula:
Accumulated (Volume * Bar Body Center) / Total Volume.
This price level represents the "Average Cost Basis" of the participants during that specific high-intensity event. If the price remains above this VWAP, the level is treated as a Bullish Defense (Support). If price stays below it, it is a Bearish Defense (Resistance).
• Multi-Timeframe (MTF) Security
Using the request.security function with barmerge.lookahead_on (and appropriate offsets to prevent repainting), the script fetches high-volume levels from higher timeframes. This provides a top-down liquidity map that identifies where large institutions are "defending" their positions.
● 🎨 Visual Guide
The visual output is divided into three primary categories to ensure maximum clarity and actionable data visualization:
• The Volume Heatmap (Bottom Pane)
Instead of standard green and red bars, this script uses a professional 5-color heatmap gradient:
- Deep Blue (HM_C0): Low interest / baseline volume.
- Teal/Cyan (HM_C1/HM_C2): Rising interest.
- Gold (HM_C3): High participation.
- Bright Red (HM_C4): Ultra-High Volume.
These bars are framed with thicker borders when a new peak is detected, making the "Ultra Vol" events immediately visible.
• Defense Zones and Labels
- Green Boxes (ZONE_BULL_COL): Represent active bullish defense zones where buyers are currently in control of the high-volume level.
- Red Boxes (ZONE_BEAR_COL): Represent active bearish defense zones where sellers are successfully defending the level.
- Blue/Neutral Boxes (ZONE_INSIDE_COL): Represent zones where the price is currently trading inside the defense range, indicating a period of consolidation or "battle."
- Dotted Lines/Boxes: These are "Broken" or "Ghost" zones. They indicate levels that were previously significant but have been breached.
• Trend Climax Indicators
The script plots specific triangles on the volume bars:
- Green Up Triangle (▲): Bullish Climax. Occurs when price is trending down but a high-volume reversal is detected above the VWAP.
- Red Down Triangle (▼): Bearish Climax. Occurs when price is trending up but a high-volume rejection is detected below the VWAP.
• Professional Dashboard
A clean table in the top-right corner displays real-time statistics, including Total Volume, Max Volume, Average Volume, and the total count of analyzed bars.
● 📖 How to Use
Identifying Institutional Support: Look for thick green boxes formed during "Ultra High Vol" events. These are areas where price is likely to bounce upon a retest.
Trading the Breakout: When a red resistance zone is breached and turns into a dotted "Ghost" zone, wait for a retest of that level. If price holds above it, the old resistance has become new support.
Filtering with MTF: Only take long trades when the price is above the Purple MTF lines, which represent the higher-timeframe institutional defense levels.
Exhaustion Signals: Use the Climax Triangles (▲/▼) to identify potential trend reversals. A red triangle at the end of a long uptrend often signals that "smart money" is distributing their positions.
● ⚙️ Inputs and Settings
• Volume Settings
- Time Resolution: Allows you to change the granularity of the volume analysis.
- Comparison Length: Defines the lookback period (default 20) for determining what constitutes a "Peak" volume bar.
• Visual & Analysis
- Search Depth (Levels): Controls how many historical S/R zones are displayed on the chart. Increasing this provides more historical context but may clutter the view.
- Merge Threshold (%): A critical setting that defines how close two price levels must be to be grouped into a single zone.
- Show All Data Labels: Toggles the display of exact volume figures above the bars.
• Multi-Timeframe Overlay
- HTF Timeframe: Set the higher timeframe (e.g., 240 for 4-hour) to see macro defense zones.
- Max HTF Zones: Limits the number of MTF lines drawn to keep the chart clean.
● 🔍 Deconstruction of the Underlying Scientific and Academic Framework
The indicator is constructed upon the principles of **Auction Market Theory (AMT)** and **Volume Spread Analysis (VSA)**.
• Auction Market Theory
The fundamental premise is that the market is an ongoing auction where the purpose of price is to find the area where the most volume can be transacted. The "Defense Zones" calculated by this script represent "High Volume Nodes" (HVN). Scientifically, these are levels of high price acceptance. When price moves away from these zones and returns, the script tests whether the "Value" has shifted or if the previous participants are still willing to transact at that level.
• Statistical Outlier Theory
The "Ultra High Volume" detection utilizes a non-parametric approach to identify outliers. By comparing the current volume to the rolling maximum of the previous $N$ periods, the script effectively identifies events that fall outside the standard distribution of market activity. This is mathematically equivalent to identifying "Z-score" spikes in volume, signifying a significant shift in market sentiment or the injection of institutional liquidity.
• Volume Weighted Cost Basis (VWCB)
The use of VWAP within the defense zones is based on the academic concept of the "Volume Weighted Cost Basis." In institutional finance, the execution quality of a large trade is measured against the VWAP. Therefore, these levels act as psychological and financial "anchors" for large participants who need to protect their average entry price to maintain a profitable position.
⚠️ 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

Effort & Result [UAlgo]Effort & Result is a volume spread relationship oscillator inspired by the classic idea that market effort and market result do not always move in balance. The script compares how unusual current volume is versus how unusual current price range is, then measures the gap between those two conditions. The result is a compact oscillator that helps reveal whether the market is showing heavy participation with limited progress, or strong price expansion with relatively weak participation.
The core concept is simple. Volume represents effort, while true range represents result. When effort rises much faster than result, the market may be meeting opposing liquidity and progress can become inefficient. When result rises much faster than effort, price may be moving through thinner liquidity with relatively little resistance. This script transforms that relationship into standardized values so both dimensions can be compared on the same scale.
To make the comparison more useful, the script converts both volume and true range into rolling z scores. That means each bar is judged relative to its own recent context rather than by raw magnitude alone. A large volume bar may not mean much in a market that always trades large volume, while the same raw value could be highly unusual in another market. The same logic applies to price range. By standardizing both series, the indicator focuses on anomaly versus normal behavior rather than on absolute size.
The final oscillator is the difference between effort z score and result z score. Positive readings suggest effort is leading result, while negative readings suggest result is leading effort. The script also highlights two special regimes. Absorption appears when effort is strongly positive but result remains weak. Vacuum appears when result is strongly positive but effort remains weak. These conditions are then labeled directly on the oscillator.
In practical use, the indicator can help identify hidden resistance to price movement, low liquidity expansion, or moments where market participation and delivered movement are out of balance. It is best used as a context tool rather than a standalone entry engine.
🔹 Features
🔸 Effort Versus Result Framework
The script separates market behavior into two dimensions. Volume is treated as effort, and true range is treated as result. This creates a clean and intuitive model for comparing participation versus delivered movement.
🔸 Rolling Z Score Standardization
Both effort and result are transformed into rolling z scores over the selected lookback window. This makes the oscillator adaptive to the recent environment and allows direct comparison between volume and range.
🔸 Delta Oscillator
The final plotted value is the difference between effort z score and result z score. This gives the user a direct read on whether volume is leading range or range is leading volume.
🔸 Absorption Detection
When effort is strongly positive but result is weak or negative, the script flags absorption. This can indicate that strong participation is being met by opposing liquidity and price progress is being contained.
🔸 Vacuum Detection
When result is strongly positive but effort is weak or negative, the script flags a vacuum condition. This can indicate that price is moving through thin liquidity with little resistance.
🔸 Context Aware Histogram Coloring
The histogram changes color depending on whether the bar reflects absorption, vacuum, or neutral conditions. This makes regime identification faster and more visual.
🔸 Threshold Guides
The oscillator includes reference lines for equilibrium as well as absorption and vacuum alert thresholds, making it easier to interpret extremes.
🔸 Direct Chart Labels
Special conditions are labeled directly on the oscillator so absorption and vacuum events stand out immediately without requiring separate scanning.
🔹 Calculations
1) Defining the Flow Metrics Container
type FlowMetrics
float totalVol
float spread
float effortZ
float resultZ
This object stores the four main values used by the indicator.
totalVol stores the current bar volume.
spread stores the current bar range measure.
effortZ stores the standardized effort reading.
resultZ stores the standardized result reading.
So before any signal logic is built, the script already has a clean structure for the raw inputs and their normalized forms.
2) Measuring Effort and Result Inputs
float v = nz(volume, 1)
float tr = ta.tr(true)
This block defines the two core raw inputs of the indicator.
v is the current volume, with a fallback of 1 in case the symbol does not provide volume data.
tr is the true range of the bar, which is used as the result measure.
The reason true range is used instead of a simpler high minus low calculation is that true range also accounts for gaps relative to the prior close. This makes it a more complete measure of actual delivered price movement.
So the indicator begins with one participation variable and one movement variable.
3) Rolling Mean and Standard Deviation for Effort
float volMean = ta.sma(vol, len)
float volStd = ta.stdev(vol, len)
this.effortZ := volStd == 0 ? 0 : (vol - volMean) / volStd
This is the effort standardization step.
The script first computes the rolling average volume over the chosen window. Then it computes the rolling volume standard deviation over the same window. Finally, it converts the current volume into a z score:
effortZ = (current volume minus mean volume) divided by volume standard deviation
This means:
a positive effort z score implies current volume is above normal,
a negative effort z score implies current volume is below normal,
and zero means current volume is near its rolling average.
So effort is not judged by raw volume alone. It is judged by how unusual that volume is relative to recent history.
4) Safe Spread Handling for Result Calculation
float safeSpread = r == 0 ? syminfo.mintick : r
This line prevents division and standardization issues when the range is zero.
If the current true range is zero, the script substitutes the instrument’s minimum tick size instead. This ensures that the result side of the calculation always has a valid positive value and avoids unstable behavior in rare flat bars.
So the script remains numerically stable even when a bar has no measurable range.
5) Rolling Mean and Standard Deviation for Result
float spreadMean = ta.sma(safeSpread, len)
float spreadStd = ta.stdev(safeSpread, len)
this.resultZ := spreadStd == 0 ? 0 : (safeSpread - spreadMean) / spreadStd
This is the result standardization step.
Just like effort, the script calculates the rolling average and rolling standard deviation for the bar spread. It then converts the current spread into a z score:
resultZ = (current spread minus mean spread) divided by spread standard deviation
This means:
a positive result z score implies current movement is above normal,
a negative result z score implies current movement is below normal.
So result becomes directly comparable to effort on the same statistical scale.
6) Full Metric Calculation Method
method calcMetrics(FlowMetrics this, float vol, float r, int len) =>
this.totalVol := vol
this.spread := r
float volMean = ta.sma(vol, len)
float volStd = ta.stdev(vol, len)
this.effortZ := volStd == 0 ? 0 : (vol - volMean) / volStd
float safeSpread = r == 0 ? syminfo.mintick : r
float spreadMean = ta.sma(safeSpread, len)
float spreadStd = ta.stdev(safeSpread, len)
this.resultZ := spreadStd == 0 ? 0 : (safeSpread - spreadMean) / spreadStd
This method combines the full effort and result workflow into one place.
It first stores the raw bar volume and raw spread. Then it calculates the effort z score from rolling volume statistics and the result z score from rolling spread statistics.
So each bar receives:
a raw effort reading,
a raw result reading,
a normalized effort score,
and a normalized result score.
This normalized pair is what the rest of the oscillator uses.
7) Building the Main Oscillator Value
FlowMetrics flow = FlowMetrics.new()
flow.calcMetrics(v, tr, length)
float deltaZ = flow.effortZ - flow.resultZ
This is the main oscillator formula.
After the metrics object is updated, the script computes:
deltaZ = effortZ minus resultZ
This value answers the central question of the indicator:
is effort stronger than result, or is result stronger than effort?
If deltaZ is positive, effort is outrunning result.
If deltaZ is negative, result is outrunning effort.
If deltaZ is near zero, effort and result are more balanced.
So the oscillator is really a normalized imbalance measure between participation and delivered movement.
8) Absorption Condition
bool isAbsorption = flow.effortZ > 1.5 and flow.resultZ < 0.0
This is the first special regime filter.
Absorption is defined as:
effort significantly above normal,
while result remains weak.
The threshold 1.5 means effort must be at least 1.5 standard deviations above its rolling average. At the same time, result must still be below zero, meaning current movement is not even above its recent average.
This combination suggests that strong participation is entering the market but price is not expanding proportionally. That can imply opposing liquidity, passive absorption, or resistance to movement.
So absorption is the classic high effort, low result condition.
9) Vacuum Condition
bool isVacuum = flow.resultZ > 1.5 and flow.effortZ < 0.0
This is the second special regime filter.
Vacuum is defined as:
result significantly above normal,
while effort remains weak.
Here, price is delivering unusually large movement, but volume is not confirming that move with above average participation. This can imply thin liquidity, poor resistance, or fast movement through lightly traded space.
So vacuum is the classic low effort, high result condition.
10) Histogram Color Logic
color histColor = isAbsorption ? color.new(color.fuchsia, 30) :
isVacuum ? (close >= open ? color.new(color.aqua, 30) : color.new(color.orange, 30)) :
color.new(color.gray, 70)
This block determines how the histogram is colored.
If the current bar meets the absorption condition, the histogram is colored fuchsia.
If it meets the vacuum condition, the histogram is colored aqua when the candle is bullish and orange when the candle is bearish.
If neither special regime is active, the histogram is colored neutral gray.
So the visual layer helps the user distinguish ordinary imbalance readings from the two emphasized special states.
11) Plotting the Oscillator
plot(deltaZ, "Effort/Result Delta", style=plot.style_columns, color=histColor)
This line plots the main effort versus result delta as a column histogram.
The use of columns is helpful because it emphasizes relative magnitude and direction around the zero line. Positive columns show effort leading result. Negative columns show result leading effort.
So the visual output is both directional and strength sensitive.
12) Threshold and Equilibrium Lines
hline(1.5, "Vacuum Alert", color=color.new(color.aqua, 50), linestyle=hline.style_dashed)
hline(-1.5, "Absorption Alert", color=color.new(color.fuchsia, 50), linestyle=hline.style_dashed)
hline(0, "Equilibrium", color=color.new(color.gray, 50))
These reference lines give the oscillator context.
The zero line marks equilibrium, where effort and result are more balanced.
The positive 1.5 line acts as a visual vacuum threshold.
The negative 1.5 line acts as a visual absorption threshold.
These levels do not define the regime conditions directly by themselves, because the actual logic checks the separate effort and result z scores. But they still give the user a useful visual frame for interpreting the size of the delta reading.
13) Labeling Absorption Events
if isAbsorption
label.new(bar_index, deltaZ, text="Absorbed", color=color.new(color.fuchsia, 100), textcolor=color.fuchsia, style=label.style_none, size=size.small, yloc=yloc.price)
When an absorption condition is detected, the script prints an Absorbed label directly at the oscillator value for that bar.
This makes the event easier to spot when scanning history and also helps separate truly qualified absorption conditions from merely positive delta readings.
So the label is not attached to every strong positive bar, only to the bars that meet the specific high effort and weak result rule.
14) Labeling Vacuum Events
if isVacuum
label.new(bar_index, deltaZ, text="Vacuum", color=color.new(color.aqua, 100), textcolor=color.aqua, style=label.style_none, size=size.small, yloc=yloc.price)
This block does the same for vacuum events.
When a bar shows unusually strong range with weak volume participation, the script prints a Vacuum label at the oscillator level.
So the chart distinguishes not only statistical imbalance in general, but specifically the regime where result is outrunning effort. Indicator

Volume Scatter Plot [UAlgo]Volume Scatter Plot is a visual analytics tool that transforms recent candles into a two dimensional distribution of price and volume. Instead of plotting volume in the traditional way at the bottom of the chart, the script projects each recent bar as a point inside a custom scatter plot area drawn directly on the chart. This allows the user to study the relationship between traded volume and price location in a much more spatial and intuitive format.
Each point represents one candle from the selected lookback period. The vertical location of the point is taken from price, while the horizontal location is determined by that candle’s volume relative to all other bars inside the lookback window. As a result, the plot makes it possible to quickly see whether higher volume tends to cluster near higher prices, lower prices, or specific sections of the recent range.
The script also colors every point according to candle direction, which adds a simple but useful order flow style layer. Bullish candles are shown with one color and bearish candles with another, so the scatter plot can reveal not only the price and volume relationship, but also whether those clusters were formed more often by bullish or bearish candles.
To add structure, the indicator draws a framed plotting area with guide lines, then overlays a linear regression line across the cloud of points. This regression line gives the user a fast view of the overall relationship between volume and price. If enabled, deviation bands are also plotted above and below the regression line, which can help identify points that stand out from the average relationship.
In practical use, this script is useful for studying whether strong participation is appearing at premium or discount prices, whether extreme volume is clustering around certain regions, and whether recent bars are tightly aligned with the broader price volume relationship or scattered away from it.
🔹 Features
🔸 Price and Volume Scatter Mapping
The script converts each candle in the lookback period into a scatter point. Price controls vertical placement and volume controls horizontal placement. This creates a true two dimensional view of recent market behavior rather than a separate price chart and volume pane.
🔸 Bullish and Bearish Point Coloring
Each point is colored according to candle direction. Bullish candles use the bullish point color, while bearish candles use the bearish point color. This makes it easier to visually separate positive and negative participation inside the same distribution.
🔸 Custom Plot Area Overlay
The scatter plot is drawn in a dedicated chart area offset to the right of current price. The width of this area and the horizontal offset are both configurable, giving the user control over how large and how far away the visualization appears.
🔸 Flexible Scatter Symbols
The plotted points can use different characters such as circles, stars, squares, crosses, or other symbols. This helps users adapt the style of the plot to their preferred chart appearance.
🔸 Automatic Bounds Calculation
The indicator automatically calculates the highest price, lowest price, highest volume, and lowest volume across the current point set. These values are then used to scale the scatter plot so the entire distribution fits inside the frame cleanly.
🔸 Framed Axes and Mid Guides
The script draws the outer borders of the plot area as well as horizontal and vertical midpoint guides. This creates a clearer analytical space and makes it easier to judge where points sit relative to the full distribution.
🔸 Tooltip Enabled Data Points
Every scatter point includes a tooltip that shows the underlying price and volume values. This allows the user to inspect specific points directly on the chart without losing the visual overview.
🔸 Linear Regression Overlay
A regression line is calculated from the relationship between volume and price across the current dataset. This gives the user an immediate view of whether the cloud of points implies a positive, negative, or flat volume price relationship.
🔸 Optional Deviation Bands
When enabled, the script also draws lines one standard deviation above and below the regression line. These bands help visualize how tightly or loosely the scatter cloud is distributed around the fitted relationship.
🔸 Live Refresh on the Latest Bar
The plot refreshes on the latest bar and in realtime conditions, ensuring that the scatter map always reflects the most recent market state.
🔹 Calculations
1) Defining the Scatter Point and Plot Structures
type ScatterPoint
float price
float volume
color pt_color
int bar_time
type ScatterPlot
array points
int lookback
int width
int x_offset
float min_price
float max_price
float min_vol
float max_vol
array drawn_labels
array drawn_lines
This is the data model behind the whole indicator.
Each ScatterPoint stores one candle’s contribution to the plot. It contains:
the target price,
the candle volume,
the point color,
and the candle time.
The ScatterPlot structure stores the full plotting state:
the rolling point array,
the configuration values,
the current plot bounds,
and the labels and lines used for drawing.
So before any calculations begin, the script already has a full container for both the raw data and the visual objects used to display it.
2) Adding New Points Into the Rolling Dataset
method add_point(ScatterPlot this, float p, float v, color c, int t) =>
this.points.unshift(ScatterPoint.new(p, v, c, t))
if this.points.size() > this.lookback
this.points.pop()
This method manages the rolling dataset.
Every new bar creates a new ScatterPoint and inserts it at the front of the array with unshift() . That means the newest point is always stored first. If the array grows larger than the selected lookback size, the oldest point is removed from the end with pop() .
This gives the script a continuously updating point cloud that always contains only the most recent bars.
In practical terms, the scatter plot is always a moving window of recent market behavior rather than an ever growing history.
3) Choosing the Price and Color for Each Point
color bar_color = close >= open ? c_bull : c_bear
float target_price = hl2
data_plot.add_point(target_price, volume, bar_color, time)
This block explains how each bar is converted into a scatter point.
First, the script determines the point color from candle direction. If the close is above or equal to the open, the point uses the bullish color. Otherwise it uses the bearish color.
Second, the script chooses hl2 as the target price. That means the vertical position of each point is the midpoint of the bar’s high and low, not the close or the open. This is a useful choice because it represents the candle’s central traded location rather than only its final close.
Finally, the script sends that price, the candle volume, the directional color, and the time into the rolling plot dataset.
So each plotted point reflects:
where the candle sat in price,
how much volume it traded,
and whether it closed bullish or bearish.
4) Calculating the Plot Bounds
method calculate_bounds(ScatterPlot this) =>
float max_p = na
float min_p = na
float max_v = na
float min_v = na
if this.points.size() > 0
max_p := this.points.get(0).price
min_p := this.points.get(0).price
max_v := this.points.get(0).volume
min_v := this.points.get(0).volume
for p in this.points
if p.price > max_p
max_p := p.price
if p.price < min_p
min_p := p.price
if p.volume > max_v
max_v := p.volume
if p.volume < min_v
min_v := p.volume
This method scans all stored points and finds the extreme values needed for scaling.
It identifies:
the maximum price,
the minimum price,
the maximum volume,
and the minimum volume.
These values form the raw boundaries of the point cloud. Without them, the script would not know how to map prices and volumes into the framed plotting area.
So this is the normalization step that prepares the scatter plot for accurate positioning.
5) Adding a Small Price Margin Around the Point Cloud
float p_range = math.max(max_p - min_p, 0.0001)
this.max_price := max_p + (p_range * 0.05)
this.min_price := min_p - (p_range * 0.05)
this.max_vol := max_v
this.min_vol := min_v
After the raw bounds are found, the script adds a small vertical margin to the price range.
It computes the price span and then extends the upper and lower bounds by five percent of that range. This prevents the highest and lowest points from sitting directly on the frame border.
Volume bounds are stored without an added margin because they are used mainly for horizontal scaling.
In practical terms, this makes the plot easier to read and visually less cramped.
6) Mapping Volume Into Horizontal Position
method get_x_pos(ScatterPlot this, float vol, int current_bar) =>
float max_range = math.max((this.max_vol - this.min_vol), 0.0001)
float ratio = (vol - this.min_vol) / max_range
float active_width = this.width * 0.95
int pos = current_bar + this.x_offset + int(ratio * active_width)
pos
This function is what turns volume into horizontal placement.
First, it measures the full volume range across the current dataset. Then it converts the current point’s volume into a ratio between zero and one:
ratio = (vol - this.min_vol) / max_range
That ratio tells the script where the volume sits between the smallest and largest volume values in the lookback.
The ratio is then multiplied by the active plot width and shifted to the right of current price using x_offset .
So low volume points appear closer to the left side of the scatter area, and high volume points appear closer to the right side.
This is the key transformation that makes the chart behave like a true scatter plot rather than a simple time series.
7) Drawing the Plot Frame and Guides
method draw_axes(ScatterPlot this, int current_bar) =>
int x_start = current_bar + this.x_offset
int x_end = x_start + this.width
this.push_line(line.new(x_start, this.min_price, x_start, this.max_price, color = c_axis, style = line.style_dotted, width = 1))
this.push_line(line.new(x_end, this.min_price, x_end, this.max_price, color = c_axis, style = line.style_dotted, width = 1))
this.push_line(line.new(x_start, this.min_price, x_end, this.min_price, color = c_axis, style = line.style_dotted, width = 1))
this.push_line(line.new(x_start, this.max_price, x_end, this.max_price, color = c_axis, style = line.style_dotted, width = 1))
int mid_x = x_start + math.round(this.width / 2)
float mid_y = (this.max_price + this.min_price) / 2
this.push_line(line.new(mid_x, this.min_price, mid_x, this.max_price, color = color.new(c_axis, 70), style = line.style_dashed, width = 1))
this.push_line(line.new(x_start, mid_y, x_end, mid_y, color = color.new(c_axis, 70), style = line.style_dashed, width = 1))
This method draws the visual frame of the scatter plot.
It defines the left and right horizontal edges of the plotting area, then draws four dotted boundary lines:
left border,
right border,
bottom border,
and top border.
After that, it draws a vertical midpoint guide and a horizontal midpoint guide.
These guides help the user interpret where the point cloud sits relative to the full price and volume range. For example, it becomes much easier to see whether most points cluster in the upper half of price or the right half of volume.
8) Drawing Axis Labels
this.push_label(label.new(x_start, this.max_price, "Price Max", textcolor = c_axis, color = transparent, style = label.style_label_down, size = size.small))
this.push_label(label.new(x_start, this.min_price, "Price Min", textcolor = c_axis, color = transparent, style = label.style_label_up, size = size.small))
this.push_label(label.new(x_end, this.min_price, "Vol Max", textcolor = c_axis, color = transparent, style = label.style_label_left, size = size.small))
These labels give the plot basic orientation.
The script marks:
the highest price boundary,
the lowest price boundary,
and the far right side of the plot as the maximum volume direction.
This is a simple but useful usability feature because it immediately tells the user how to read the scatter space:
vertical movement corresponds to price,
and movement toward the right corresponds to increasing volume.
9) Drawing the Scatter Points Themselves
method draw_points(ScatterPlot this, int current_bar, string char_symbol) =>
color transparent = color.new(color.white, 100)
for p in this.points
int x_pos = this.get_x_pos(p.volume, current_bar)
string tooltip_txt = "P: " + str.tostring(p.price, format.mintick) + " V: " + str.tostring(p.volume, format.volume)
this.push_label(label.new(x_pos, p.price, text = char_symbol, textcolor = p.pt_color, color = transparent, style = label.style_none, size = size.small, tooltip = tooltip_txt))
This method plots every stored point inside the scatter area.
For each point, the script first converts volume into an x position using get_x_pos() . The y position is simply the stored point price. Then it draws a label using the selected point symbol and the stored bullish or bearish color.
Each point also gets a tooltip showing:
the exact price,
and the exact volume.
So visually, the user sees a clean scatter cloud, but each point still preserves its detailed numeric information.
10) Computing the Regression Line
method draw_regression(ScatterPlot this, int current_bar, bool show_dev) =>
int n = this.points.size()
if n > 1
float sum_x = 0.0
float sum_y = 0.0
float sum_xy = 0.0
float sum_xx = 0.0
for p in this.points
sum_x += p.volume
sum_y += p.price
sum_xy += p.volume * p.price
sum_xx += p.volume * p.volume
float denom = (n * sum_xx - sum_x * sum_x)
float slope = denom == 0 ? 0 : (n * sum_xy - sum_x * sum_y) / denom
float intercept = (sum_y - slope * sum_x) / n
This is the statistical core of the indicator.
The script performs a standard linear regression where:
x is volume,
and y is price.
It first accumulates the sums needed for the regression formula:
sum of x,
sum of y,
sum of xy,
and sum of xx.
From those totals, it calculates:
the slope,
and the intercept.
So the regression line answers a simple analytical question:
as volume changes across the recent dataset, what is the average linear relationship with price?
A positive slope suggests higher volume tends to align with higher prices.
A negative slope suggests higher volume tends to align with lower prices.
A flat slope suggests little directional relationship between the two.
11) Measuring Dispersion Around the Regression
float variance = 0.0
for p in this.points
float expected_y = slope * p.volume + intercept
variance += math.pow(p.price - expected_y, 2)
float std_dev = math.sqrt(variance / n)
After the regression line is found, the script measures how far the actual points deviate from that fitted relationship.
For each point, it calculates the expected price on the regression line for that point’s volume. It then measures the squared difference between the actual price and the expected price. The average of those squared differences becomes the variance, and the square root of that value becomes the standard deviation.
This tells the user how tightly or loosely the point cloud clusters around the regression line. A small deviation means the relationship is relatively consistent. A large deviation means the cloud is more dispersed.
12) Converting the Regression Into Drawable Chart Coordinates
float y_min_vol = slope * this.min_vol + intercept
float y_max_vol = slope * this.max_vol + intercept
int x_start_clamped = this.get_x_pos(this.min_vol, current_bar)
int x_end_clamped = this.get_x_pos(this.max_vol, current_bar)
this.push_line(line.new(x_start_clamped, y_min_vol, x_end_clamped, y_max_vol, color = c_reg, width = 2, style = line.style_solid))
This block translates the regression model into something the chart can display.
The script evaluates the regression line at the minimum and maximum volume values of the dataset. Those two calculated prices define the start and end of the regression segment in price space.
Then it converts the minimum and maximum volumes into actual chart x positions using get_x_pos() .
Finally, it draws a straight line between those two points.
So even though the regression is calculated in price and volume coordinates, it becomes a visible line inside the custom scatter plot area.
13) Drawing the Deviation Bands
if show_dev
color dev_color = color.new(c_reg, 60)
this.push_line(line.new(x_start_clamped, y_min_vol + std_dev, x_end_clamped, y_max_vol + std_dev, color = dev_color, width = 1, style = line.style_dashed))
this.push_line(line.new(x_start_clamped, y_min_vol - std_dev, x_end_clamped, y_max_vol - std_dev, color = dev_color, width = 1, style = line.style_dashed))
If deviation display is enabled, the script draws two additional dashed lines:
one standard deviation above the regression,
and one standard deviation below it.
These bands help the user judge whether points are staying close to the average relationship or whether some bars are standing far away from the expected line.
In practical terms, points well outside these bands can be interpreted as unusually strong or unusually weak price locations relative to their traded volume.
14) Clearing and Redrawing the Plot
method clear_drawings(ScatterPlot this) =>
if this.drawn_labels.size() > 0
for l in this.drawn_labels
l.delete()
this.drawn_labels.clear()
if this.drawn_lines.size() > 0
for b in this.drawn_lines
b.delete()
this.drawn_lines.clear()
Before each refresh, the script deletes all previously drawn labels and lines. This ensures that the scatter plot does not accumulate stale points or outdated regression segments.
Because the visualization is rebuilt from the current rolling dataset, clearing old drawings first is necessary for a clean and accurate live display.
15) Final Execution Flow
if barstate.islast or barstate.isrealtime
data_plot.clear_drawings()
data_plot.calculate_bounds()
data_plot.draw_axes(bar_index)
data_plot.draw_points(bar_index, i_pt_char)
data_plot.draw_regression(bar_index, i_show_dev)
This block summarizes the entire display engine.
On the latest bar or in realtime:
the script clears old drawings,
recalculates the current bounds,
draws the plot frame,
plots all scatter points,
and overlays the regression line with optional deviation bands.
So the chart always shows a fresh snapshot of the current price volume relationship based on the selected lookback window. Indicator

Dow Jones Institutional [MarkitTick]💡 This indicator provides a self-contained, institutional-grade market breadth suite specifically engineered for the Dow Jones Industrial Average. By directly computing the aggregate data of 30 component stocks, it delivers highly accurate internal market health metrics without relying on delayed or third-party breadth indices. It calculates five foundational market metrics dynamically, plotting them alongside an automated statistical dashboard and real-time divergence detection.
✨ Originality and Utility
● Self-Contained Breadth Engine
Standard market breadth indicators often require external data feeds that may not be available across all brokerages or may suffer from latency. This tool is highly original because it loops through the exact 30 components of the Dow Jones, applying predefined institutional weightings to construct its own proprietary data feed.
● Multi-Dimensional Metric Suite
Instead of cluttering the chart with multiple scripts, this tool consolidates five crucial breadth measurements into a single, seamless interface. Users can instantly switch between absolute momentum, volume flow, and standard deviation models depending on their analytical needs.
● Strict Anti-Repainting Architecture
The script utilizes historical data offsets within its security requests to ensure that all signals, statistics, and divergences are firmly locked upon bar close. This prevents the common pitfall of repainting and provides a reliable foundation for objective analysis.
🔬 Methodology and Concepts
● The Internal Calculation Loop
The core of the indicator relies on a single-pass data loop that evaluates the previous closing price, previous volume, and the price change of all 30 Dow components. It categorizes each asset as advancing, declining, or unchanged, and tallies both their raw count and their associated volume and liquidity.
● Supported Market Metrics
Advance/Decline Line: A cumulative sum of the net difference between advancing and declining issues, offering a broad view of market participation.
McClellan Oscillator: Derived by subtracting a slow exponential moving average (EMA) of the daily advance/decline ratio from a fast EMA of the same ratio. This highlights short-term shifts in breadth momentum.
McClellan Z-Score (Inst): Applies a standard deviation transformation to the McClellan Oscillator over a lookback period, normalizing the data to highlight institutional overbought and oversold extremes.
Arms Index (TRIN): A volume-weighted breadth measurement calculated by dividing the Advance/Decline Ratio by the Advance/Decline Volume Ratio.
Cumulative Weighted Liquidity: Tracks the net monetary flow based on stock-specific weightings and closing prices, scaled down for readability.
● Divergence Engine
The script continuously compares the selected breadth metric against the actual Dow Jones Industrial Average index. Using pivot highs and lows, it detects both regular and hidden divergences, marking structural disconnects between market price and underlying participation.
🎨 Visual Guide
● Main Chart Elements
Main Series Line: The primary plotted line representing the selected metric (e.g., McClellan Z-Score). Its color is defined by the Main Value Color setting.
Moving Average: A smoothed line tracking the main series, offering a clearer view of the prevailing trend.
Institutional Bounds: When using the Z-Score mode, dashed lines appear at the +2.0 and -2.0 levels, marking statistical extremes.
● Divergence Markers
Regular Bullish Divergence: Displayed as a dashed line connecting pivot lows when the breadth metric is rising but the index is falling.
Hidden Bullish Divergence: Displayed as a dotted line when the breadth metric is falling but the index is making higher lows.
Regular Bearish Divergence: A dashed line on pivot highs marking falling breadth against rising index prices.
Hidden Bearish Divergence: A dotted line indicating rising breadth while the index trend remains structurally bearish.
● Statistical Dashboard
A dynamic table anchored to the bottom right of the chart provides real-time data on the current bar. It displays Advancing/Declining counts, Net Volume percentages, Total Liquidity, and the current TRIN value, color-coded based on positive or negative net flow.
📖 How to Use
● Trend Confirmation
Use the Advance/Decline Line or Cumulative Liquidity modes to confirm the primary trend. If the Dow Jones is reaching new highs but the A/D line is failing to follow suit, it signals poor participation and a potential impending reversal.
● Mean Reversion Trading
Switch to the McClellan Z-Score mode to identify exhaustion points. Readings extending beyond the +2.0 or -2.0 thresholds indicate that the market is statistically overextended. A cross back inside these bands can serve as a trigger for a mean-reversion setup, which is also supported by automated alerts.
● Divergence Trading
Monitor the automated divergence lines. A Regular Bullish Divergence printed at a significant support level on the index provides a high-probability indication that underlying buying pressure is accumulating, even as the visible price continues to drop.
⚙️ Inputs and Settings
● General Settings
Select Metric: The dropdown menu allowing you to choose which breadth calculation to display.
● Timeframe Configuration
Enable Automatic Timeframe Configuration: When enabled, the script dynamically adjusts the moving average and EMA lengths based on whether you are viewing an intraday, daily, or weekly chart.
● Manual Overrides
MA Length: Defines the lookback for the secondary moving average.
McClellan Fast/Slow EMA: Adjusts the sensitivity of the McClellan calculations.
Z-Score Lookback: Determines the historical sample size used for the standard deviation calculation.
Divergence Pivot Size: Sets the strictness of the pivot high/low detection for divergence plotting.
● Visual Configuration
Allows complete customization of the colors used for the main line, moving averages, divergence lines, and dashboard text.
🔍 Deconstruction of the Underlying Scientific and Academic Framework
● Market Breadth Theory
The script is fundamentally rooted in the academic premise of market breadth, which posits that a healthy market trend must be supported by the majority of its constituent assets. If a major index is driven by a small handful of heavily weighted stocks while the majority decline, the structural integrity of the trend is compromised.
● Standard Deviation and Z-Score Normalization
By applying a Z-Score transformation to the McClellan Oscillator, the indicator utilizes statistical normalization. The Z-Score calculates the number of standard deviations a data point is from the mean. In financial modeling, a Z-score beyond 2.0 or -2.0 encompasses roughly 95% of the data distribution, meaning instances outside these bounds represent significant anomalies or extreme institutional imbalances.
● Volume-Weighted Price Analysis
The inclusion of the Arms Index (TRIN) and Cumulative Weighted Liquidity introduces volume as a confirming variable. Academic research indicates that price movements supported by expanding volume carry higher validity. By comparing the ratio of advancing/declining issues to their respective volume flows, the script filters out low-conviction market noise.
⚠️ 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

Indicator

Swing Profile [BigBeluga]🔵 OVERVIEW
Swing Profile is a dynamic swing-based volume profiling tool that builds a complete volume profile for each completed market swing.
Instead of using fixed sessions or time ranges, the indicator anchors its profile strictly between confirmed swing highs and swing lows, allowing traders to analyze where volume accumulated inside each directional leg.
The profile updates in real time while a swing is still forming and finalizes once the swing direction flips, giving both historical and live insight into volume behavior.
🔵 CONCEPTS
Swing-Anchored Profiling — Volume is calculated only between confirmed swing highs and lows detected by the Swing Length input.
Directional Legs — Each bullish or bearish swing leg gets its own independent volume profile.
ATR-Adaptive Bins — Profile bin size is automatically scaled using ATR, keeping resolution consistent across volatility regimes.
Real-Time Rebuild — While a swing is still active, the profile continuously recalculates and redraws.
Finalized Profiles — Once direction flips, the profile is locked and marked as a completed swing.
🔵 FEATURES
Swing Volume Profile — Displays horizontal volume distribution for each swing leg.
Point of Control (PoC) — Highlights the price level with the highest traded volume inside the swing.
Buy / Sell Volume Separation — Tracks bullish (buy) and bearish (sell) volume inside each profile.
Delta Volume Calculation — Shows net buying vs selling pressure as a percentage.
Profile Outline — A polyline traces the outer shape of the volume distribution.
HeatMap Mode — Optional heatmap visualization showing volume intensity by color gradient.
ZigZag Swing Connector — Visual connection between swing highs and lows for structure clarity.
Custom Label Sizing — Adjust label size (Tiny → Huge) for clean chart scaling.
🔵 HOW TO USE
Identify High-Interest Zones — Use the PoC to locate price levels where the market spent the most time during a swing.
Trend Strength Analysis — Strong directional swings often show volume skewed toward one side of the profile.
Pullback Zones — Profiles help identify areas where price may react during retracements.
Continuation vs Reversal — Delta volume reveals whether buying or selling dominated the swing.
Live Monitoring — While a swing is forming, watch the real-time profile to anticipate where structure may complete.
🔵 DATA LABELS
T — Total traded volume inside the swing.
B — Buy volume (bullish candles).
S — Sell volume (bearish candles).
D — Delta volume (% difference between buy and sell volume).
🔵 CONCLUSION
Swing Profile delivers a precise, structure-aware view of volume by anchoring profiles directly to market swings.
By combining real-time profiling, PoC detection, delta analysis, and adaptive resolution, it provides deep insight into where participation truly occurred — making it a powerful tool for swing traders, structure traders, and volume-focused strategies. Indicator

Indicator

Total Futures Volume & Open Interest (Aggregated Curve)Description
Most futures indicators only look at the front contract, but that often tells an incomplete — and sometimes misleading — story.
This indicator solves that problem by aggregating Volume and Open Interest across the entire futures curve, not just the nearest expiry.
Instead of focusing on a single contract, the script automatically scans up to 40 futures contracts ahead (roughly one year forward) for the same underlying root symbol and sums their data into a single, unified series.
🔍 Why this matters
Open Interest is about commitment, not just activity.
A drop in front-month OI can simply mean rolls, not liquidation
Rising total OI confirms new money entering the market, not just contract switching
Divergences between price and aggregated OI often signal positioning stress, exhaustion, or regime shifts
By looking at total participation across all maturities, you get a much cleaner view of:
Real capital inflows vs. mechanical rolls
Structural positioning changes
Whether volatility is driven by speculation or true exposure changes
This is especially useful during high-volatility phases, contract roll periods, and major macro moves, where front-month data alone can be deceptive.
⚙️ How it works
Automatically iterates through the last 40 futures contracts of the same root symbol starting from ~1 year ahead expiry.
Aggregates: Total Open Interest and Total Volume
Lets you choose what to display directly from the indicator settings
Fully dynamic — no manual symbol selection, no roll management
The result is a continuous, roll-agnostic view of futures participation.
🧠 How to use it
Confirm breakouts with rising aggregated OI
Detect false moves when price expands but total OI contracts
Analyze post-spike behavior to see whether moves were driven by forced liquidation or fresh positioning
Compare volatility spikes against true market engagement
Indicator

ARPAKET_FLOW_CRYPTOArpaket_FLOW - PulseWire Script
---
## 📝 Short Description (for subtitle)
```
Advanced Money Flow Indicator with Multi-Asset Support, Whale Detection & Multi-Timeframe Analysis
```
---
## 📄 Full Description (copy below this line)
---
### 🌊 ARPAKET_FLOW - Smart Money Flow Indicator
**Arpaket_FLOW** is a comprehensive money flow indicator designed to help traders visualize whether smart money is flowing INTO or OUT of the market, along with the intensity of that flow. This indicator combines multiple proven technical analysis methods into a single, easy-to-read tool for making informed buy/sell decisions.
---
### 🎯 What Does This Indicator Do?
This indicator answers the most critical question in trading: **"Is money flowing into or out of this asset?"**
By combining volume analysis with price action, Arpaket_FLOW calculates a **Flow Score (0-100)** that tells you:
- **Above 70**: Strong money inflow → Bullish bias
- **50-70**: Moderate inflow → Cautiously bullish
- **30-50**: Neutral zone → Wait for confirmation
- **Below 30**: Strong money outflow → Bearish bias
---
### 🔬 How It Works
Arpaket_FLOW combines **6 powerful indicators** into one unified score:
| Component | Weight | Purpose |
|-----------|--------|---------|
| **Volume Ratio** | 25% | Detects unusual volume activity |
| **Money Flow Index (MFI)** | 20% | Measures buying/selling pressure with volume |
| **Chaikin Money Flow (CMF)** | 20% | Identifies accumulation/distribution |
| **On-Balance Volume (OBV)** | 15% | Tracks volume flow direction |
| **RSI Momentum** | 10% | Confirms price momentum |
| **VWAP Deviation** | 10% | Institutional price reference |
---
### ✨ Key Features
#### 🎛️ Multi-Asset Adaptation
- **Crypto Mode**: Higher volatility thresholds + Whale detection
- **Low Liquidity Stocks**: Adjusted sensitivity for thin markets (SET Index, Small Caps)
- **High Liquidity Markets**: Standard settings for Forex, Major Indices
#### ⏱️ Multiple Trading Styles
- **Scalping** (1-5 min): Ultra-fast signals with noise filtering
- **Day Trading** (15min-1H): Balanced speed and reliability
- **Swing Trading** (4H-Daily): Multi-timeframe confirmation
- **Position Trading** (Weekly+): Long-term flow analysis
#### 🐋 Whale Detection (Crypto)
Automatically detects unusual large-volume activity that may indicate whale accumulation or distribution. When volume exceeds 3x the average, a whale marker (🐋) appears on the chart.
#### 📊 Multi-Timeframe Panel
For Swing and Position traders, view flow direction across 4 timeframes (1H, 4H, Daily, Weekly) simultaneously to ensure alignment before entering trades.
#### 📋 Real-Time Dashboard
A clean dashboard displaying:
- Flow Direction (Inflow/Outflow/Neutral)
- Flow Score (0-100)
- Flow Strength (Weak/Moderate/Strong/Extreme)
- Volume Status (Normal/Surge/Whale)
- MFI & CMF readings
- Overall Signal (Buy/Sell/Neutral)
#### ⚠️ Divergence Detection
Automatically identifies bullish and bearish divergences between price and money flow, providing early reversal warnings.
---
### 📖 How To Use
#### Basic Usage:
1. **Select your Market Type** in settings (Crypto/Low Liquidity/High Liquidity)
2. **Select your Trading Style** (Scalping/Day Trading/Swing/Position)
3. **Watch the histogram**:
- Green bars = Money flowing IN (bullish)
- Red bars = Money flowing OUT (bearish)
- Bar height = Flow intensity
#### Signal Interpretation:
| Signal | Meaning | Suggested Action |
|--------|---------|------------------|
| 🟢 Green Triangle | Strong buy signal | Consider long entry |
| 🔴 Red Triangle | Strong sell signal | Consider short/exit |
| 🐋 Whale Icon | Large player activity | Watch for direction |
| DIV Label | Divergence detected | Potential reversal |
#### Best Practices:
- Use **higher timeframes** for trend direction
- Use **lower timeframes** for entry timing
- Wait for **MTF alignment** (3+ timeframes agreeing) for higher probability trades
- Combine with support/resistance levels for optimal entries
---
### ⚙️ Settings Guide
#### General Settings
- **Market Type**: Match to your traded asset
- **Trading Style**: Match to your timeframe
- **Sensitivity**: Conservative (fewer signals) → Aggressive (more signals)
#### Period Settings
- **Fast Period**: Short-term calculation (default: 7)
- **Slow Period**: Long-term calculation (default: 21)
- **Signal Smoothing**: Reduces noise (default: 5)
#### Alert Settings
- **Buy Threshold**: Score level for buy signals (default: 70)
- **Sell Threshold**: Score level for sell signals (default: 30)
- **Volume Surge Multiplier**: Volume spike detection (default: 2.0x)
- **Whale Multiplier**: Whale detection threshold (default: 3.0x)
---
### 🔔 Available Alerts
1. **Strong Buy/Sell Signal** - When confirmed signals trigger
2. **Enter Buy/Sell Zone** - When score crosses thresholds
3. **Whale Activity** - Accumulation or distribution detected
4. **Bullish/Bearish Divergence** - Price/flow divergence
5. **Volume Surge** - Unusual volume spike
6. **MTF Alignment** - Multiple timeframes agree
7. **Extreme Conditions** - Score above 90 or below 10
8. **Flow Reversal** - Direction change confirmed
---
### 📈 Recommended Combinations
This indicator works best when combined with:
- **Support/Resistance levels** for entry points
- **Trend lines** for direction confirmation
- **Moving Averages** (EMA 20/50/200) for trend context
- **Price Action patterns** for timing
---
### ⚠️ Disclaimer
This indicator is a tool to assist in trading decisions, not a guarantee of profits. Always:
- Use proper risk management
- Never risk more than you can afford to lose
- Backtest before live trading
- Consider multiple factors before entering trades
Past performance does not guarantee future results. Trading involves substantial risk of loss.
---
### 🙏 Credits & Acknowledgments
This indicator combines concepts from:
- Money Flow Index (Gene Quong & Avrum Soudack)
- Chaikin Money Flow (Marc Chaikin)
- On-Balance Volume (Joe Granville)
- Volume-Weighted Average Price (Institutional standard)
---
### 💬 Feedback
If you find this indicator helpful, please leave a comment or like! Your feedback helps improve future updates.
For questions or suggestions, feel free to comment below.
**Happy Trading!** 🚀
---
## 🏷️ Suggested Tags (for PulseWire)
```
moneyflow, volume, smartmoney, whaledetection, crypto, stocks, forex, mfi, cmf, obv, vwap, multitimeframe, buysellindicator, flowanalysis, accumulation, distribution
```
---
## 📸 Suggested Screenshots to Include
1. **Main Chart View** - Show the indicator with histogram and dashboard
2. **Buy Signal Example** - Zoom in on a successful buy signal
3. **Whale Detection** - Show crypto chart with whale markers
4. **MTF Panel** - Display multi-timeframe alignment
5. **Settings Panel** - Show available customization options Indicator

Indicator

Volume-Adjusted CCI Trend [Alpha Extract]A sophisticated trend identification system that combines dual EMA direction analysis with volume-weighted normalization and CCI momentum filtering for comprehensive trend validation. Utilizing Volume RSI integration and standard deviation-based bands that expand and contract with volume characteristics, this indicator delivers institutional-grade trend detection with multi-layered confirmation requirements. The system's volume adjustment mechanism modulates signal sensitivity based on participation strength while CCI thresholds prevent false signals during weak momentum conditions, creating a robust trend-following framework with reduced whipsaw susceptibility.
🔶 Advanced Dual EMA Direction Engine
Implements fast and slow exponential moving average comparison to establish primary trend direction bias with configurable period parameters for timeframe optimization. The system calculates trend direction as binary +1 (bullish when fast EMA exceeds slow EMA) or -1 (bearish when slow exceeds fast), providing foundational directional input that requires additional confirmation before generating actionable trend states.
🔶 Volume-Adjusted Normalization Framework
Features sophisticated normalization calculation that measures price deviation from basis EMA, scales by standard deviation, then applies volume-weighted adjustment factor for participation-sensitive signal generation. The system calculates Volume RSI to quantify relative volume strength, converts to ratio format, and multiplies normalized deviation by volume factor scaled by impact parameter, creating signals that strengthen during high-volume confirmations and weaken during low-volume moves.
// Volume-Adjusted Normalization
Vol_Ratio = Volume_RSI / 50
Vol_Factor = 1 + (Vol_Ratio - 1) * Vol_Impact
Dev = src - Basis_EMA
Raw_Normalized = Dev / (StdDev * Multiplier)
Vol_Adjusted_Norm = Raw_Normalized * Vol_Factor
🔶 CCI Momentum Filter Integration
Implements Commodity Channel Index threshold system with configurable upper and lower bounds to validate trend strength and filter sideways market conditions. The system calculates standard CCI with adjustable length, compares against asymmetric thresholds (default +100 bullish, -50 bearish), and requires CCI confirmation in addition to EMA direction and normalized deviation before transitioning trend states, ensuring only high-conviction signals generate entries.
🔶 Multi-Layer Trend State Logic
Provides intelligent trend state machine requiring simultaneous confirmation from EMA direction, volume-adjusted normalization threshold breach, and optional CCI momentum validation. The system maintains persistent trend state that only transitions when all three conditions align, preventing premature reversals during temporary retracements or low-volume fluctuations while capturing genuine trend changes with institutional-grade confirmation requirements.
🔶 Dynamic Volume Band Architecture
Creates volatility-adjusted bands around basis EMA using standard deviation multiplied by volume factor, producing channels that widen during high-volume periods and contract during low-volume consolidations. The system applies identical volume adjustment to band calculations as normalization metric, ensuring visual envelope consistency with underlying signal logic and providing intuitive reference boundaries for trend-following price action.
🔶 Gradient Strength Visualization System
Implements color intensity modulation based on normalized signal strength relative to threshold requirements, creating visual feedback that communicates trend conviction. The system calculates strength ratio by dividing absolute normalized value by threshold, caps at 1.0, and applies gradient interpolation from muted to vivid colors, instantly conveying whether current trend exhibits marginal or strong characteristics through line and candle coloring.
🔶 Volume RSI Calculation Engine
Utilizes RSI methodology applied to volume series rather than price to quantify relative participation strength with normalization to 0.5-1.5 range for factor multiplication. The system processes volume through standard RSI calculation, divides by 50 to center around 1.0, and produces ratio values where readings above 1.0 indicate above-average volume and below 1.0 suggest below-average participation for signal adjustment purposes.
🔶 Asymmetric Threshold Configuration
Features separate positive and negative normalization thresholds with independent CCI upper and lower bounds enabling optimization for bullish versus bearish signal generation characteristics. The system defaults to symmetric normalized thresholds (±0.2) but asymmetric CCI levels (+100/-50), recognizing that bullish momentum often requires stronger confirmation than bearish reversals in typical market structures.
🔶 Comprehensive Visual Integration
Provides multi-dimensional trend visualization through color-coded basis line, volume-adjusted bands with gradient fills, trend-synchronized candle coloring, and transition signal labels. The system enables selective display toggling for each visual component while maintaining consistent color scheme and strength-based intensity across all elements for cohesive chart presentation without overwhelming information density.
🔶 Alert and Signal Framework
Generates trend change alerts when state transitions occur with all confirmation requirements satisfied, providing notifications for bullish (transition to +1) and bearish (transition to -1) signals. The system implements state change detection through comparison with previous bar trend state, ensuring single alert per transition rather than continuous notifications during sustained trends.
🔶 Performance Optimization Architecture
Employs efficient calculation methods with null value handling for Volume RSI initialization and nz() functions preventing calculation errors during early bars. The system includes intelligent state persistence maintaining previous trend during ambiguous conditions and optimized gradient calculations balancing visual quality with computational efficiency across extended historical periods.
🔶 Why Choose Volume-Adjusted CCI Trend ?
This indicator delivers sophisticated trend identification through multi-layered confirmation combining directional EMA analysis, volume-weighted normalization, and momentum validation via CCI filtering. Unlike traditional trend indicators relying solely on price-based calculations, the volume adjustment mechanism ensures signals strengthen during high-participation moves and weaken during low-volume drifts, reducing false breakouts and choppy market whipsaws. The system's requirement for simultaneous EMA direction, normalized threshold breach, and CCI momentum confirmation creates institutional-grade signal quality suitable for systematic trend-following approaches across cryptocurrency, forex, and equity markets. The volume-adjusted bands provide dynamic support/resistance references while the gradient strength visualization enables instant assessment of trend conviction for position sizing and risk management decisions. Indicator
