Indicator

Quantum Kinetic Confluence [Velocity + CVD]Quantum Kinetic Confluence
Overview:
To truly understand market microstructure, you cannot look at price and volume as two separate entities. Standard volume bars sit at the bottom of your screen, completely detached from the physical price action.
The Quantum Kinetic Confluence indicator solves this by fusing two advanced institutional metrics—Price Acceleration (Velocity) and Cumulative Volume Delta (CVD)—directly into your main chart candlesticks. It provides an immediate, 4D read of market momentum, allowing you to visually identify exactly when and where the whales are stepping in.
Core Engines & Features:
The Kinetic Glow (Velocity): A custom physics engine calculates the weighted rate-of-change and acceleration of price. Choppy, low-momentum candles fade into a ghost-like transparency. When price physically accelerates, the candles burn a solid, brilliant Neon. (Renders infinitely on historical data).
The Whale Footprint (CVD Bubbles): The script calculates an intrabar approximation of buying volume versus selling volume (Delta). When a massive imbalance occurs that exceeds your custom moving average threshold, it prints a distinct "Whale Bubble" directly above or below the candle. (Renders infinitely on historical data).
Precision Delta Labels: For the ultimate micro-read, the indicator prints the exact numerical Delta value on the chart so you know exactly how heavy the institutional order flow is. (Note: PulseWire limits text labels to the most recent 500 bars, keeping your deep history clean while providing high-resolution data on the live edge).
How to Trade It:
You are looking for the ultimate kinetic confluence. When a candle burns Solid Neon (maximum acceleration) AND prints a Whale Bubble (maximum volume imbalance) in the direction of your macro trend, institutional algorithms have officially taken control of the tape.
⚠️ DISCLAIMER: STRICTLY FOR EDUCATIONAL PURPOSES
The information, scripts, and concepts provided in this publication are for educational and informational purposes only and do not constitute financial, investment, or trading advice. Trading in financial markets (including Forex, Crypto, Stocks, and Commodities) carries a high level of risk and may not be suitable for all investors. You could lose some or all of your initial investment. Past performance is not indicative of future results. Always conduct your own due diligence, backtest any strategy thoroughly, and consult with a certified financial advisor before making any trading decisions. By using this script, you acknowledge that you are solely responsible for your own trading actions and outcomes.
Indicator

Volume Bubble (Big Trades)Gemini said
Delta Volume Bubbles: How It Works
The Delta Volume Bubbles indicator is a sophisticated order flow tool designed to visualize "aggressive" market activity directly on your price chart. Instead of looking at a separate sub-window for volume, this script places circular "bubbles" on the candles where significant buying or selling pressure occurs.
1. The Core Logic: Delta Calculation
At its heart, the indicator uses Volume Delta, which is the difference between buying volume (at the ask) and selling volume (at the bid).
Positive Delta: More aggressive buying; the bubble is typically green.
Negative Delta: More aggressive selling; the bubble is typically red.
To provide precision, the script uses Lower Timeframe (LTF) data. For example, if you are on a 1-hour chart, it scans 1-minute data to see how volume was distributed within that hour.
2. Bubble Placement & Size
The indicator doesn't just put a dot at the close. It offers two placement modes:
Candle VWAP: Places the bubble at the Volume Weighted Average Price of that specific candle, showing you exactly where the "heavy" trading occurred.
Middle: Places the bubble at the candle’s midpoint (HL/2).
The size of the bubble is dynamic, scaling based on the Z-Score (a statistical measure of how "extreme" the volume is compared to the recent average). A "Huge" bubble represents a significant statistical outlier in volume.
3. Filtering and Intensity
The script filters out "noise" so your chart isn't cluttered.
Percentile Filter: Only shows bubbles if the volume is in the top X% (e.g., top 60%) of recent history.
Intensity Mode: When enabled, the colors shift from "Buy/Sell" to a heat map (Gray → Blue → Orange → Red) based on the pure strength of the volume, regardless of direction.
4. Visual Clarity
The recent update introduces a Transparency Slider. This allows you to make the bubbles "ghost-like," ensuring they don't hide the wick or body of the candlestick. This is crucial for price action traders who need to see if a big volume bubble resulted in a reversal pin bar or a breakout. Indicator

Indicator

Indicator

LVN FinderLVN Finder by QuantShok (JacobS369)
This script automatically identifies Low Volume Nodes (LVNs) from a calculated volume profile and plots them as horizontal levels on your chart. LVNs are price levels where relatively little volume has traded compared to surrounding areas — these zones often act as areas of low resistance where price moves quickly, or as potential support/resistance when retested.
The script builds a high-resolution volume profile over a configurable lookback period, pulls in 1-minute data for added granularity, scans for statistically significant volume valleys, merges nearby levels to reduce clutter, and draws them on your chart with a price table for quick reference.
Default settings are optimized for NQ (Nasdaq 100 Futures) on a 5-minute chart.
Settings Breakdown
Volume Profile Settings — These control the foundation of the profile itself. "Number of Rows" sets the resolution of the volume profile — higher means more granular detection but heavier computation. "LVN Lookback Days" determines how many trading days of data the profile is built from; shorter lookbacks give you more recent/relevant levels, longer lookbacks capture broader structure. "Rebuild Interval" controls how often the profile recalculates — set to 1 for a fresh rebuild every trading day.
LVN Detection — This is where you fine-tune what qualifies as a true LVN. "Window Size %" sets how wide the local neighborhood is when checking if a price row is a volume minimum — smaller values find tighter, more precise valleys while larger values only catch broader dips. "LVN Prominence %" is the most important filter — it requires that the volume valley drops at least this much below the surrounding peaks. Raise it to only see the most significant LVNs, lower it to surface more levels. "Use LVN Min Volume Filter" lets you exclude valleys that fall in extremely low-activity zones where the level may not be meaningful.
LVN Display — Toggle visibility, pick your line color, and set the line width.
Level Management — "Merge Nearby Levels" combines LVNs that are close together into a single level, keeping the one with the lowest volume. You can control the merge threshold by tick distance or percentage — useful to avoid clusters of redundant lines. "Extend Lines" controls how far the levels project forward on your chart. "Limit LVN Count" caps the total number of levels shown, prioritizing the lowest-volume (strongest) LVNs first.
Adapting to Other Instruments
If you're using this on something other than NQ, the main settings to adjust are merge distance (ticks and percentage) since different instruments have different tick sizes and price scales, prominence percentage depending on how cleanly volume distributes on that instrument, and lookback days based on how far back the relevant volume structure extends. For tighter instruments like ES, you might lower the merge ticks. For something like crypto with wider ranges, bump up the merge percentage and potentially lower the prominence threshold. Indicator

Absorption SignalsAbsorption Signals by QuantShok (JacobS369)
This script detects absorption candles — bars where aggressive selling is absorbed by buyers (bullish) or aggressive buying is absorbed by sellers (bearish). It uses PulseWire's built-in volume delta to measure the net buying/selling pressure within each bar, then flags bars where the delta diverges from the price action on abnormally high volume. Each signal is scored on a 1–5 star confidence system so you can filter for only the highest-quality setups.
The core logic: a bullish absorption fires when the bar closes green (or flat) despite net negative delta on a volume spike — meaning sellers pushed hard but buyers absorbed it all and held price up. A bearish absorption is the mirror — the bar closes red despite net positive delta on a volume spike, meaning buyers pushed but sellers absorbed the pressure and drove price down.
Default settings are optimized for NQ (Nasdaq 100 Futures).
Settings Breakdown
Absorption Settings — "Volume Lookback Period" (default 20) is the number of bars on your current chart timeframe used to calculate average volume and standard deviation for the z-score. On a 5-minute chart, that's the last 20 five-minute bars. "Volume Z-Score Threshold" (default 1.5) sets how many standard deviations above average the current bar's volume needs to be to qualify as a spike — raise it to only catch bigger volume anomalies, lower it for more signals. "Minimum Wick Size %" is the input for wick filtering though the confidence system handles wick scoring internally at the 40% level. "Delta Timeframe" (default 1 minute) controls the resolution used to estimate volume delta — this is independent of your chart timeframe and pulls 1-minute data to approximate buy vs sell volume within each bar.
Confidence Settings — "Minimum Stars to Display" (default 2) filters out low-confidence signals so only setups meeting your threshold appear on the chart. The confidence scoring works by starting at 1 star for any valid absorption signal, then adding stars for: volume z-score above 2.0 (+1), volume z-score above 3.0 (+1), delta z-score above 2.0 (+1), significant wick size above 40% of bar range (+1), and multi-bar confirmation (+1), capped at 5. "Require Multi-Bar Confirmation" checks whether consecutive bars show absorption at the same price level. "Multi-Bar Tolerance" controls how close those consecutive bars need to be (as a percentage of ATR) to count as confirming each other.
Visuals — Toggle bubbles, confidence labels, and the dashboard independently. Bubble size scales with confidence (tiny for 1 star up to huge for 5 stars), and color intensity increases with higher confidence. The dashboard in the top right shows live volume z-score, delta z-score, net delta, current absorption signal, and multi-bar confirmation status. Hovering over any label shows a detailed tooltip with all the underlying stats for that signal.
Adapting to Other Instruments
The main settings to consider adjusting are the volume lookback period (shorter for faster-moving instruments, longer for steadier ones), the z-score threshold (lower it for instruments with less volatile volume patterns, raise it for noisier ones), and the multi-bar tolerance (widen it for instruments with larger ATR). The delta timeframe can stay at 1 minute for most instruments but you might try a higher resolution if your broker provides it.
How to Use
This is not a buy/sell signal generator — it identifies where institutional-level absorption is likely occurring. Use these signals as confluence with your existing strategy. A 4–5 star bullish absorption at a known support level or LVN is a very different setup than a 2-star signal in the middle of nowhere. The tooltip on each label gives you the full breakdown so you can evaluate the quality yourself. 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 Delta with Fibonacci Projection [UAlgo]Volume Delta Profile with Fibonacci Projection is a structure driven profiling tool that combines swing discovery, lower timeframe volume allocation, delta analysis, Fibonacci mapping, and forward target projection inside a single chart overlay. Its purpose is not only to show where price has moved, but also to show how participation was distributed inside that move and where the next projected objective levels may sit.
The script begins by identifying a dominant recent swing inside a user defined lookback window. Once that swing is found, it becomes the structural anchor for everything else in the indicator. The swing defines the full high to low range, the Fibonacci ladder, the profile segmentation, the delta bands, and the forward projection path. This creates a unified framework where all visual components are tied to the same market structure instead of being calculated independently.
A key part of the script is its lower timeframe profiling engine. It requests intrabar data from a lower timeframe and uses that data to distribute volume into price rows and Fibonacci bands inside the active swing. This allows the indicator to estimate where buying activity and selling activity were concentrated with far more detail than a simple bar based approximation. If lower timeframe data is unavailable for a given bar, the script falls back to the chart bar itself so the profile can still be built.
The profile section shows how total activity was distributed across the swing range, while the delta section shows which Fibonacci bands leaned more bullish or bearish in terms of estimated participation. A Point of Control line can also be drawn to highlight the most active profile row. In addition, the script projects a continuation path from a chosen Fibonacci level toward target extensions such as 100 percent, 127.2 percent, and 161.8 percent of the swing.
The result is a tool that can be used for structure analysis, premium and discount mapping, participation study, and projection planning. It is especially useful for traders who want to combine profile logic and Fibonacci logic inside the same structural framework rather than treating them as separate tools.
🔹 Features
🔸 Structure Based Swing Detection
The script automatically finds a recent dominant swing inside the selected lookback period and requires a minimum separation between the major high and low. This gives the indicator a clean structural base before any profile or projection is drawn.
🔸 Auto Lower Timeframe Intrabar Analysis
The indicator can automatically choose a lower timeframe for intrabar volume analysis based on the current chart timeframe. A custom intrabar timeframe can also be used if desired.
🔸 Volume Profile Across the Swing Range
The full swing range is divided into profile rows, and lower timeframe volume is distributed into those rows according to price overlap. This builds a true participation map across the swing rather than a simple one point volume assignment.
🔸 Delta by Fibonacci Band
In addition to row based profiling, the script also groups volume into six Fibonacci bands between the swing extremes. Each band receives estimated buy and sell volume, and the script calculates directional delta for each band.
🔸 Fib POC Highlighting
A Point of Control line can be displayed at the profile row with the highest total accumulated volume, giving the user a quick view of the strongest participation level inside the swing.
🔸 Flexible Row Sizing
Profile row size can be determined automatically from ATR and tick size, or it can be defined manually through ticks per row. This makes the profile adaptable to very different instruments.
🔸 Forward Projection Path
The script draws a projection path starting from a selected retracement level and extends it toward major target levels such as 100 percent, 127.2 percent, and 161.8 percent of the swing range.
🔸 Optional Target Boxes
Target zones can be shown as compact boxes around the projected objective levels, helping the user visualize likely reaction areas rather than only exact lines.
🔸 Bull and Bear Participation Coloring
The profile and delta display use directional coloring to separate estimated buying volume from estimated selling volume. This makes the participation structure much easier to read visually.
🔸 Complete Structural Integration
The swing line, Fibonacci levels, volume profile, delta profile, Point of Control, and projection targets all come from the same underlying swing. This keeps the whole tool internally consistent.
🔹 Calculations
1) Defining the Swing Object
type Swing
int startIndex
int endIndex
float startPrice
float endPrice
float lowPrice
float highPrice
float swingRange
bool bullish
int recentOffset
int olderOffset
This object stores the full structural context of the move being analyzed.
It contains:
where the swing starts,
where it ends,
the starting price,
the ending price,
the full low and high of the move,
the total range,
the direction,
and the bar offsets used for the profiling loop.
This is important because the script does not calculate the profile on an arbitrary fixed range. It first defines a real market swing and then builds all later logic from that anchor.
2) Choosing the Lower Timeframe Automatically
autoLowerTf() =>
if timeframe.isseconds
"1S"
else if timeframe.isminutes and timeframe.multiplier == 1
"1S"
else if timeframe.isintraday
"1"
else if timeframe.isdaily
"5"
else
"60"
This function selects a lower timeframe automatically according to the current chart timeframe.
Very fast charts use one second data.
Intraday charts use one minute data.
Daily charts use five minute data.
Higher charts default to sixty minute data.
The goal is to obtain more granular intrabar structure without forcing the user to choose a lower timeframe manually every time.
3) Computing Automatic Row Size
autoTicksPerRow(int atrLen) =>
int t = int(math.round((0.2 * ta.atr(atrLen)) / syminfo.mintick))
math.max(1, t)
When row size mode is set to Auto, the script derives the profile row size from ATR and tick size.
It takes twenty percent of ATR, converts that value into ticks, then enforces a minimum of one tick.
This creates a profile row height that adapts to the instrument’s current volatility instead of staying fixed across very different market conditions.
4) Finding the Major Swing
makeSwing(int lookback, int minBars) =>
int hiOff = -ta.highestbars(high, lookback)
int loOff = -ta.lowestbars(low, lookback)
int minSep = math.min(minBars, math.max(1, lookback - 1))
bool bullish = loOff > hiOff
int startIndex = bullish ? bar_index - loOff : bar_index - hiOff
int endIndex = bullish ? bar_index - hiOff : bar_index - loOff
float startPx = bullish ? lo : hi
float endPx = bullish ? hi : lo
This function discovers the dominant swing inside the selected lookback.
First, it locates the highest bar and lowest bar inside the lookback window. Then it determines which came first in time. If the low occurred earlier and the high occurred later, the swing is bullish. If the high occurred earlier and the low occurred later, the swing is bearish.
The function also forces a minimum separation between the swing endpoints. If the raw highest and lowest points are too close together, it searches farther out to build a more meaningful move.
So the swing used by the indicator is not just the highest high and lowest low. It is a structurally filtered move with time separation and direction.
5) Fibonacci Price Calculation
method fibPrice(Swing s, float ratio) =>
s.bullish ? s.highPrice - s.swingRange * ratio : s.lowPrice + s.swingRange * ratio
This method converts a Fibonacci ratio into an actual price inside the current swing.
For bullish swings, ratios are measured downward from the swing high.
For bearish swings, ratios are measured upward from the swing low.
So the Fibonacci ladder always respects swing direction and preserves the standard premium and discount interpretation.
6) Defining the Six Internal Fibonacci Bands
method bandRatioAt(Swing s, int slot) =>
float r = 0.0
if s.bullish
switch slot
0 => r := 1.000
1 => r := 0.786
2 => r := 0.618
3 => r := 0.500
4 => r := 0.382
5 => r := 0.236
6 => r := 0.000
else
switch slot
0 => r := 0.000
1 => r := 0.236
2 => r := 0.382
3 => r := 0.500
4 => r := 0.618
5 => r := 0.786
6 => r := 1.000
r
These ratio slots define the six profiling bands used in the delta section.
The bands span the space between:
1.000 and 0.786
0.786 and 0.618
0.618 and 0.500
0.500 and 0.382
0.382 and 0.236
0.236 and 0.000
The order is reversed automatically for bearish swings so the structure remains directionally consistent.
So the delta section is not arbitrary. It measures directional participation inside familiar Fibonacci zones.
7) Mapping Prices Into Profile Rows
locateRowIndex(float lowPrice, float highPrice, float step, int rows, float price) =>
float clampedPrice = math.max(lowPrice, math.min(highPrice, price))
int idx = int(math.floor((clampedPrice - lowPrice) / step))
math.max(0, math.min(rows - 1, idx))
This helper function converts any price into its corresponding profile row.
The price is first clamped inside the swing boundaries. Then the script measures how far above the swing low the price sits and divides that by the row step size.
This gives the row index where the price belongs. That mapping is necessary for distributing intrabar volume into the correct profile level.
8) Mapping Prices Into Fibonacci Bands
locateBandIndex(Swing s, float price) =>
float clampedPrice = math.max(s.lowPrice, math.min(s.highPrice, price))
int idx = 5
for b = 0 to 5
float p1 = s.bandPriceAt(b)
float p2 = s.bandPriceAt(b + 1)
float bandLow = math.min(p1, p2)
float bandHigh = math.max(p1, p2)
bool inside = b == 5 ? (clampedPrice >= bandLow and clampedPrice <= bandHigh) : (clampedPrice >= bandLow and clampedPrice < bandHigh)
if inside
idx := b
break
idx
This function assigns a price to one of the six Fibonacci bands.
It walks through the band boundaries one by one, checks where the price sits, and returns the matching band index.
That index is later used when a bar or an intrabar has zero height or when band overlap needs to be accumulated. So this function is the bridge between raw prices and the delta profile zones.
9) Lower Timeframe Data Request
string ltf = useCustomLtf ? customLtf : autoLowerTf()
= request.security_lower_tf(syminfo.tickerid, ltf, )
This is the intrabar engine.
The script first decides whether to use the automatic lower timeframe or the custom user defined one. Then it requests arrays of lower timeframe open, high, low, close, and volume values for each chart bar.
This means every bar inside the swing can be broken down into smaller internal bars, allowing a more detailed volume allocation than a single chart timeframe candle would allow.
10) Determining Effective Profile Row Size
int ticksPerRow = rowSizeMode == "Auto" ? autoTicksNow : manualTicksPerRow
float minRowStep = math.max(syminfo.mintick, ticksPerRow * syminfo.mintick)
float rowStep = math.max(minRowStep, swing.swingRange / rowsInput)
int rowsEff = math.max(1, int(math.ceil(swing.swingRange / rowStep)))
rowStep := swing.swingRange / rowsEff
This block finalizes the profile geometry.
It first determines the tick size per row, either from the automatic ATR based logic or from the manual input. Then it ensures the row step is not smaller than that minimum. After that, it calculates how many rows are actually needed to cover the full swing range.
Finally, it recalculates the row height so the entire swing fits perfectly into the effective row count.
So the profile is always both instrument aware and range aligned.
11) Estimating Intrabar Direction
int dir = prevDir
if ic > io
dir := 1
else if ic < io
dir := -1
else
if not na(prevClose)
if ic > prevClose
dir := 1
else if ic < prevClose
dir := -1
else
dir := prevDir
else
dir := prevDir
This block decides whether a lower timeframe bar should be treated as bullish or bearish for volume allocation.
If close is above open, the bar is treated as buying.
If close is below open, the bar is treated as selling.
If the bar is neutral, the script falls back to its relation versus the previous close. If that is also neutral, it inherits the previous direction.
This gives the script a practical directional model for classifying intrabar volume into buy side or sell side participation.
12) Distributing Intrabar Volume Into Profile Rows
for r = 0 to rowsEff - 1
float rowLow = swing.lowPrice + rowStep * r
float rowHigh = rowLow + rowStep
float overlap = math.min(ih, rowHigh) - math.max(il, rowLow)
if overlap > 0
float frac = overlap / iRange
rowBuy.addAt(r, buyV * frac)
rowSell.addAt(r, sellV * frac)
This is one of the most important calculations in the script.
For every lower timeframe bar, the script checks how much of that bar overlaps each profile row. If overlap exists, volume is distributed proportionally according to the fraction of the bar’s range that passed through that row.
So if an intrabar spends more range inside a certain row, more of its volume is assigned there.
This is much more realistic than placing the full volume into a single price row because it respects the bar’s actual vertical path through price.
13) Distributing Intrabar Volume Into Fibonacci Bands
for b = 0 to 5
float p1 = swing.bandPriceAt(b)
float p2 = swing.bandPriceAt(b + 1)
float bandLow = math.min(p1, p2)
float bandHigh = math.max(p1, p2)
float bandOverlap = math.min(ih, bandHigh) - math.max(il, bandLow)
if bandOverlap > 0
float bFrac = bandOverlap / iRange
bandBuy.addAt(b, buyV * bFrac)
bandSell.addAt(b, sellV * bFrac)
The same overlap logic is then applied to the six Fibonacci bands.
Each intrabar contributes buy volume and sell volume into the band or bands it overlaps. The contribution is proportional to the amount of overlap relative to the bar’s own range.
So the delta section is not built from row totals. It is built directly from participation inside each Fibonacci segment of the swing.
14) Fallback Logic When Lower Timeframe Arrays Are Empty
else
float bo = open
float bh = high
float bl = low
float bc = close
float bv = math.max(volume , 0)
int dir = barDirFromOffset(off)
If the lower timeframe request returns no intrabar data for a specific chart bar, the script falls back to the bar itself.
It reads the normal chart timeframe OHLCV values, determines a direction using the helper method, and then distributes that bar’s volume into rows and bands using the same overlap logic.
This is important because it makes the indicator robust. The profile can still be constructed even when granular intrabar data is unavailable.
15) Point of Control Calculation
float pocVol = 0.0
float pocPrice = na
for r = 0 to rowsEff - 1
float totalRow = rowBuy.get(r) + rowSell.get(r)
if totalRow > pocVol
pocVol := totalRow
pocPrice := swing.lowPrice + rowStep * (r + 0.5)
This block finds the Point of Control.
The script scans every profile row, calculates total row volume as buy plus sell, and keeps track of the highest one. The midpoint of that strongest row becomes the Point of Control price.
So the POC is the single most active price area inside the swing based on the constructed row profile.
16) Building the Horizontal Volume Profile
int totalWidthBars = math.max(1, int(math.round(profileWidthBars * (total / maxRowTotal))))
sellWidthBars := int(math.round(totalWidthBars * (sellVol / total)))
buyWidthBars := totalWidthBars - sellWidthBars
if sellWidthBars > 0
pushBox(boxPool, profileStartX, rowHigh, profileStartX + sellWidthBars, rowLow, color.new(bearColor, 72), color.new(bearColor, 100))
if buyWidthBars > 0
int buyLeftX = profileStartX + sellWidthBars
int buyRightX = buyLeftX + buyWidthBars
pushBox(boxPool, buyLeftX, rowHigh, buyRightX, rowLow, color.new(bullColor, 72), color.new(bullColor, 100))
This is the profile drawing engine.
Each row’s total participation is scaled relative to the strongest row. That determines how wide the full profile bar should be.
Then the script splits that width between sell volume and buy volume according to their relative shares. The selling segment is drawn first, followed by the buying segment.
So each row shows both:
how much total volume was traded there,
and how that volume split between bearish and bullish participation.
17) Delta Calculation by Fibonacci Band
float deltaV = buyV - sellV
float deltaPct = totalV > 0 ? (deltaV / totalV) * 100.0 : 0.0
color dColor = math.abs(deltaV) <= 0.0000001 ? fibColor : deltaV > 0 ? bullColor : bearColor
This block calculates directional delta inside each Fibonacci band.
Delta is simply buy volume minus sell volume.
Delta percent then normalizes that difference by total volume inside the band.
If the result is positive, the band leaned bullish.
If the result is negative, the band leaned bearish.
If the result is near zero, the band was balanced.
So the delta section tells the user not just how much activity occurred in a band, but which side dominated it.
18) Scaling the Delta Bars
maxBandAbs := math.max(maxBandAbs, math.abs(buyV - sellV))
int dWidthBars = maxBandAbs > 0 and math.abs(deltaV) > 0 ? math.max(1, int(math.round(deltaWidthBars * (math.abs(deltaV) / maxBandAbs)))) : 1
pushBox(boxPool, deltaStartX, bandHigh, deltaStartX + dWidthBars, bandLow, color.new(dColor, 76), color.new(dColor, 100))
The script first finds the maximum absolute delta among all bands. Then it uses that value as the scaling reference for the delta boxes.
A band with the strongest absolute delta receives the widest box. Smaller delta bands receive proportionally narrower boxes.
So the delta profile communicates both direction and relative strength across the Fibonacci segments of the swing.
19) Drawing the Core Fibonacci Ladder
for i = 0 to fibRatios.size() - 1
float ratio = fibRatios.get(i)
float price = swing.fibPrice(ratio)
bool keyLevel = math.abs(ratio - projBaseRatio) < 0.0001 or ratio == 0.0 or ratio == 1.0
color lc = keyLevel ? color.new(fibColor, 10) : color.new(fibColor, 68)
pushLine(linePool, swing.startIndex, price, fibEndX, price, lc, keyLevel ? line.style_dashed : line.style_dotted, 1)
This loop draws the Fibonacci levels across the swing.
Every ratio from zero to one is converted into price using the earlier swing based Fibonacci method. The selected projection base level plus the zero and one boundaries are emphasized, while the other internal levels are drawn more softly.
So the user gets a full retracement map tied directly to the chosen swing.
20) Building the Projection Path and Targets
float cPrice = swing.fibPrice(projBaseRatio)
float target1 = swing.bullish ? cPrice + swing.swingRange * 1.000 : cPrice - swing.swingRange * 1.000
float target2 = swing.bullish ? cPrice + swing.swingRange * 1.272 : cPrice - swing.swingRange * 1.272
float target3 = swing.bullish ? cPrice + swing.swingRange * 1.618 : cPrice - swing.swingRange * 1.618
pushLine(linePool, swing.endIndex, swing.endPrice, cX, cPrice, color.new(projColor, 30), line.style_dashed, 2)
pushLine(linePool, cX, cPrice, t1X, target1, color.new(projColor, 0), line.style_solid, 2)
pushLine(linePool, t1X, target1, t2X, target2, color.new(projColor, 18), line.style_solid, 2)
pushLine(linePool, t2X, target2, t3X, target3, color.new(projColor, 35), line.style_solid, 2)
This is the forward projection engine.
The chosen Fibonacci retracement level becomes point C. From that point, the script projects three forward targets based on the swing range:
100 percent,
127.2 percent,
and 161.8 percent.
For bullish swings, the targets are projected upward.
For bearish swings, the targets are projected downward.
The script then connects the swing end to point C and extends the projection path forward through each target.
So the projection section transforms the structural swing into a directional roadmap.
21) Drawing Target Boxes
float zoneHalf = math.max(swing.swingRange * 0.015, syminfo.mintick * 8)
if showTargets
pushBox(boxPool, t1X - 1, target1 + zoneHalf, t1X + 2, target1 - zoneHalf, color.new(projColor, 87), color.new(projColor, 55))
pushBox(boxPool, t2X - 1, target2 + zoneHalf, t2X + 2, target2 - zoneHalf, color.new(projColor, 89), color.new(projColor, 60))
pushBox(boxPool, t3X - 1, target3 + zoneHalf, t3X + 2, target3 - zoneHalf, color.new(projColor, 91), color.new(projColor, 68))
Instead of marking the targets as exact single prices only, the script can draw small target boxes around them.
The vertical thickness of each box is based on a fraction of the swing range, with a minimum tick based width. This helps present the targets as realistic reaction zones rather than razor thin levels.
So the projection module provides both precise target labels and visual target areas. Indicator

Liquidity Heatmap [MTF] - Volume Delta [PhenLabs]Liquidity Heatmap — Volume Delta
Version: PineScript™ v6
📌 Description
The PhenLabs Liquidity Heatmap — Volume Delta is an advanced, anti-clutter volume and order flow analysis tool. It calculates and visualizes a single composite profile by merging Volume and Delta data across up to four distinct timeframes simultaneously. By isolating the Point of Control (PoC) and Delta-PoC, this indicator helps traders pinpoint high-probability liquidity zones, accumulation/distribution nodes, and critical support/resistance levels without overwhelming the chart with overlapping profiles.
🚀 Points of Innovation
Single Composite Profile: Merges multiple timeframe profiles into one clean, unified heatmap, drastically reducing chart clutter.
Integrated Delta Analysis: Evaluates intrabar buying and selling pressure to locate the Delta-PoC, revealing where institutional aggression is concentrated.
Automated MTF Confluence: Detects and highlights overlapping liquidity zones across different timeframes based on customizable tolerance percentages.
🔧 Core Components
Bin Computation Engine: Divides price action into a user-defined number of price bins, aggregating both total volume and delta over a specified lookback period.
MTF Data Aggregation: Utilizes advanced security requests to fetch bin data from up to four different timeframes (e.g., 1m, 15m, 1H, 4H) without repainting.
State Tracking: Monitors the shift in PoC and Delta-PoC to detect bias flips and momentum changes.
🔥 Key Features
Dynamic Dashboard: An interactive on-chart table displays current PoC, Delta-PoC, directional bias, and structural flips for each active timeframe.
Actionable Signals: Automatically plots on-chart labels for PoC Breakouts (▲/▼) and Delta Reversals (Δ↑/Δ↓) to highlight immediate trade opportunities.
Accumulation/Distribution Tinting: Visually labels volume nodes to quickly identify where buyers or sellers are trapped.
Customizable Cutoffs: Includes a volume cutoff filter to hide insignificant price bins and maintain visual clarity.
🎨 Visualization
Shaded Heatmap Bins: Projects volume nodes directly onto the price axis.
Precision Lines: Clearly plots the PoC and Delta-PoC levels for precise entry and exit targeting.
On-Chart Labels: Minimalist signal tags keep the focus on price action while alerting to structural shifts.
📖 Usage Guidelines
Lookback & Bins: Adjust the lookback bars (default 200) and price bins (default 50) based on your chart's volatility. Fewer bins provide a cleaner look.
Timeframes: Enable up to three additional higher timeframes to build a comprehensive view of macro liquidity.
Volume Cutoff: Increase the cutoff percentage to hide thin, irrelevant volume nodes and focus solely on high-value areas.
✅ Best Use Cases
Liquidity Sweeps: Watch for price to pierce the composite PoC or Delta-PoC and reject, signaling a successful liquidity sweep.
Trend Continuation: Enter trades in the direction of the macro bias when lower timeframe Delta Reversal signals align with higher timeframe PoCs.
Breakout Trading: Capitalize on explosive moves when price definitively breaks and holds outside a clustered MTF confluence zone.
💡 Note
This indicator is optimized for lower timeframes acting as the base chart, with higher timeframes providing the macro structural data. Always use this tool in conjunction with price action analysis and broader market context.
Indicator

ZenAlgo - DojiOverview
This indicator identifies Doji candles and adds two contextual filters before creating an alert: a relative volume expansion filter and a normalized directional-shift filter. Most Doji indicators simply detect candle shape. This script instead adds contextual conditions so that alerts appear only when the Doji occurs together with increased participation and a change in short-term directional pressure.
Doji candles appear frequently on their own, so the script focuses on situations where candle balance, elevated activity, and a directional shift occur at the same time.
How the indicator works
The script begins by evaluating candle structure. It measures the full candle range, the size of the body, and the size of the upper and lower wicks relative to the entire candle. A candle is considered a Doji when the body occupies only a small portion of the range.
After identifying the base Doji structure, the candle is classified into one of several common Doji types depending on the relative size of the wicks:
Dragonfly Doji – very small upper wick and long lower wick.
Gravestone Doji – very small lower wick and long upper wick.
Long-legged Doji – both wicks are relatively long.
Standard Doji – small body without the extreme wick proportions of the other types.
A Doji indicates that price moved during the bar but finished close to the opening level, suggesting temporary balance between buyers and sellers.
Volume context (PVSRA-style comparison)
After the candle structure is detected, the script evaluates trading activity.
Current volume is compared with the average volume over a recent lookback window. If current volume exceeds that average by a configurable multiple, the candle is considered to occur during elevated participation.
This step is important because a Doji formed during low activity may simply reflect quiet trading, while a Doji formed during higher participation means more trading occurred but the candle still closed near equilibrium.
Normalized price-change proxy
The script then evaluates short-term directional behavior.
It measures the percentage change between consecutive closing prices. This series is smoothed to reduce noise and then normalized relative to recent behavior. The normalization allows the script to determine whether the current directional movement is unusually positive or negative compared with recent activity.
The script compares this normalized value with the previous bar. An alert requires the value to change sign between the two bars, which indicates that the short-term directional pressure has flipped.
Why the components are combined
Each component describes a different aspect of market behavior:
The Doji describes temporary balance inside a candle.
The volume comparison measures whether that balance occurred during elevated participation.
The directional flip indicates a shift in short-term pressure.
Basic Doji markers highlight every small-body candle. This indicator is more selective because it only highlights cases where equilibrium, participation, and directional change appear together.
Final alert logic
An alert is created when the following conditions occur simultaneously:
A Doji is present on the current candle or the previous candle.
Volume exceeds the recent average by the configured multiple when the volume filter is enabled.
The normalized directional reading flips sign between two consecutive bars.
Alerts are separated into bullish and bearish categories according to the direction of the normalized reading after the flip.
How to interpret the alerts
A bullish alert means the script detected a Doji context with elevated volume and a positive directional flip.
A bearish alert means the same conditions occurred with a negative directional flip.
The alert marks a moment where price equilibrium, increased participation, and directional change appeared together. These conditions may appear near short-term transitions, pauses, or local turning points.
How to use the indicator
This indicator is intended as a contextual chart tool rather than a standalone trading system.
Use alerts to locate Doji candles confirmed by participation and directional change.
Interpret bullish alerts as possible upward transitions and bearish alerts as possible downward transitions.
Evaluate the alert location relative to support, resistance, or recent trend structure.
Combine the alerts with other analysis tools or higher timeframe context.
Why Heikin Ashi often works well
The script can be used on any chart type, but Doji detection often becomes clearer on Heikin Ashi candles.
Heikin Ashi candles smooth short-term price fluctuations by averaging values from multiple bars. Because the indicator relies on candle body and wick proportions, this smoothing reduces small random Doji created by short-term noise and produces clearer candle structures.
Limitations
Doji candles occur frequently and do not inherently indicate reversals.
Volume filters depend on the quality and meaning of the exchange’s volume data.
The directional proxy is based on price changes rather than direct order flow.
Different markets, timeframes, and preset settings can change how often alerts appear.
The indicator highlights situations where candle equilibrium, elevated participation, and directional change appear together, but it does not determine future price direction. Indicator

Market Structure Volume Profiles [Kioseff Trading]Hello traders and friends!
Introducing: "Market Structure Volume Profiles".
This script combines market structure with volume profiling and CVD to show how volume develops inside each structural changes of the market.
Instead of building one continuous profile across a session, this script creates a new volume profile for each completed BoS or CHoCH, allowing you to study the internal auction of each behavioral regime independently.
🔹Features
Detects and displays BoS and CHoCH
Builds a dedicated volume profile for each new structure
Displays profiles in Stacked or Split mode
Optional Mini Profile mode for a compact structure profile view
Shows buy-side and sell-side volume distribution
Displays POC for each profile
Optional extended POC and naked POC tracking
Displays Value Area (VA) for each completed structure
Tracks and plots CVD by structural leg
Optional market structure candle coloring
Optional structure statistics label
Uses lower timeframe data to build more detailed internal volume distribution
🔹How it works
This script tracks market structure and recalculates volume profiles for each structural change.
Whenever price confirms a Break of Structure (BoS) or Change of Character (CHoCH), the volume accumulated during that completed leg is organized into a profile. This allows you to examine how volume was distributed throughout the move, where the heaviest participation occurred, and whether buying or selling dominated the leg.
Rather than asking only where price moved, this script helps answer:
where volume concentrated during the move
whether the move was supported by participation
where value developed inside the structural range
how buy and sell volume were distributed across price
Each profile is built from lower timeframe data so that the structural leg can be broken into price levels and analyzed internally.
🔹What it shows
🔸Market Structure
The script identifies major structural events and labels them as:
BoS
CHoCH
Profiles to be tied directly to meaningful structural transitions.
🔸Volume Profile by Structure
Each completed structural leg gets its own profile, showing:
buy volume at each level
sell volume at each level
total participation across the leg
the internal shape of the auction
This makes it easier to compare continuation legs against reversal legs.
You can color BoS and CHoCH generated profiles distinctly. Making it easier to trach where each profile sits inside broader market action.
🔸Point of Control (POC)
The script can display the POC of each structural profile, showing the price level with the highest traded volume during that leg.
The script can also display the Value Area for each profile, helping identify where the majority of volume was concentrated during the structural move.
🔸CVD
The script tracks Cumulative Volume Delta throughout the current structure and plots it in the pane.
CVD can be reset by:
CHoCH
BoS + CHoCH
Day
Week
This makes it possible to study delta behavior in a structural context rather than only in a session-based one.
🔸Structure Stats
Optional structure statistics can be displayed, including:
Range
High
Low
Buy volume
Sell volume
Delta
Return
This gives a summary of the completed structural move.
🔸Why use it
This script is designed for traders who want to combine:
market structure
volume profiling
delta/CVD
auction logic
Because profiles are anchored to structure instead of session time, they can help reveal differences between:
strong continuation legs
weak continuation legs
reversal legs
imbalanced breakouts
balanced rotations
🔸Mini Profiles
The indicator has two separate drawing methods for each VP.
The detailed profile is used when the structural move has enough bar data to create a detailed profile.
When not enough data exists, a mini profile is used. You can select only to use mini profiles if you prefer the style.
The internal logic to calculate each volume profile is similar. However, the detailed profile "scrunches" when not enough bar data exists to calculate it on - that's when mini profile takes over.
🔸Split Profile
You can also choose to show split volume profiles.
This is more similar to how a delta profile is shown. This is a styling preference only.
Rows Limit
Detailed profiles can use up to 500 rows.
Higher values were giving a "response too large" error, so I restricted the max to 500.
🔹Summary
That’s about it!
The goal of this script is simply to combine market structure with volume profiles and CVD so you can see how volume develops inside each structural move instead of across arbitrary time windows.
By anchoring profiles to BoS and CHoCH, you can study how participation builds during continuations, reversals, and rotations - and get a better feel for how each move was actually formed internally.
Hope you find it useful (:
Thank you guys and thank you PulseWire! Indicator

TickCharts [crlmx]Volume-based candlestick chart - each candle represents a fixed dollar volume, rather than a time interval. A configurable bar statistics table shows delta, CVD, and volume breakdowns per candle. Reveals market participation pace, institutional activity, and regime shifts through candle formation speed.
Key Features
Dollar volume threshold candles (default $1M)
Tick-accurate volume via PulseWire footprint API (Premium or above)
Bar statistics table with 6 configurable rows below candles
9 data types per row: Time, Volume, Delta, Buy, Sell, Delta %, Buy %, Sell %, Session CVD
Volume progress label showing dollar amount, threshold and percentage on the live candle
Streamlined input / UI brought to you by crlmx
Trading Applications
Volume candles compress during consolidation and expand during breakouts
Fast candle succession signals high participation; slow formation signals stalling
CVD tracks cumulative order flow direction across the visible range
Delta and CVD rows show buyer/seller dominance per candle
Recommended settings: Crypto (BTC/ETH): Candle Volume: $5M-$10M Index Futures (ES/NQ): Candle Volume: $1M-$2M
Commodities (Gold): Candle Volume: $500K-$1M
Version History
v0.42 (Latest - 07 Mar 2026)
Updated LTF Volume calculation to Footprint API
Added Bar statistics table with 6 configurable rows and 9 data types
Added row customisation Indicator

VWAP Volume Analyzer (Wyckoff) | Capitan-TradingMost traders focus only on price.
But price shows what happened , not necessarily why it happened .
Volume reveals participation.
The Anchored VWAP Volume Analyzer (Wyckoff Concept) is designed to help traders visualize market participation and better contextualize price movements using anchored volume analysis and VWAP-based structure.
Inspired by Wyckoff principles , this indicator focuses on the relationship between price, effort, and participation , helping traders assess whether a move is supported by real market participation or simply driven by short-term volatility.
Instead of relying on traditional volume bars that only color based on the candle close, this tool analyzes the internal structure of each candle to provide a more realistic interpretation of buying and selling pressure.
The objective is simple:
to offer a clearer and more informative way to read market behavior.
---
Key Features
Anchored VWAP with Dynamic Value Ribbon
At the core of the indicator is a user-anchored VWAP .
Around it, the script plots a dynamic ribbon based on standard deviation , representing the value area of the selected range.
The ribbon adapts to price positioning relative to VWAP, helping visualize directional bias and potential reaction zones .
---
Smart Volume Parsing
The script separates dominant buying or selling pressure from minor internal activity using a True Range based proxy calculation .
This provides a clearer view of intrabar participation compared to traditional volume indicators.
---
Reactivity Engine
Beyond historical anchored volume, the indicator measures recent participation momentum using a configurable lookback period .
This helps distinguish fresh market activity from older historical volume.
---
Quantitative Candle Colorization
Chart candles can optionally synchronize with the underlying volume structure, highlighting phases of:
• Accumulation
• Distribution
• Neutral market conditions
---
On-Chart Dashboard
A compact HUD dashboard displays key metrics directly on the chart:
• Net Volume
• Smart Net Volume
• Buy vs Sell pressure
• Distance from the anchored VWAP
This allows traders to quickly evaluate market participation without leaving the chart.
---
How to Use It
Simply anchor the indicator to a meaningful market point, such as:
• a significant swing high or swing low
• the start of a trading session
• the beginning of a structural move
• the start of a range or consolidation phase (Wyckoff Phase A)
From there, observe how price behaves around the VWAP and how participation evolves within the value ribbon.
---
This is the LITE version of the Capitan Trading quantitative suite.
Designed to remain clean, fast and practical while offering a professional perspective on volume-based market context and Wyckoff-style analysis .
Disclaimer: This indicator is a technical analysis tool and does not constitute financial advice.
________________________________________________________________________
# VERSIONE ITALIANA
Descrizione
Molti trader osservano soltanto il prezzo.
Ma il prezzo mostra cosa è successo , non sempre perché è successo .
I volumi rivelano la partecipazione del mercato.
L’ Anchored VWAP Volume Analyzer (Wyckoff Concept) è progettato per aiutare i trader a visualizzare la partecipazione del mercato e a contestualizzare meglio i movimenti del prezzo attraverso un’analisi volumetrica ancorata basata sul VWAP.
Ispirato ai principi di Wyckoff , questo indicatore si concentra sulla relazione tra prezzo, sforzo e partecipazione , aiutando a capire se un movimento è sostenuto da una reale attività di mercato oppure se è semplicemente guidato da volatilità di breve periodo.
Invece di affidarsi alle classiche barre di volume colorate solo in base alla chiusura della candela, questo strumento analizza la struttura interna di ogni candela per fornire una lettura più realistica della pressione di acquisto e vendita.
L’obiettivo è semplice:
offrire un modo più chiaro e informativo per leggere il comportamento del mercato.
---
Caratteristiche principali
VWAP ancorato con Value Ribbon dinamico
Il cuore dell’indicatore è un VWAP ancorabile dall’utente .
Attorno ad esso viene tracciato un ribbon dinamico basato sulla deviazione standard che rappresenta la value area del range selezionato.
Il ribbon si adatta alla posizione del prezzo rispetto al VWAP, aiutando a visualizzare bias direzionale e possibili zone di reazione .
---
Analisi intelligente dei volumi
Lo script separa la pressione dominante di acquisto o vendita dall’attività interna minore utilizzando un proxy basato sul True Range .
Questo consente una lettura più chiara della partecipazione intrabar rispetto ai classici indicatori di volume.
---
Motore di reattività
Oltre al volume storico ancorato, l’indicatore misura anche il momentum recente della partecipazione utilizzando un periodo di lookback configurabile .
Questo aiuta a distinguere l’ attività più recente dal volume storico passato.
---
Colorazione quantitativa delle candele
Le candele del grafico possono essere sincronizzate con la struttura volumetrica sottostante, evidenziando fasi di:
• Accumulo
• Distribuzione
• Neutralità
---
Dashboard sul grafico
Una dashboard compatta mostra direttamente sul grafico alcune metriche chiave:
• Volume netto
• Smart Net Volume
• Pressione Buy vs Sell
• Distanza dal VWAP ancorato
Questo permette di valutare rapidamente la partecipazione del mercato senza lasciare il grafico.
---
Come utilizzarlo
È sufficiente ancorare l’indicatore a un punto rilevante del mercato, ad esempio:
• un massimo o minimo significativo
• l’ inizio di una sessione di trading
• l’ inizio di un movimento strutturale
• l’ inizio di una zona di range o consolidamento (Fase A, Wyckoff)
Da quel momento è possibile osservare come il prezzo reagisce attorno al VWAP e come evolve la partecipazione all’interno del ribbon.
---
Questa è la versione LITE della suite quantitativa Capitan Trading.
Pulita, veloce ed essenziale per offrire una lettura professionale del contesto di mercato attraverso analisi dei volumi e logica Wyckoff .
Disclaimer: Questo indicatore è uno strumento di analisi tecnica e non costituisce consiglio finanziario. Indicator

Luminous Volume Delta [Pineify]Luminous Volume Delta — Volume Polarity Oscillator with Surge Detection & Momentum Cloud
The Luminous Volume Delta is a volume-based momentum oscillator that decomposes total volume into buying and selling pressure, calculates the net delta, and overlays a smoothed oscillator with signal line crossovers and intelligent volume surge detection. Unlike standard volume indicators that simply display bar-by-bar volume, this indicator estimates the directional intent behind each bar's volume by classifying it as buyer- or seller-dominated based on candlestick polarity. The result is a MACD-style oscillator built entirely on volume data, giving traders a clear, actionable view of when buying or selling pressure is genuinely shifting — and when a volume surge makes that shift especially significant.
Key Features
Intrabar volume polarity estimation that splits each bar's volume into buy volume and sell volume based on candlestick direction
Raw volume delta histogram with adaptive transparency — surge bars appear vivid while normal bars remain faded for instant visual prioritization
EMA-smoothed delta line paired with an SMA signal line for MACD-style crossover detection
Volume surge detection using a configurable threshold (default: 1.618× the 50-bar average volume) to highlight bars with unusually high market participation
Momentum Cloud fill between the smoothed delta and signal line that visually encodes whether buyers or sellers currently hold the momentum advantage
Filtered buy and sell signals that only trigger when crossovers occur in optimal territory — oversold for buys, overbought for sells
How It Works
The indicator follows a three-stage calculation pipeline that transforms raw volume into a normalized momentum oscillator:
Stage 1: Volume Polarity Classification
Each bar's total volume is classified based on the relationship between its open and close prices. Bullish bars (close > open) assign 100% of volume to buyers. Bearish bars (close < open) assign 100% to sellers. Doji bars (close = open) split volume equally between buyers and sellers, reflecting market indecision. This simple yet effective heuristic provides a practical approximation of order flow without requiring tick-level data.
Stage 2: Delta Calculation and Smoothing
The raw volume delta (buy volume minus sell volume) is calculated for each bar. A positive delta indicates net buying pressure; a negative delta indicates net selling pressure. This raw delta is then smoothed using an Exponential Moving Average (EMA) with the user-defined "Delta Smoothing Length" (default: 14 periods) to reveal the underlying trend in volume flow. A Simple Moving Average (SMA) signal line is computed over the smoothed delta using the "Signal Line Length" (default: 9 periods), creating a slower reference for crossover analysis.
Stage 3: Surge Detection
A 50-period SMA of total volume establishes the baseline average volume. When the current bar's volume exceeds this average multiplied by the surge threshold (default: 1.618, inspired by the golden ratio), the bar is flagged as a volume surge. Surge bars receive vivid histogram coloring (low transparency) while normal bars remain faded (high transparency), instantly drawing the trader's attention to moments of exceptional market participation.
Trading Ideas and Insights
Accumulation and Distribution Detection — Sustained positive raw delta (green histogram bars) indicates accumulation by buyers, while sustained negative delta (red bars) reveals distribution by sellers. The smoothed delta line confirms whether this pressure is building or fading.
Momentum Crossover Entries — When the smoothed delta crosses above the signal line, buying momentum is accelerating relative to its recent average. When it crosses below, selling momentum is taking over. These crossovers function identically to MACD signal crossovers but are driven purely by volume dynamics.
Surge-Confirmed Moves — Volume surges that coincide with a delta crossover carry significantly more weight than crossovers on normal volume. A vivid green surge bar appearing alongside a bullish crossover suggests strong institutional participation behind the move.
Divergence Analysis — When price makes new highs but the smoothed delta fails to confirm with new highs of its own, it signals weakening buying conviction — a classic bearish divergence. The inverse applies for bullish divergences at price lows.
Zero-Line Context — The zero line represents equilibrium between buying and selling pressure. Crossovers of the smoothed delta above zero confirm a shift to net buyer dominance; crossovers below zero confirm net seller dominance.
How Multiple Indicators Work Together
The Luminous Volume Delta integrates three complementary analytical techniques into a unified volume analysis system:
The volume polarity estimation provides the raw directional data, the dual moving average system (EMA + SMA) creates a momentum oscillator framework, and the surge detection layer adds a volatility filter — together forming a complete volume-momentum analysis toolkit.
The raw delta histogram gives bar-by-bar granularity, showing the immediate balance of buying versus selling pressure. However, raw data is inherently noisy, which is why the EMA-smoothed delta line is overlaid to extract the trend from the noise. The EMA was chosen over an SMA for the delta line because it front-weights recent data, keeping the oscillator responsive to sudden shifts in volume flow.
The SMA signal line intentionally uses a different averaging method (SMA rather than EMA) to create a smoother, more stable reference. This deliberate mismatch between EMA and SMA produces more meaningful crossover events — the faster EMA reacts to changes in volume pressure while the slower SMA confirms that the shift is sustained rather than transient.
The surge detection system operates independently from the oscillator but provides critical context. A crossover signal on normal volume may represent routine market fluctuation, while the same crossover accompanied by a volume surge (highlighted by vivid histogram coloring) suggests genuine conviction behind the move. The golden ratio threshold (1.618×) provides a mathematically balanced sensitivity that captures meaningful volume spikes without flagging every minor uptick.
The Momentum Cloud fill between the delta and signal lines synthesizes the relationship between these two components into a single visual element — green when the delta leads (bullish momentum advantage) and red when the signal leads (bearish momentum advantage).
Unique Aspects
Volume-native oscillator — While most oscillators are price-derived (RSI, Stochastic, MACD), this indicator builds its entire oscillator framework from volume data, providing a fundamentally different perspective on market momentum.
Adaptive transparency histogram — The dual-transparency system (15% for surges, 75% for normal bars) creates an automatic visual hierarchy that highlights the most important volume events without requiring the trader to scan for them manually.
Golden ratio surge threshold — The default 1.618× multiplier is rooted in the golden ratio, providing a naturally balanced detection sensitivity that has been observed to align well with significant volume expansion events across various markets and timeframes.
Zone-filtered signals — Buy signals require the crossover to occur in negative territory (oversold accumulation), and sell signals require it in positive territory (overbought distribution). This filtering eliminates low-conviction signals that occur in neutral mid-range territory.
Mixed MA crossover design — Using an EMA for the delta line and an SMA for the signal line is a deliberate design choice that balances responsiveness with stability, producing higher-quality crossover signals than same-type MA pairs.
How to Use
Add the Luminous Volume Delta indicator to your chart. It will appear in a separate panel below the price chart.
Observe the histogram bars for immediate volume delta context — green bars indicate net buying pressure, red bars indicate net selling pressure. Vivid (bright) bars signal a volume surge event.
Monitor the blue smoothed delta line and orange signal line for crossover signals. A bullish crossover (delta crossing above signal) in negative territory suggests accumulation is beginning. A bearish crossover in positive territory suggests distribution is starting.
Use the Momentum Cloud color to confirm the prevailing volume momentum direction — green cloud means buyers are in control, red cloud means sellers dominate.
Pay special attention when surge bars coincide with crossover signals — these high-volume crossovers carry significantly more conviction than normal-volume crossovers.
Watch for divergences between price and the smoothed delta line to identify potential trend exhaustion before it becomes visible in price action.
Combine with price action analysis, support/resistance levels, or trend-following indicators for additional confirmation before executing trades.
Customization
Delta Smoothing Length (default: 14) — Controls the EMA period applied to the raw volume delta. Increase for smoother, longer-term volume trend analysis (20-30); decrease for more responsive, shorter-term signals (7-10).
Signal Line Length (default: 9) — Controls the SMA period applied to the smoothed delta. Higher values produce fewer but more reliable crossover signals; lower values increase signal frequency at the cost of more noise.
Volume Surge Threshold (default: 1.618) — The multiplier of the 50-bar average volume that triggers surge highlighting. Increase to only flag extreme volume events (2.0-3.0); decrease for more sensitive surge detection (1.2-1.5).
Bullish / Bearish Colors — Customize the histogram and cloud fill colors to match your chart theme.
Delta Line / Signal Line Colors — Adjust the oscillator line colors for optimal visibility against your chart background.
Conclusion
The Luminous Volume Delta offers a methodologically distinct approach to momentum analysis by building its oscillator framework entirely from volume polarity data rather than price. By combining intrabar volume classification, dual moving average smoothing, and adaptive surge detection into a single cohesive system, it provides traders with insights that pure price-based indicators cannot deliver — specifically, who is in control (buyers or sellers), how strongly they are in control (surge vs. normal volume), and when that control is shifting (crossover signals filtered by momentum zone). Whether you are a day trader looking for volume-confirmed entries, a swing trader seeking accumulation and distribution patterns, or a position trader monitoring institutional participation, this indicator provides a structured, visually intuitive framework for understanding the volume dynamics that drive price movement.
Indicator

Liquidation Cascade Detector - Basic 2.0The Liquidation Cascade Detector identifies high-probability reversal entries by detecting the microstructure footprint of forced liquidations in futures, equities, crypto, and forex markets. When leveraged positions are stopped out in clusters, they create a recognizable sequence of price action, volume, and volatility signatures. This indicator scores the confluence of those signatures in real time — for both long and short setups simultaneously — and fires a signal only when the combined evidence exceeds a threshold.
This runs a subset of the analysis modules found in the full Liquidation Cascade system, fires up to five signals per regular trading session, and displays an aggregate confluence score. No external libraries, no dependencies — a single self-contained script.
Designed primarily for micro futures (MNQ, MGC, MES) on intraday timeframes (1m–15m), though the scoring system works on any liquid instrument with reliable volume data. Works on all PulseWire plans.
## How It Works
The indicator evaluates multiple independent analysis modules, computes a directional confluence score for each side, and gates output through cooldown and session limits before firing.
**Volume Analysis**
Detects the participation surges that occur when clustered stop-outs feed into the order book simultaneously. The module classifies current volume conditions relative to recent history and scores the intensity of the spike. This contributes context to both directions, since liquidation events produce abnormal volume regardless of which side is being forced out.
**Keltner Channel Exhaustion**
Measures how far price has been pushed beyond dynamically calculated volatility bands. When price overshoots to statistical extremes — the kind of extension consistent with forced-exit overshoot — the module scores the degree of exhaustion. The scoring is continuous, not binary: marginal breaches score low while significant overextension receives the full module weight. Direction-specific scoring feeds into the corresponding signal.
**Price Action Structure**
Detects candle patterns characteristic of forced liquidation events — bars where price was shoved through a level by forced exits and then reclaimed by organic flow. Multiple pattern types are evaluated with different confidence levels, and the module scores them accordingly. The primary pattern carries more weight than secondary confirmations.
**Higher Timeframe Trend**
Reads trend direction from a configurable higher timeframe. Signals aligned with the prevailing trend receive a score bonus. Counter-trend signals are not blocked — they simply need stronger confluence from the other modules to reach the threshold. Counter-trend signals that do fire are visually dimmed so you can distinguish them at a glance.
**Scoring**
Each module contributes to a weighted confluence score computed independently for long and short directions on every bar. The scores combine to a 0–100 scale. A minimum-evidence gate ensures isolated readings from a single module cannot fire a signal on their own. If both directions exceed the threshold simultaneously, only the stronger side fires.
**Signal Gating**
A cooldown prevents signal clustering: after a signal fires, subsequent signals in the same direction are suppressed for a configurable number of bars. A per-session cap limits total signals during regular trading hours. When a signal is detected but suppressed by the cap, a small marker appears at the bottom of the chart so you know the system saw something. Signals only fire during NY cash session / RTH (9:30 AM – 4:00 PM ET).
## Display
Signal markers plot on the chart as directional triangles. Color intensity indicates trend alignment: bright signals are with-trend, dimmed signals are counter-trend. A small dot marker appears at the chart bottom when a qualifying signal was suppressed by the session cap.
Keltner channel bands are plotted as an overlay (toggle in settings). A score gauge in the bottom-right corner shows the leading direction, aggregate score, threshold, session signal count, and current session state. An info table (position configurable) provides a compact dashboard with scores for both directions, HTF trend, volume state, Keltner status, and signal budget.
Session awareness is built into the display: the RTH open price plots as a dashed horizontal line, and the opening range (9:30–10:00 ET) is highlighted with a subtle background shade.
## Settings
All parameters are adjustable:
- **Volume Lookback / Spike Multiplier** — Controls how volume conditions are classified relative to recent history.
- **Keltner Length / ATR Multiple / ATR Length** — Controls channel width and exhaustion sensitivity.
- **Liquidation Wick Ratio / Max Body Ratio** — Controls how strict the liquidation bar pattern detection is. Higher wick ratio and lower body ratio = fewer but higher-quality detections.
- **Trend Timeframe / Trend EMA Length** — Controls the higher timeframe trend reference.
- **Signal Threshold** — Minimum confluence score to fire. Lower = more signals with lower average quality.
- **Cooldown Bars** — Minimum spacing between signals.
- **Signals per Session** — Maximum signals during RTH.
- **Display toggles** — Individually toggle Keltner bands, session markers, info table, and score gauge.
## Usage Notes
This is a scoring and alerting tool, not a strategy. It identifies conditions consistent with forced liquidation events and scores setup quality. It does not determine position size, stop placement, or profit targets. Not financial advice.
Signals are most reliable on liquid futures during active trading hours. The opening range and power hour tend to produce the highest-quality signals. Lunch hours (12:00–1:30 ET) typically produce thinner conditions. The indicator suppresses overnight signals by only firing during NYSE regular trading hours (9:30-4:00 ET).
Uses one `request.security()` call for the higher timeframe trend. All data uses confirmed bars with no lookahead. Open source under the Mozilla Public License 2.0. Indicator

Delta Flow Volume Profile [UAlgo]Delta Flow Volume Profile is a price based profile indicator that builds a rolling volume distribution and separates that distribution into bullish and bearish participation at each price zone. Instead of showing only how much total volume traded in an area, the script splits each profile row into buyer dominated and seller dominated segments, then renders those segments side by side on the chart. This creates a more informative profile that helps reveal not only where activity concentrated, but also which side was dominant inside each level.
The indicator runs directly on price ( overlay=true ) and analyzes a user defined lookback window. It divides the recent price range into fixed bins, distributes each candle’s volume across the bins it overlaps, and classifies that allocated volume as bullish or bearish based on candle direction. The final result is drawn to the right of the chart as a horizontal stacked profile where:
The left segment of each row represents bullish volume
The right segment represents bearish volume
The widest total row identifies the Point of Control (POC)
Each significant row can display buyer and seller percentage labels
This makes the script useful for traders who want a profile style map of participation with directional context, especially when identifying areas where buyers were dominant, sellers were dominant, or both sides were highly active.
Important note: The bullish and bearish split in this script is an approximation based on candle direction ( close >= open versus close < open ). It is not true bid ask or tick level order flow delta.
🔹 Features
🔸 1) Delta Style Volume Profile by Price Level
The core idea of the script is to turn a standard horizontal volume profile into a directional participation profile. Each row tracks both bullish and bearish volume, so the user can see whether a price zone was primarily buyer controlled, seller controlled, or relatively balanced.
🔸 2) Rolling Lookback Profile
The profile is built from the most recent user selected number of bars. This means the profile continuously adapts to current market structure instead of being locked to a session boundary.
This makes it useful for intraday structure analysis, local range mapping, and recent participation studies.
🔸 3) Fixed Bin Price Segmentation
The script divides the recent highest to lowest range into a configurable number of bins. Lower bin counts create thicker and smoother rows. Higher bin counts create more detailed and granular distribution.
This lets the user control the balance between clarity and resolution.
🔸 4) Proportional Volume Allocation Across Overlapping Bins
When a candle spans multiple bins, the script does not place the full candle volume into a single row. Instead, it allocates volume proportionally according to the overlap between the candle range and each bin.
This produces a more realistic distribution than a single point assignment, especially for larger candles.
🔸 5) Bullish and Bearish Segment Rendering
Each row is drawn as a stacked two part structure:
The bullish segment starts from the left base of the profile
The bearish segment continues immediately after the bullish segment
This gives an intuitive visual read of which side dominated and how much each side contributed inside the same price zone.
🔸 6) Point of Control Highlighting
The script automatically finds the row with the highest total volume and marks it as the Point of Control. The POC row is highlighted with a full width background band, which makes the most active zone immediately obvious.
This is useful for identifying the strongest recent area of price acceptance.
🔸 7) Percentage Labels for Strong Rows
For profile rows with meaningful participation, the script prints a right side label showing:
Bullish percentage
Bearish percentage
For the POC row, the label is prefixed with POC . This gives a quick summary of directional balance at the most important nodes.
🔸 8) Dynamic Label Coloring by Dominance
The percentage labels change color based on row context:
POC labels use the dedicated POC color
Rows dominated by bullish volume use the bullish color
Rows dominated by bearish volume use the bearish color
This improves readability and speeds up visual interpretation.
🔸 9) Adjustable Profile Width and Offset
The profile is drawn to the right of the current bar with configurable:
Profile width as a percentage of lookback
Horizontal offset in bars
This makes it easy to place the profile in a clean position without obstructing live price action.
🔸 10) Smooth Clean Presentation
The script uses borderless boxes and compact right side labels, which gives the profile a clean and uncluttered look. This makes it suitable for traders who want visual structure without excessive chart noise.
🔸 11) Built for Practical Delta Style Context
While it does not use true order flow data, the indicator still provides a highly usable approximation of directional participation. This can help identify:
Buyer heavy zones
Seller heavy zones
Balanced zones
High activity acceptance areas
🔹 Calculations
1) Price Range Detection
The script first determines the highest high and lowest low over the selected lookback:
float hh_global = ta.highest(high, lookback)
float ll_global = ta.lowest(low, lookback)
This defines the full vertical range of the profile.
2) Bin Construction
That range is divided into the selected number of bins:
float binSize = (hh - ll) / numBins
Each bin stores:
Top price
Bottom price
Bullish allocated volume
Bearish allocated volume
The bins are built from top to bottom so the profile rows map naturally across the recent range.
3) Candle by Candle Volume Processing
For every bar in the lookback window, the script reads:
High
Low
Open
Close
Volume
Then it checks each bin to see whether the candle overlaps that bin.
4) Proportional Overlap Allocation
For each overlapping bin, the script calculates:
float overlapTop = math.min(bHigh, b.top)
float overlapBottom = math.max(bLow, b.bottom)
If there is overlap, it allocates volume proportionally:
allocatedVol := bVol * ((overlapTop - overlapBottom) / rangeSize)
Interpretation:
If a candle covers multiple price rows, each row receives only the fraction of volume corresponding to its share of the candle’s total range.
This is a more realistic approximation than assigning all volume to one bin.
5) Zero Range Candle Handling
If a candle has zero range, the script assigns the full volume to the bin that contains the candle price:
if rangeSize > 0
...
else
if bHigh <= b.top and (bHigh > b.bottom or (j == numBins - 1 and bHigh >= b.bottom))
allocatedVol := bVol
This prevents divide by zero issues and still keeps the data usable.
6) Bullish vs Bearish Classification
Once the script calculates allocated volume for a bin, it classifies that volume by candle direction:
if bClose >= bOpen
b.bullVol += allocatedVol
else
b.bearVol += allocatedVol
Interpretation:
Bullish volume means the candle closed at or above its open.
Bearish volume means the candle closed below its open.
Important note:
This is a directional approximation. It is not true tape based aggressive buy or aggressive sell volume.
7) Total Volume, Delta, and Percent Methods
Each bin includes helper methods:
totalVol() returns bullVol + bearVol
deltaVol() returns bullVol - bearVol
bullPct() returns bullish percentage of total
bearPct() returns bearish percentage of total
The script actively uses total volume and percentages in rendering. The deltaVol() method is defined for convenience, but this version does not directly plot or label the raw delta value.
8) Point of Control Detection
After all bins are populated, the script finds the row with the largest total volume:
if bTotVol > maxVol
maxVol := bTotVol
pocIdx := i
This row becomes the Point of Control and acts as the strongest recent participation zone.
9) Width Normalization
The total maximum row volume is used as the width normalization anchor. For each row:
float bullRatio = b.bullVol / maxVol
float bearRatio = b.bearVol / maxVol
Then the segment widths are scaled into bars:
int bullWidthBars = math.round(bullRatio * maxBoxWidthBars)
int bearWidthBars = math.round(bearRatio * maxBoxWidthBars)
Because both bullish and bearish widths are normalized against the same maxVol , their combined width reflects the row’s total participation relative to the profile maximum.
10) Minimum Visible Width Safeguard
If a row has non zero bullish or bearish volume but the calculated width rounds to zero, the script forces a minimum width of one bar:
if b.bullVol > 0 and bullWidthBars == 0
bullWidthBars := 1
This ensures small but meaningful contributions remain visible.
11) Right Side Time Based Layout
The profile is rendered using xloc.bar_time , so all horizontal distances are based on time, not bar index. The script calculates:
A base left time for the profile
A maximum right time
A per bar time width
Key logic:
int leftBaseTime = lastBarTime + (profileOffset * barTimeDiff)
int maxRightTime = leftBaseTime + (maxBoxWidthBars * barTimeDiff)
This makes the profile appear a fixed number of bar widths to the right of the latest candle.
12) POC Background Highlight
Before drawing the bullish and bearish segments for the POC row, the script paints a full width background band:
box.new(left=leftBaseTime, top=drawTop, right=maxRightTime, bottom=drawBottom, ...)
This gives the POC a distinct highlighted backdrop behind the actual stacked volume bars.
13) Visual Gap Inside Each Bin
The script trims the top and bottom of each drawn row slightly:
float boxGap = (b.top - b.bottom) * 0.1
float drawTop = b.top - boxGap
float drawBottom = b.bottom + boxGap
This creates small vertical spacing between rows, which improves readability and avoids a fully merged block appearance.
14) Percentage Label Threshold
Labels are not printed for every row. They appear only when the row’s total volume is greater than 15 percent of the maximum row volume:
if bTotVol > (maxVol * 0.15)
This reduces clutter and focuses attention on more relevant nodes.
15) Label Text Construction
For significant rows, the script computes:
Bullish percentage
Bearish percentage
Then formats them as:
string labelText = bullStr + " | " + bearStr
For the POC row:
labelText := "POC: " + labelText
Indicator

SRL Liquidity State EngineBeyond Linear Volume: Unlocking Market Microstructure with the Square Root Law
Why 90% of traders misunderstand the relationship between Volume, Volatility, and Price—and how the "SRL Liquidity State Engine" fixes it.
1. Introduction: The Linear Fallacy
Every trader learns early on: "Volume precedes Price." We look at OBV, we look at volume bars, and we look at Moving Averages. But there is a fundamental flaw in how most indicators analyze volume: They assume the relationship is linear.
They assume that 1,000 contracts bought in a quiet market is the same as 1,000 contracts bought during a news event. But intuitively, we know this is false.
If price moves 1% on low volume, it suggests a vacuum (low liquidity). If price moves 1% on massive volume, it suggests a war (high liquidity). Standard indicators miss this context. They look at the fuel (Volume) without looking at the road conditions (Volatility).
This script, the SRL Liquidity State Engine, utilizes the Square Root Law (SRL) of market impact—specifically derived from Kyle’s (1985) market microstructure theories—to normalize volume against volatility. It answers the question: "What is the true intent of the market once we strip away the noise of volatility?"
2. The Theory: What is the Square Root Law?
In institutional trading and market microstructure theory, it is widely accepted that price impact is not linear; it is geometric.
The Formula:
The script is built on the inversion of Kyle’s Lambda. Roughly speaking:
$$ \Delta P \approx k \cdot \sigma \cdot \sqrt{\frac{Q}{V}} $$
By inverting this, we can solve for Q
Q (The True Intent or "Informed Order Flow"):
$$ Q = V \cdot \left( \frac{\Delta P}{\sigma \cdot k} \right)^2 $$
Where:
V: Observed Volume.
ΔP: Price Change from a pivot.
σ (Sigma): Volatility (using the Parkinson High-Low estimator).
k: An impact constant (liquidity scalar).
In simple English:
Imagine two cars.
Car A travels 100 miles using 5 gallons of gas on a smooth highway.
Car B travels 100 miles using 5 gallons of gas through a muddy swamp.
Car B worked much harder. The Square Root Law calculates this "work." It tells us that if volatility (the swamp) is high, we expect price to move more for the same volume. If price moves significantly despite high volatility (or lacks movement despite high volume), the SRL reveals the True Dominance (Q).
3. The Innovation: Under the Hood of the Engine
This script is not just a moving average crossover. It implements three advanced quantitative concepts:
A. Parkinson Volatility Estimator (1980)
Most volatility indicators use "Close-to-Close" data. This ignores the intraday fight between Bulls and Bears. This script uses the Parkinson Estimator, which utilizes the High and Low of the range. This provides a much more accurate "Sigma" (σ) for the SRL calculation, ensuring the script adapts instantly to expanding ranges.
B. Bulk Volume Classification (BVC)
Standard indicators treat a "green candle" as 100% buy volume. This is false. A doji with massive volume has both buying and selling. This script uses BVC (Easton, López de Prado, O'Hara 2012), which decomposes volume based on where the close is relative to the open and the intraday standard deviation. This gives us a granular look at Buy vs. Sell pressure.
C. Dual Anchor Analysis
The script doesn't just look at the current bar. It anchors to the most recent Pivot High and Pivot Low.
Bull Flow: Analyzes the buying pressure pushing up from the recent Low.
Bear Flow: Analyzes the selling pressure pushing down from the recent High.
By comparing the calculated Q (Intent) of these two flows, we get a Dominance Ratio.
4. Wyckoff State Detection
Mathematics is useless without context. The script translates these complex SRL calculations into the four classic Wyckoff Market States:
ACCUMULATION: Price is in the lower zone, but Bullish Q (Intent) is secretly rising. The "Smart Money" is buying the dip.
MARKUP: Price is rising, confirmed by Bullish Dominance. The trend is healthy.
DISTRIBUTION: Price is in the upper zone, but Bearish Q is secretly rising. "Smart Money" is selling into strength.
MARKDOWN: Price is falling, confirmed by Bearish Dominance. The trend is broken.
5. How to Use the Dashboard
The script projects a comprehensive data panel on your chart. Here is how to read it:
The Composite Score (Top Header)
A single number from -100 to +100.
> +60 (Green): Strong Buy / Markup Phase.
< -60 (Red): Strong Sell / Markdown Phase.
Yellow/Gray: Transition or Contested liquidity.
The Timeframes (Short / Medium / Long)
The engine analyzes three fractals simultaneously.
Alignment: When Short, Medium, and Long all show "BULL DOMINANT," the probability of a sustained trend is highest.
Divergence: If the Long term is Bullish, but the Short term flips to Bearish, the script identifies a potential Reversal Forming.
SRL vs. Sensitivity
The dashboard compares the actual price move (Sensitivity) vs. the calculated intent (SRL).
If Price is moving UP, but SRL says "Bearish," this is an Effort vs. Result anomaly—a classic signal that the move is a trap.
6. Practical Trading Strategies
Strategy A: The Trend Continuation (The "Markup" Trade)
Look for the Composite Score to cross above +30.
Ensure the Medium and Long panels show "BULL DOMINANT."
Wait for the State Analysis to confirm "MARKUP."
Stop Loss: Below the recent Pivot Low (displayed on the panel).
Strategy B: The Reversal (The "Accumulation" Trade)
Price is making lower lows (Bearish Trend).
Watch the Short Period Panel. Look for "BULL Q" to spike while price remains flat or drops slightly.
The Dashboard will signal "ACCUMULATION" or "BULLISH DIVERGENCE."
Enter when the Dominance Momentum turns positive.
7. Limitations & Disclaimer
Ranging Markets: Like all volatility-based tools, in extremely tight, low-volume chop, the denominator (volatility) becomes very small, which can exaggerate the Q values. The "Adaptive K" setting helps mitigate this, but caution is advised in flat markets.
Lag: While the Parkinson volatility is reactive, the State Analysis applies smoothing to prevent false signals. This means the "State" label may appear 1-3 bars after the absolute bottom/top.
8. Conclusion
The markets are a mechanism for price discovery, fueled by volume and restricted by volatility. By applying the Square Root Law, we stop guessing which volume spike matters and start measuring the mathematical energy behind the move.
The SRL Liquidity State Engine is designed to give you the institutional "X-Ray" view of this battle, blending rigorous microstructure math with practical Wyckoffian logic.
Settings:
Impact Constant (k): Adjusts the sensitivity. Higher k = More conservative.
Adaptive k: Check this to let the script auto-calibrate based on recent liquidity conditions (Recommended for Crypto).
Show Diagnostics: Enable this if you want to see the raw Sigma and Impact Ratios for manual calculation.
Assets:
Works best on assets with genuine volume data (Stocks, Futures, High-Cap Crypto). For Forex, it relies on Tick Volume, which is a proxy but still effective during active sessions.
Risk Disclaimer
DISCLAIMER: For Educational and Informational Purposes Only.
The content of this publication, including the source code, indicators, and commentary, is provided for educational and research purposes only. It does not constitute financial, investment, or trading advice.
No Investment Advice: The SRL Liquidity State Engine is a theoretical model based on market microstructure mathematics (Kyle, 1985; Parkinson, 1980). It is designed to visualize data, not to generate buy or sell signals.
High Risk Warning: Trading in financial markets (Cryptocurrency, Forex, Stocks, Futures) involves a high degree of risk and may not be suitable for all investors. You could lose some or all of your initial investment.
Past Performance: Historical results, back-testing, or case studies shown in this publication are not indicative of future performance.
Limitation of Liability: The author uses this software at their own risk. The author shall not be held liable for any direct, indirect, incidental, or consequential damages resulting from the use or inability to use this script or the data it provides.
By using this script, you acknowledge that you are solely responsible for your own trading decisions and have conducted your own due diligence. Indicator

Quantum Velocity Candles v2Quantum Velocity Candles - Kinetic Energy Visualizer
Overview
Standard candlestick charts treat every price movement equally. A 10-pip candle moving sluggishly over 5 minutes looks identical to a 10-pip candle that exploded in 3 seconds. The Quantum Velocity Candles indicator solves this by visualizing the actual physics of the market. It calculates underlying Velocity and Acceleration, painting your candles with dynamic gradients. Explosive institutional momentum glows bright neon, while choppy, dying momentum fades into transparent "ghost" candles.
Key Highlights
Kinetic Physics Engine: Measures the rate of change (Velocity) and the rate of change of the velocity (Acceleration) to gauge true market intent.
Natural Direction Alignment: Respects natural price action. Bullish candles (Close > Open) are colored Cyan, and Bearish candles (Close < Open) are colored Magenta.
Adaptive Brightness: The intensity of the color dynamically scales to the current asset's volatility. A candle only glows at 100% opacity when true, statistical acceleration is occurring.
Zero Clutter: Applies directly to your main chart via barcolor, requiring no extra sub-charts.
How to Trade It
Use this to manage your psychology and trade management. When you enter a breakout, you want to see bright, solid candles. If you are in a trend and the candles begin to fade and become transparent, it physically shows you that the momentum is dying—telling you to move your stop loss to breakeven or take profits before the reversal hits.
⚠️ DISCLAIMER: STRICTLY FOR EDUCATIONAL PURPOSES
The information, scripts, and concepts provided in this publication are for educational and informational purposes only and do not constitute financial, investment, or trading advice. Trading in financial markets (including Forex, Crypto, Stocks, and Commodities) carries a high level of risk and may not be suitable for all investors. You could lose some or all of your initial investment. Past performance is not indicative of future results. Always conduct your own due diligence, backtest any strategy thoroughly, and consult with a certified financial advisor before making any trading decisions. By using this script, you acknowledge that you are solely responsible for your own trading actions and outcomes.
Indicator

BK AK-Shock & Awe🏴☠️💣 BK AK–Shock and Awe 🏴☠️💣
All glory to G-d — the true source of wisdom, restraint, and right timing.
Respect to my mentor AK — discipline, patience, clean execution. Every indicator I publish carries that standard.
Shock and Awe is not a signal generator.
It’s an order-flow pressure tool: it turns CVD into a battlefield map so you can see who’s pushing, who’s trapped, and where the push is lying (divergence + confluence + session anchors + profile). You don’t “predict” with this — you confirm, then execute.
🧠 What it does (big picture)
Shock and Awe builds a CVD command center with one job: clarity under pressure.
1) CVD Core (the heartbeat)
Computes a CVD proxy using chart volume: up-bar volume − down-bar volume, accumulated.
Optional scaling (None / K / M) so the pane stays readable across instruments.
Multiple display modes: Line / Candles / Heikin Ashi Candles / Line + Heikin Ashi.
2) Trend + Structure on CVD (the rails)
CVD moving average (selectable type/length).
Optional extra MAs (MA2/MA3/MA4) to show “stacking” and structural alignment.
Optional MA5 “advanced” modes:
anchored session CVD,
anchored weekly CVD,
volume-weighted CVD,
price-volume CVD variant (scaled).
3) AK-9 Bands + Regime Coloring (stretch vs fair)
Smoothed CVD baseline with a standard-deviation envelope (AK-9 style bands).
Classifies state: above upper / inside / below lower.
Optional gradient engine paints the CVD by normalized slope (5-state regime), so you can see when pressure is accelerating vs fading.
4) Divergence Warfare (trap detection)
Regular divergence: price makes LL/HH while CVD makes HL/LH (warning of exhaustion/distribution).
Hidden divergence: continuation-type behavior (trend pullback absorption).
Pivot-confirmed logic (signals print after confirmation, not mid-formation).
Optional dynamic lookbacks that adapt by timeframe to reduce spam on fast charts.
🔥 Confluence System (prove it or ignore it)
Divergence alone is a rumor. Shock and Awe demands witnesses.
Confluence checks using:
OBV divergence behavior
MACD histogram divergence behavior
Minimum indicator count required (1–3).
Optional rule: only show divergences that meet confluence.
Optional confluence badge on labels so the chart stays readable.
🔗 Signal Consolidation (zones, not confetti)
Markets don’t turn once — they hammer the same level.
Merges nearby signals by level + time tolerance into consolidated zones.
Shows consolidation count and stronger “zone” badges when repeats stack up.
Built to reduce label spam while emphasizing the real battlefield levels.
📊 CVD Volume Profile (where the fight actually happened)
Not a price profile — a CVD participation profile.
Bins historical CVD into a profile weighted by participation.
Computes:
POC (highest participation node)
Value Area (~70%)
Purpose: identify magnet zones, acceptance, and where “business was done.”
Optional POC proximity logic can feed score/context.
🧱 Session Anchors (daily/weekly rails)
Shock and Awe uses session anchors like lines in the sand:
Daily and weekly CVD anchors.
Optional extended-right anchor lines (remain active forward).
Quick bias read:
Above daily/weekly = buyers controlling tape
Below = sellers controlling tape
⚠️ Background Flash (shock-event detector)
When CVD is stretched and structure says “this is serious,” it lights the room.
Dynamic intensity based on how far CVD is outside AK-9 bands.
Optional “major turning points only” mode with velocity filter + cooldown.
Designed to highlight critical moments, not entertain you.
🤖 Smart Score + Strategic Info Box (battle briefing)
A weighted “readout” built from the indicator’s own evidence:
Trend/stack state
Regular/hidden divergences
OBV/ADX alignment
Session position
Momentum (ROC)
Band position
ATR and volume regime
Optional POC proximity
Outputs:
a compact status strip for quick posture
a detailed tooltip explaining what changed, why it matters, and what to watch
This is the dashboard you check before you touch the trigger.
🧭 How to use it (execution doctrine)
Start with anchors
Daily/weekly rails tell you who owns the day. Don’t argue with the map.
Treat AK-9 bands as a stretch ruler
Outside bands = exaggeration and reversal risk. Inside bands = rotation risk unless structure confirms.
Divergence is a warning — confluence is permission
If CVD screams but OBV/MACD don’t testify, stand down.
Trade zones, not single prints
Consolidation counts mark where the market keeps returning to settle a score.
Let price confirm
Shock and Awe identifies pressure and deception — price still has to prove acceptance/rejection at the rails.
🧾 Non-repainting / real-time note
Divergence signals are based on pivot confirmation (right lookback), meaning labels only appear after the pivot is confirmed. Once printed, they do not “move around.”
Like any indicator, values can update on the currently forming candle until the bar closes.
📌 Best use cases
Intraday scalping/day trading: use dynamic divergence settings + anchors + consolidation; demand confluence in chop.
Swing trading: reduce signal count by increasing confluence requirements; rely more on weekly rails and regime state.
Works best on markets with meaningful volume. If volume is unreliable/synthetic, treat order-flow conclusions as lower confidence.
🧱 Non-negotiable rule
This tool doesn’t make you right.
It makes you harder to fool.
Respect to AK — discipline, patience, clean execution.
All glory to G-d — the source of wisdom and endurance.
🏴☠️💣 BK AK–Shock and Awe 🏴☠️💣 Indicator

Indicator

Volume Flow Analysis [UAlgo]Volume Flow Analysis is a market profile style volume study that builds a session anchored volume distribution, extracts key reference levels from the previous profile, and generates institutional style context signals based on Auction Market Theory concepts. The script combines several workflows in one tool: previous session volume profile levels (POC, VAH, VAL), liquidity void detection through LVN valleys, acceptance versus rejection logic around value, and Initial Balance with open type classification.
The indicator runs on price ( overlay=true ) and is designed for intraday or swing traders who want a structured read of where value formed in the prior profile and how the current session is interacting with it. Instead of only plotting static lines, the script actively interprets behavior when price moves outside the previous value area. It checks whether the move is rejected quickly (failed auction) or sustained with time and volume (acceptance), which helps distinguish responsive activity from initiative activity.
Another major component is the profile shape and liquidity void framework. The script identifies previous profile shape as P, b, or D based on POC location within the profile range, and it scans for LVN valleys that can act as low participation zones where price may travel quickly. This gives the user both structural context and event based signals from the same indicator.
The result is a comprehensive volume flow dashboard that merges profile levels, session behavior, and AMT inspired signal logic into a single chart layer.
🔹 Features
🔸 1) Anchored Session Volume Profile (Daily, Weekly, Monthly or Custom Anchor)
The script builds a volume profile for each anchor period selected by the user through the Profile Period (Anchor) input. Common choices include Daily, Weekly, and Monthly anchors. When a new anchor session begins, the current session profile is finalized and promoted to the previous profile, then a new profile begins.
This allows the indicator to continuously reference the fully calculated previous profile while the current session is developing.
🔸 2) Price Range Binning with User Defined Resolution
Each session profile is divided into a configurable number of rows (bins). The script maps price activity into these bins and distributes volume proportionally based on the overlap between each candle range and each volume bin.
This creates a more realistic histogram than assigning all candle volume to a single price level, especially for wide range candles.
🔸 3) Previous Profile Core Levels (POC, VAH, VAL)
Once a session completes, the script calculates and stores the key profile levels:
POC (Point of Control), the price bin with the highest volume
VAH (Value Area High)
VAL (Value Area Low)
Value Area is computed by expanding outward from the POC until the chosen percentage of total profile volume is covered. These levels are then plotted on the chart as dynamic reference lines for the next session.
🔸 4) Acceptance vs Rejection Logic Around Previous Value Area
The indicator monitors current session behavior relative to the previous VAH and VAL and classifies behavior as either rejection (failed auction) or acceptance (initiative drive).
Failed Auction (Rejection):
Price trades outside the previous value area but returns back inside before meeting acceptance criteria. This is treated as a failed attempt to establish new value.
Acceptance (Initiative Drive):
Price stays outside the previous value area for a user defined number of bars and accumulates enough volume relative to average volume. This suggests successful acceptance of higher or lower value.
This framework is useful for separating temporary probes from meaningful value migration.
🔸 5) Institutional Style Signal Labels
The script can display signal labels for:
Failed Auction Bullish and Bearish
Acceptance Bullish and Bearish
LVN Traversal Bullish and Bearish
These labels appear directly on price and use user defined bullish and bearish colors for quick interpretation.
🔸 6) LVN Traversal (Liquidity Void / Vacuum) Detection
The script detects low volume nodes as true local valleys in the previous profile histogram. A bin qualifies as an LVN when surrounding bins on both sides have higher volume for a chosen valley depth.
If current price enters one of these prior LVN zones from above or below, the script marks a potential traversal event. This can help identify zones where price may move faster due to lower prior participation.
🔸 7) Previous Profile Shape Classification (P, b, D)
The script classifies the previous profile shape based on where the POC sits within the full profile range:
P shape if POC is near the upper portion of the profile
b shape if POC is near the lower portion
D shape if POC is near the middle
This gives quick context about the prior session structure, which can support directional bias interpretation and session planning.
🔸 8) Initial Balance (IB) Tracking
The indicator tracks the Initial Balance range using a user defined duration in minutes. During the IB window, it records session high and low. After the IB period ends, it can draw an IB box on the chart for visual reference.
This is useful for intraday frameworks where the IB range is used as a key reference for breakout, reversal, and auction development.
🔸 9) Open Type Classification and Daily Bias
At the start of each new anchor session, the script compares the new open to the previous value area and assigns a basic daily bias such as initiative bullish, initiative bearish, or responsive inside. After the IB period completes, it classifies the open type using rule based conditions, including:
Open Drive Bullish / Bearish
Open Rejection Reverse Bullish / Bearish
Open Test Drive Bullish / Bearish
This adds a session narrative layer on top of the profile levels.
🔸 10) Previous Profile Histogram Visualization on Last Bar
On the last bar, the script can render the previous profile histogram as a horizontal bar style distribution using boxes. Bins inside the previous value area can be colored differently from bins outside value.
This provides an at a glance visual summary of where prior volume concentrated, without needing a separate profile tool.
🔸 11) Extensive Visual Customization
Users can configure colors for:
Previous POC
Previous VA levels
Histogram bins
Value area histogram bins
Bullish signals
Bearish signals
This makes it easy to integrate the indicator into existing chart themes and workflows.
🔸 12) Structured Object Based Design
The script uses custom types ( VolumeBin and SessionProfile ) to store profile state, bins, levels, shape, and LVN zones. This object based approach keeps the logic modular and easier to maintain as features are added.
🔹 Calculations
1) Session Detection and Profile Lifecycle
A new profile session is detected with:
bool isNewSession = timeframe.change(i_anchor)
When a new session begins:
The current profile is finalized (end bar, profile calculations)
The current profile becomes the previous profile
A fresh session profile starts from the current bar
This design ensures that current session logic can reference a fully completed previous profile with stable POC, VAH, VAL, shape, and LVN data.
2) Volume Profile Bin Initialization
Each session profile is divided into i_rows equal price bins between session low and session high:
float step = (this.highestPrice - this.lowestPrice) / rows
for i = 0 to rows - 1
float bottom = this.lowestPrice + (i * step)
float top = bottom + step
this.bins.push(VolumeBin.new(top, bottom, 0.0))
As the current session high or low changes, the script rebuilds the current profile bins and repopulates volume from session start to the current bar. This keeps the current profile geometry aligned with the latest session range.
3) Proportional Volume Distribution Across Bins
For each candle, the script distributes volume across all bins according to candle range overlap:
float overlapTop = math.min(h, bin.priceTop)
float overlapBottom = math.max(l, bin.priceBottom)
if overlapTop > overlapBottom
float overlapRatio = (overlapTop - overlapBottom) / barRange
float volToAdd = v * overlapRatio
bin.volumeTotal += volToAdd
this.totalVolume += volToAdd
Interpretation:
Volume is allocated proportionally to the fraction of the candle range overlapping each price bin. This is a practical approximation of intrabar volume distribution across price.
Special handling exists for zero range candles, where volume is assigned to the bin containing the candle price.
4) POC Detection and Profile Max Volume
After session completion, the script scans all bins to find the highest volume bin:
for i = 0 to this.bins.size() - 1
VolumeBin bin = this.bins.get(i)
if bin.volumeTotal > maxVol
maxVol := bin.volumeTotal
pocIndex := i
The POC price is set to the midpoint of that bin:
this.pocPrice := (pocBin.priceTop + pocBin.priceBottom) / 2
The script also stores maxVolume , which is later used to scale histogram width display on the chart.
5) Value Area Calculation (VAH / VAL)
The Value Area is built by expanding outward from the POC until the target percentage of session volume is reached:
float targetVol = this.totalVolume * (vaPct / 100.0)
float currentVol = pocBin.volumeTotal
int upperIndex = pocIndex
int lowerIndex = pocIndex
At each step, the script compares the next upper and lower bin volumes and expands toward the larger volume side first. This continues until the cumulative value area volume reaches the target percentage.
Final levels:
this.vahPrice := this.bins.get(upperIndex).priceTop
this.valPrice := this.bins.get(lowerIndex).priceBottom
This is a standard volume profile style value area expansion method centered on POC.
6) Previous Profile Shape Classification (P, b, D)
The profile shape is inferred from the POC position inside the profile range:
float profileRange = this.highestPrice - this.lowestPrice
float pocPosPct = (this.pocPrice - this.lowestPrice) / profileRange
Classification logic:
P shape if POC is at or above 70 percent of the range
b shape if POC is at or below 30 percent
D shape otherwise
This is a simplified but practical shape proxy based on volume concentration location.
7) LVN (Liquidity Void) Valley Detection
The script identifies LVNs as local volume minima among profile bins, using a user defined valley depth i_lvnDepth . A bin is treated as an LVN if the bins on both sides for the specified depth all have greater volume:
for j = 1 to lvnDepth
if this.bins.get(i - j).volumeTotal <= currentBin.volumeTotal or this.bins.get(i + j).volumeTotal <= currentBin.volumeTotal
isValley := false
break
Only non zero volume bins are considered. Detected LVNs are stored in this.lvnZones for use in later traversal signals.
8) Initial Balance (IB) Calculation
At the start of a new session, the script resets IB state and starts tracking the session open, session start time, and current IB high and low. While the market is still inside the IB duration:
ibHigh := math.max(ibHigh, high)
ibLow := math.min(ibLow, low)
IB tracking ends once the elapsed time exceeds the configured duration in minutes:
if (time - sessionStartTime) >= i_ibMins * 60000
inIb := false
This produces the opening range used for later visualization and open type classification.
9) Daily Bias and Open Type Classification
At each new session open, the script sets a basic bias by comparing the session open to the previous value area:
Open above previous VAH suggests initiative bullish
Open below previous VAL suggests initiative bearish
Open inside previous value suggests responsive / inside
After the IB period ends, the script classifies the open type using rule based comparisons among:
Open location relative to previous VAH / VAL
Close relative to IB highs and lows
Intraday test and rejection behavior around prior value
Examples from the code include:
"Open-Drive Bullish"
"Open-Rejection-Reverse Bearish"
"Open-Test-Drive Bullish"
This gives a structured session narrative that aligns with many profile and AMT workflows.
10) Acceptance vs Failed Auction Logic (Above VAH)
The script tracks consecutive bars and cumulative volume when price closes above the previous VAH:
if close > prevVah
barsAboveVah += 1
volAboveVah += volume
If price returns inside value before acceptance is confirmed, it prints a failed auction bearish signal (fade breakout logic):
if barsAboveVah > 0 and not acceptedAbove and i_sigFailedAuc
isFailedAucBear := true
Acceptance bullish is confirmed only if both time and volume thresholds are satisfied:
if barsAboveVah >= i_accBars and volAboveVah >= (avgVol * i_accVolMult) and not acceptedAbove and i_sigAccept
acceptedAbove := true
isAcceptBull := true
This is a practical combination of time and participation filters, which reduces false acceptance signals from brief low volume excursions.
11) Acceptance vs Failed Auction Logic (Below VAL)
The same framework is applied below the previous VAL:
Tracking closes below VAL:
if close < prevVal
barsBelowVal += 1
volBelowVal += volume
Failed auction bullish if price returns inside before acceptance:
if barsBelowVal > 0 and not acceptedBelow and i_sigFailedAuc
isFailedAucBull := true
Acceptance bearish if time and volume thresholds are met:
if barsBelowVal >= i_accBars and volBelowVal >= (avgVol * i_accVolMult) and not acceptedBelow and i_sigAccept
acceptedBelow := true
isAcceptBear := true
This creates a symmetric AMT style signal model for both sides of value.
12) LVN Traversal Signal Logic
If LVN traversal signaling is enabled, the script checks whether price enters a previous LVN zone from outside:
Bullish traversal candidate when price enters the LVN from below
Bearish traversal candidate when price enters the LVN from above
Code logic example:
if close > lvn.priceBottom and close < lvn.priceTop and close < lvn.priceBottom
isLvnTravBull := true
This flags the moment price enters a potential liquidity void zone where faster movement may occur.
13) Previous Profile Histogram Rendering on Last Bar
On the last chart bar, the script draws the previous session histogram using boxes. Width is normalized by each bin volume relative to the profile max volume:
float widthRatio = bin.volumeTotal / previousProfile.maxVolume
int boxRight = bar_index + math.round((rightBar - bar_index) * widthRatio)
Bins inside VAH and VAL are colored using the value area histogram color, while other bins use the general histogram color. This gives a compact visual profile snapshot without external tools.
14) Dynamic Plots for Previous POC, VAH, and VAL
The previous profile reference levels are continuously plotted as line break style plots:
plot(plotPoc, "Prev POC", color=i_colPoc, linewidth=2, style=plot.style_linebr)
plot(plotVah, "Prev VAH", color=i_colVa, linewidth=1, style=plot.style_linebr)
plot(plotVal, "Prev VAL", color=i_colVa, linewidth=1, style=plot.style_linebr)
These lines provide stable reference levels throughout the current session and form the basis for the acceptance, rejection, and open type logic. Indicator

Orderflow Detector [OmegaTools]Orderflow Detector is a multi-layered market microstructure and intrabar signal analysis indicator designed to highlight price-action events that are commonly associated with liquidity interaction, aggressive participation, and absorption behavior. It is built for traders who want a compact but information-dense framework to detect potential orderflow footprints directly on the chart while also monitoring a normalized delta-based resistance metric in a separate panel. The indicator combines event classification, lower-timeframe aggregation, directional volume imbalance analysis, and percentile-based contextual filters to provide a structured read of intraday activity without requiring a full depth-of-market interface.
The software is designed around the idea that certain recurring price and volume patterns can act as practical proxies for underlying orderflow dynamics. Instead of attempting to reconstruct the full order book, it detects and labels specific bar formations and liquidity interactions that often reflect phenomena such as hidden liquidity execution, stop runs, and passive absorption. These detections are then enhanced by lower-timeframe sampling and by a delta-versus-range efficiency model that classifies bars according to whether price moved with unusually low or unusually high resistance.
At the core of the indicator is a three-pattern detection engine that identifies Iceberg, Sweep, and Absorption conditions. Each signal is classified directionally and displayed directly on the chart with distinct symbols and vertical offsets, allowing the trader to quickly distinguish overlapping events and read them in context with the surrounding structure. The indicator can display all pattern families simultaneously or focus on one category at a time, which makes it suitable both for broad discretionary analysis and for targeted signal study during strategy development.
The Iceberg detection logic is designed to identify potential hidden-liquidity style behavior around repeated highs or lows combined with strong participation and breakout/return dynamics. The script evaluates repeated local extremes, elevated volume relative to recent conditions, and short-term structural expansion beyond recent highs or lows. It then classifies the event according to whether the behavior is more consistent with buying pressure overcoming sell-side resistance or selling pressure overcoming buy-side support. This creates an interpretable label that can be used to spot possible areas where latent liquidity was present and subsequently absorbed or overwhelmed.
The Sweep detection logic focuses on stop-run and reclaim behavior. It looks for price briefly moving beyond a recent local extreme and then closing back within the prior range under exceptionally strong volume conditions. This is intended to capture the kind of price action often associated with liquidity grabs, failed breakouts, and aggressive trapping dynamics. Direction is assigned based on whether the sweep occurs below recent lows with a recovery back above the broken area or above recent highs with a rejection back below the broken area. In practical use, these signals can be helpful for identifying potential exhaustion points, reversal zones, or confirmation events when used alongside broader trend and structure analysis.
The Absorption detection logic seeks to identify bars where participation is elevated but realized range remains relatively compressed, which can indicate passive liquidity absorbing aggressive flow. The script compares current volume and true range behavior to recent averages, then combines this with wick asymmetry and candle direction to infer whether absorption is more likely occurring on the offer side or bid side. This produces directional absorption labels that can help traders recognize situations where apparent aggression is not translating into efficient price movement, a condition that often precedes either continuation after re-accumulation or reversal after failed initiative.
A major strength of the indicator is its use of lower-timeframe aggregation through a configurable resolution input. Instead of relying exclusively on the chart’s current timeframe, the script evaluates the core event conditions on a selected lower timeframe and aggregates the resulting directional detections into the active bar. This allows the indicator to preserve intrabar signal sensitivity while remaining visually usable on higher chart timeframes. In practice, this means a trader can analyze a higher timeframe chart while still receiving information about micro-events that occurred inside each bar, improving context without cluttering the chart with excessive detail.
In addition to event labeling, the software computes a lower-timeframe directional volume imbalance model by separately aggregating up-bar volume and down-bar volume. From this it derives a delta estimate, then normalizes it using a rolling standard-deviation framework to produce a standardized delta intensity metric. This metric is displayed as a histogram and serves as a quantitative measure of how unusual the current directional participation is relative to recent conditions. The result is a more informative volume read than raw volume alone, since it incorporates directional pressure and statistical normalization.
The indicator goes further by combining normalized delta intensity with a custom range-efficiency model to estimate a resistance metric. This metric is designed to reflect how much directional participation was required to produce the observed bar movement. Conceptually, it provides a practical approximation of whether price traveled easily or encountered significant resistance. When the metric is unusually low, the bar may represent movement with relatively little resistance, while unusually high values may indicate strong opposition to directional flow. This is then contextualized using percentile thresholds over a rolling window, allowing the script to identify statistically extreme low-resistance and high-resistance conditions in a dynamic, instrument-adaptive manner.
The percentile-based box overlay system visually marks these resistance extremes directly on price bars. Bars classified as low-resistance can be extended forward with shaded boxes to highlight potential paths of least resistance, while high-resistance bars can be marked as zones where market opposition was comparatively strong. The user can choose to display only low-resistance zones, only high-resistance zones, both, or none. This feature is particularly useful for discretionary traders who want a visual map of bars that may act as reference zones for continuation, reaction, or retest behavior in subsequent price action.
The software includes a flexible visual configuration system that allows traders to tailor the display to their workflow. Users can choose which event families to display, whether to project low- or high-resistance boxes, what lower timeframe to use for intrabar aggregation, and which colors to assign to bullish and bearish detections. The result is an indicator that can be configured for minimalist chart annotation or more comprehensive orderflow-style monitoring depending on the user’s objectives.
The indicator’s chart annotations are intentionally separated by type and offset to preserve readability when multiple signals occur on the same bar. Iceberg events, Sweep events, and Absorption events each use distinct visual markers and are placed at different distances from the bar so that they remain legible even in high-activity conditions. This design is especially useful during fast intraday sessions where several market microstructure events may cluster in a short period.
The delta histogram panel complements the chart annotations by giving the trader a continuous quantitative read of participation intensity. The histogram is color-coded according to directional delta and normalized magnitude, making it easy to identify whether a bar’s directional participation is weak, moderate, or extreme. Reference thresholds are displayed to help frame interpretation and support rule-based usage in discretionary or semi-systematic trading processes.
Orderflow Detector is intended for advanced chart users, intraday discretionary traders, and system developers who want a practical bridge between pure price action and more specialized orderflow analysis. It is especially useful in environments where access to full order book tools is limited or where a trader wants a portable, chart-native framework for identifying liquidity interactions and directional participation anomalies. It can be used to support breakout confirmation, trap detection, reversal timing, trend continuation analysis, and contextual filtering for execution decisions.
As with any analytical indicator, this software should be used as part of a broader decision-making framework that includes market structure, risk management, and trade management discipline. The signals and resistance classifications are probabilistic interpretations of price and volume behavior, not direct observations of all market participants. When used correctly and in context, the indicator provides a robust and professional toolset for detecting and visualizing actionable orderflow-related behavior in real time on PulseWire.
- Eros Indicator
