MNM Market Narrative Map [v6]Market Narrative Map (Clean) is a multi-component market structure indicator designed to help traders read price action in a cleaner, more organized way. It maps the story of the market by combining swing structure, supply and demand zones, breakout behavior, liquidity activity, trend flow, and volume-weighted visual emphasis into one streamlined tool.
The indicator is built for traders who want more than isolated signals. Instead of focusing on a single condition, it helps frame the full market narrative: where price has turned before, where it may react again, whether a breakout is holding or failing, where liquidity may sit, and how momentum is evolving through the ribbon structure.
Core Features
1. Swing Highs and Swing Lows
Automatically detects structural pivot points to highlight important turning areas in price. These swing points help define trend continuation, reversals, and key reaction levels.
2. Supply and Demand Zones
Plots adaptive zones around confirmed pivot highs and lows to show likely areas of resistance and support. Zone thickness is volatility-aware, helping the script stay relevant across different market conditions.
3. Breakout Classification
Separates successful breakouts from failed breakouts using confirmation logic. This helps distinguish genuine expansion from fakeouts and weak participation.
4. Liquidity Mapping
Optional liquidity pool tracking at swing levels helps identify areas where price may seek stops, trigger sweeps, or reverse after clearing obvious highs and lows.
5. Money Noodle Ribbon
A clean trend ribbon built around smoothed price structure. It helps visualize directional flow, slope change, and trend continuity without cluttering the chart.
6. Breaker Blocks from Failed Breaks
When enabled, failed breakout zones can be projected as breaker blocks, giving traders additional context for future reactions and retests.
7. Volume Weighting
Visual zone emphasis can be adjusted based on relative volume, making stronger activity areas stand out more clearly.
Why Use It
This indicator is useful for traders who want a more complete market map instead of relying on isolated indicators. It can assist with:
Identifying key structural highs and lows
Locating likely supply and demand reaction zones
Spotting breakout continuation versus failed expansion
Tracking potential liquidity sweep areas
Reading short-term trend flow more clearly
Keeping chart analysis clean and visually organized
Best Use Case
Market Narrative Map works best as a chart-reading and decision-support tool. It is especially useful for traders who combine market structure, liquidity concepts, breakout behavior, and contextual price action in their analysis.
It is not designed to replace trade management or risk management. Instead, it provides a cleaner structural framework so traders can make better-informed decisions based on how price is behaving.
Design Philosophy
The script is built with a clean-chart approach in mind. Every major module can be enabled or disabled, allowing traders to keep the chart minimal or expand it into a more complete structural map depending on preference. Indicator

ICT Concepts [UAlgo]ICT Concepts is a broad market structure toolkit that combines several core ICT style elements inside a single script. Instead of focusing on only one concept, the indicator brings together order blocks, market structure shifts, SMT divergence, fair value gaps, balanced price ranges, consequent encroachment, liquidity sweeps, Fibonacci levels, and killzones in one integrated overlay.
The script is designed for traders who want a consolidated structure map rather than a collection of separate indicators. It tracks swing highs and lows, labels structural breaks as BOS or MSS, detects order blocks from a strict candle pattern, identifies imbalances through fair value gap logic, monitors liquidity sweeps around recent pivot levels, and draws structure anchored Fibonacci levels from the latest confirmed break. It can also compare the active chart against a second symbol for SMT divergence and even render a small comparison panel directly on the chart.
One of the strongest qualities of this script is that each module is state aware. Order blocks extend until mitigation. Fair value gaps extend until price trades through them. Structure anchors update after new breaks. Killzones persist historically for a defined number of sessions. SMT events are stored, labeled, and optionally projected inside a mini comparison panel. This makes the script much more than a simple set of static drawings. It behaves like a live structural framework that evolves with price.
From a workflow point of view, the indicator is especially useful for traders who want to read context in layers. Structure tells whether price is breaking with trend or shifting against it. Order blocks and imbalances show where inefficiency or sponsorship may remain. Liquidity sweeps show where recent resting liquidity has likely been taken. Fibonacci levels frame premium, discount, equilibrium, and OTE areas relative to the latest structural move. Killzones add time based session context. Together, these components create a broad market map for discretionary analysis.
🔹 Features
🔸 Single Candle Order Block Detection
The script detects bullish and bearish order blocks using a strict three candle displacement pattern. When a valid setup appears, the order block is stored, extended forward, and removed only after mitigation. Optional mean threshold lines can also be shown inside each block.
🔸 Multi Timeframe Order Blocks
Order block detection can run on a selected timeframe through request.security . This allows higher timeframe order blocks to be projected onto the current execution chart.
🔸 Market Structure Mapping
The indicator tracks pivot highs and lows and labels confirmed structural breaks as BOS or MSS. A continuation break is labeled BOS, while a directional reversal break is labeled MSS. This gives the chart a clear structure narrative.
🔸 SMT Divergence Detection
The script can compare the active chart against a second symbol and detect SMT divergence using pivot highs and lows from both instruments. Divergences are labeled directly on the main chart and can also be reflected inside a mini comparison panel.
🔸 Fair Value Gaps
Bullish and bearish fair value gaps are detected through a classic three candle gap condition. These imbalances are stored, extended, and removed once mitigated.
🔸 Balanced Price Range Support
When a new fair value gap overlaps with an opposite side historical fair value gap, the overlapping section becomes a balanced price range. This gives the script the ability to detect conflict zones formed by opposing inefficiencies.
🔸 Consequent Encroachment Mode
The imbalance module can also be displayed in consequent encroachment mode, where the midpoint of the gap is shown along with the premium or discount half of the imbalance.
🔸 Liquidity Sweep Detection
The indicator monitors recent pivot highs and lows and marks when price trades beyond one of those levels but closes back through it. This makes it easy to spot local buy side and sell side sweeps.
🔸 Structure Anchored Fibonacci Levels
After a confirmed structural break, the script anchors Fibonacci levels between the break extreme and the opposing structural point. Equilibrium, OTE, and optional extra levels are then projected forward.
🔸 Killzone Rendering
The script can mark Asian, London, New York AM, and New York PM session windows using session boxes and optional session range lines. Historical session boxes are kept for a user defined number of prior occurrences.
🔸 Active Object Management
Each subsystem uses its own storage and cleanup logic. Order blocks, imbalances, SMT markers, liquidity sweep boxes, Fibonacci objects, and killzones are all managed so the chart remains usable over time.
🔸 Alerts
Alert conditions are included for bullish and bearish order block detection.
🔹 Calculations
1) Order Block Pattern Logic
detectLogic() =>
bool isBull = open > close and close > open and close > open and low < low and close > high
bool isBear = open < close and close < open and close < open and high > high and close < low
[isBull, high , low , time , isBear, high , low , time ]
This is the core order block detector.
A bullish order block requires:
a bearish candle at 2 ,
a bullish candle at 1 ,
a bullish current candle,
a sweep below the low of candle 2 by candle 1 ,
and a close above the high of candle 1 .
A bearish order block uses the exact inverse.
The returned zone bounds come from candle 1 , which becomes the order block candle. That is why the function returns high , low , and time .
So the script is not marking every displacement candle. It is looking for a very specific three candle formation.
2) Multi Timeframe Order Block Projection
= request.security(syminfo.tickerid, i_tf, detectLogic())
This line runs the order block detection logic on the selected timeframe.
If the user chooses a higher timeframe, the resulting order block values are projected onto the current chart. This is extremely useful for mapping higher timeframe sponsorship zones onto a lower timeframe execution environment.
So the detection can stay structurally higher while the display remains on the user’s active chart.
3) Preventing Overlapping Order Blocks
method hasOverlap(array OBs, float top, float bottom) =>
bool overlap = false
if OBs.size() > 0
for i = 0 to OBs.size() - 1
OB item = OBs.get(i)
if (top < item.top and top > item.bottom) or (bottom > item.bottom and bottom < item.top)
overlap := true
break
overlap
Before a new order block is added, the script checks whether it overlaps an existing stored block of the same side.
If the proposed top or bottom falls inside an existing block, the new one is ignored. This reduces clutter and helps avoid stacking multiple highly similar zones in the same area.
So the order block engine is selective not only in detection, but also in object creation.
4) Order Block Mitigation and Active Limit Handling
method isMitigated(OB this, float currentClose) => this.isBull ? (currentClose < this.bottom) : (currentClose > this.top)
if drawCount < OB_ACTIVE_LIMIT
if na(item.id)
item.draw(i_bullColor, "Bull OB", i_showMidLine)
item.extend()
drawCount += 1
else
item.remove()
An order block remains valid until price closes beyond its invalidation boundary.
For bullish order blocks, mitigation happens when close moves below the block bottom.
For bearish order blocks, mitigation happens when close moves above the block top.
The script also limits how many active blocks are actually drawn. Older stored blocks may remain in memory, but only the most recent valid ones stay visible. This keeps the chart clean while preserving logic continuity.
5) Market Structure Pivot Tracking
float ph = ta.pivothigh(i_structLen, i_structLen)
float pl = ta.pivotlow(i_structLen, i_structLen)
if not na(ph)
prevHigh := lastHigh
prevHighIndex := lastHighIndex
lastHigh := ph
lastHighIndex := bar_index
if not na(pl)
prevLow := lastLow
prevLowIndex := lastLowIndex
lastLow := pl
lastLowIndex := bar_index
This is the base structure engine.
The script identifies confirmed pivot highs and lows using the selected pivot length. When a new pivot is confirmed, the prior stored high or low becomes prevHigh or prevLow , and the newest one becomes lastHigh or lastLow .
This means the indicator always keeps a rolling memory of the latest structural extremes, which later become the reference levels for BOS, MSS, liquidity sweeps, and Fibonacci anchoring.
6) BOS and MSS Logic
bool brokenHigh = ta.crossover(close, lastHigh)
bool brokenLow = ta.crossunder(close, lastLow)
if brokenHigh and not na(lastHigh) and not lastHighBroken
if not trendInitialized or trendIsBullish
drawStructure(lastHighIndex, lastHigh, bar_index, lastHigh, "BOS", i_structBull, "solid")
else
drawStructure(lastHighIndex, lastHigh, bar_index, lastHigh, "MSS", i_structBull, "dashed")
if brokenLow and not na(lastLow) and not lastLowBroken
if not trendInitialized or not trendIsBullish
drawStructure(lastLowIndex, lastLow, bar_index, lastLow, "BOS", i_structBear, "solid")
else
drawStructure(lastLowIndex, lastLow, bar_index, lastLow, "MSS", i_structBear, "dashed")
This is how the script classifies structure.
If close breaks above the last confirmed high, price has broken bullish structure.
If close breaks below the last confirmed low, price has broken bearish structure.
The label depends on prior trend state.
If the break happens in the same directional regime, it is labeled BOS.
If the break happens against the prior regime, it is labeled MSS.
So BOS means continuation of prevailing structure, while MSS means a shift in directional character.
7) SMT Divergence Detection
float smtPhA = i_smtOn ? ta.pivothigh(high, i_smtLen, i_smtLen) : na
float smtPlA = i_smtOn ? ta.pivotlow(low, i_smtLen, i_smtLen) : na
float smtPhB = i_smtOn ? request.security(i_smtSymbol, timeframe.period, ta.pivothigh(high, i_smtLen, i_smtLen)) : na
float smtPlB = i_smtOn ? request.security(i_smtSymbol, timeframe.period, ta.pivotlow(low, i_smtLen, i_smtLen)) : na
This block builds pivot data for both the main symbol and the comparison symbol.
The idea of SMT is relative disagreement. If one market makes a stronger high while the other fails to confirm it, or one market makes a lower low while the other refuses to follow, divergence may be present.
The script therefore tracks pivot highs and lows separately for both instruments.
8) Bearish and Bullish SMT Conditions
bool bearishSmt = not na(smtAHighPrev) and not na(smtBHighPrev) and (smtAHighLast > smtAHighPrev) and (smtBHighLast <= smtBHighPrev)
bool bullishSmt = not na(smtALowPrev) and not na(smtBLowPrev) and (smtALowLast < smtALowPrev) and (smtBLowLast >= smtBLowPrev)
These are the actual divergence tests.
Bearish SMT occurs when the active chart makes a higher high while the comparison symbol fails to do so.
Bullish SMT occurs when the active chart makes a lower low while the comparison symbol fails to confirm that weakness.
So the script is looking for asymmetry between related instruments, which is one of the classic uses of SMT analysis.
9) Mini Panel Rendering for SMT
= request.security(i_smtSymbol, timeframe.period, )
drawMiniCandle(startX + (lookback - 1 - i), o, h, l, c, smtMin, smtRange, baseY, targetHeight, i_smtBull, i_smtBear, isBear, isBull)
The mini panel is built by requesting OHLC data for the comparison symbol, then compressing it into a custom candle panel drawn on the right side of the chart.
Each mini candle is scaled into panel coordinates using the comparison symbol’s own high and low range. SMT event bars are then marked inside that mini chart.
So the panel is not decorative only. It provides a quick structural view of the comparison symbol directly beside the main chart.
10) Fair Value Gap Detection
bool fvgBullDetected = low > high
bool fvgBearDetected = high < low
These are the fair value gap rules.
A bullish fair value gap exists when the current low is above the high from two bars ago.
A bearish fair value gap exists when the current high is below the low from two bars ago.
This is the classic three candle inefficiency model. The gap zone is then stored as an FVG object and extended forward until mitigation.
11) Balanced Price Range Logic
bool hasOverlap = fTop > existing.bottom and fBot < existing.top
if hasOverlap
float bprTop = math.min(fTop, existing.top)
float bprBot = math.max(fBot, existing.bottom)
When a newly detected fair value gap overlaps an opposite side historical fair value gap, the overlapping area becomes a balanced price range.
This is important because BPR is not detected as an isolated standalone pattern. It is formed from the intersection of opposing inefficiencies. The script extracts only the common overlapping region and stores it as a new BPR object.
So BPR here is derived from actual imbalance conflict.
12) Consequent Encroachment Logic
float ceLevel = (this.top + this.bottom) / 2
float boxTop = this.isBull ? ceLevel : this.top
float boxBot = this.isBull ? this.bottom : ceLevel
Consequent encroachment is the midpoint of the fair value gap.
The script calculates the midpoint and, when CE mode is enabled, draws both a dashed midpoint line and a half gap box. For bullish gaps it emphasizes the lower half up to midpoint. For bearish gaps it emphasizes the upper half down to midpoint.
So CE mode gives the user a more precise internal level inside the wider imbalance.
13) Fair Value Gap Mitigation
method isMitigated(FVG this, float currentHigh, float currentLow) => this.isBull ? (currentLow < this.bottom) : (currentHigh > this.top)
A bullish fair value gap is mitigated when price trades below its bottom.
A bearish fair value gap is mitigated when price trades above its top.
Once mitigation happens, the object is removed. This keeps the imbalance display focused on still relevant inefficiencies.
14) Liquidity Sweep Detection
float liqPh = ta.pivothigh(LIQ_PIVOT_LEN, 1)
float liqPl = ta.pivotlow(LIQ_PIVOT_LEN, 1)
bool sweepBull = i_showLiq and not na(liqLastLow) and not liqLastLowSwept and low < liqLastLow and close > liqLastLow
bool sweepBear = i_showLiq and not na(liqLastHigh) and not liqLastHighSwept and high > liqLastHigh and close < liqLastHigh
This module watches recent pivot highs and lows for sweep behavior.
A bullish liquidity sweep occurs when price trades below the most recent sell side liquidity level but closes back above it.
A bearish liquidity sweep occurs when price trades above the most recent buy side liquidity level but closes back below it.
This is a clean wick through and reclaim style sweep model.
15) Liquidity Sweep Box Construction
if sweepBull
line bullSweepLine = line.new(liqLastLowIndex, liqLastLow, bar_index, liqLastLow, color = i_liqSellsideCol, style = line.style_solid)
box bullSweepBox = liqNewSweepBox(liqLastLow, low, i_liqSellsideCol)
if sweepBear
line bearSweepLine = line.new(liqLastHighIndex, liqLastHigh, bar_index, liqLastHigh, color = i_liqBuysideCol, style = line.style_solid)
box bearSweepBox = liqNewSweepBox(high, liqLastHigh, i_liqBuysideCol)
When a sweep occurs, the script draws two things:
a line showing the swept liquidity level,
and a box covering the swept excursion beyond that level.
This makes the sweep visually clear by showing both the reference price and the actual penetration area.
16) Fibonacci Anchoring From Latest Structure Break
bool fibCanDraw = i_showFib and lastStructBreakDir != 0 and not na(lastStructBreakIndex) and not na(lastStructBreakExtreme) and not na(lastStructOppPrice) and not na(lastStructOppIndex) and lastStructOppIndex != 0
The Fibonacci engine only draws when a valid structural break context exists.
The anchor requires:
a known break direction,
the latest break index,
the break extreme,
the opposing structural price,
and the opposing structural index.
So Fibonacci is not anchored arbitrarily. It is tied directly to the latest confirmed structural move.
17) Fibonacci Level Calculation
float a0 = lastStructBreakExtreme
float a1 = lastStructOppPrice
float r = a1 - a0
float p0 = a0 + r * 0.0
float p1 = a0 + r * 1.0
float pEq = a0 + r * i_fibEqLevel
float pOteLow = a0 + r * i_fibOteLow
float pOteMid = a0 + r * i_fibOteMid
float pOteHigh = a0 + r * i_fibOteHigh
This is the actual Fibonacci math.
The script defines the range between the break extreme and the opposing structural point, then calculates all Fibonacci levels as proportions of that range.
That includes:
the zero level,
the one level,
equilibrium,
the OTE low,
the OTE midpoint,
and the OTE high.
Optional extra levels can also be added in the same way.
So the Fibonacci framework always adapts to the latest structural swing rather than staying fixed to older price action.
18) Killzone Session Detection
string kzTz = "UTC-5"
kzInSession(string sess) =>
not na(time(timeframe.period, sess, kzTz))
bool inAsian = kzInSession("2000-0000")
bool inLondon = kzInSession("0200-0500")
bool inNY = kzInSession("0830-1100")
bool inLondonC = kzInSession("1330-1600")
Killzones are detected through session time windows defined in UTC 5.
Each session is converted into a boolean state that says whether the current bar falls inside that time window. This becomes the input for the killzone renderer.
So session marking is time based rather than manually positioned.
19) Killzone Box and Range Update Logic
if isActive
if not wasActive or na(sBox)
sBox := box.new(left = time, top = high, right = time, bottom = low, xloc = xloc.bar_time, bgcolor = baseCol, border_color = color(na), border_width = 0, text = boxTxt, text_color = tC, text_size = size.tiny, text_halign = text.align_left, text_valign = text.align_top)
float prevTop = box.get_top(sBox)
float prevBot = box.get_bottom(sBox)
float newTop = math.max(prevTop, high)
float newBot = math.min(prevBot, low)
box.set_top(sBox, newTop)
box.set_bottom(sBox, newBot)
box.set_right(sBox, time)
When a killzone begins, the script creates a new box using the current bar’s range. As the session continues, it keeps updating the top and bottom to reflect the highest high and lowest low made during that session.
So each killzone box becomes both a time marker and a session range marker. Indicator

Market Structure (ChoCh & BOS) [identityKa]Overview
The Market Structure (CHoCH & BOS) is a premium Smart Money Concepts (SMC) indicator designed to automatically track institutional market flow. Unlike basic structural indicators that only draw horizontal lines, this advanced engine identifies the precise moment the market bias shifts (CHoCH) or continues (BOS), and instantly plots the originating Order Block (OB) from which the structural break was initiated.
Core Mechanics & Terminology
The algorithm maps the market using strict pivot logic (customizable sensitivity) to filter out market noise and focus on true liquidity sweeps:
Change of Character (CHoCH): The first definitive sign of a trend reversal. Triggered when the price strictly closes above the last structural lower-high (in a downtrend) or below the last structural higher-low (in an uptrend).
Break of Structure (BOS): A continuation signal. Triggered when the price strictly closes above the last higher-high (in an uptrend) or below the last lower-low (in a downtrend), validating that the current trend remains dominant.
Auto Order Blocks (OB): This is the premium feature of the script. Whenever a valid BOS or CHoCH occurs, the engine mathematically traces back to the extreme pivot candle that caused the break. It automatically draws a highlighted Order Block zone (from the high to the low of that specific candle), projecting it forward as a highly probable area of future institutional mitigation.
HUD Dashboard & AI Logic
To streamline SMC trading, the integrated on-chart panel evaluates the active market structure and outputs a mechanical state:
Dangerous: Displayed whenever the current live price action enters an active, unmitigated Order Block (OB) zone. This acts as a critical warning that price is in a high-friction institutional area, and a violent rejection or bounce is imminent. Standard continuation trades should be avoided here.
LONG: Triggered when the macro bias is Bullish (last break was a Bullish CHoCH or BOS) and the price is comfortably outside of any active Order Block zones.
SHORT: Triggered when the macro bias is Bearish and the price is cleanly trending outside of active resistance zones.
How to Use It for Maximum Precision
SMC traders rely on patience and mitigation. When the indicator prints a new CHoCH or BOS, do not enter immediately. Instead, wait for the AI Suggestion to switch to "Dangerous" as the price pulls back into the newly formed Order Block. Once inside the box, drop to a lower timeframe to look for a micro-CHoCH confirmation, and execute your trade in the direction of the macro bias (LONG or SHORT) for explosive risk-to-reward ratios. 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

Inducement [UAlgo]Inducement is a market structure tool designed to detect pullback liquidity levels that form during directional expansion and remain relevant until price comes back to sweep them. The script tracks directional legs, monitors the deepest retracement points that appear against the active move, and promotes those retracement extremes into active IDM levels once the trend resumes in the original direction.
The core idea is simple. During a bullish move, price often creates a temporary downside pullback before continuing upward. That pullback low can later act as an inducement point where liquidity rests below the market. In a bearish move, the opposite process happens, where an upside pullback forms before price continues lower. That pullback high can later become a bearish inducement point. This script automates that process and keeps those levels visible on the chart until they are eventually swept.
What makes the script useful is that it does not plot every fluctuation. It first filters out inside bars, tracks the active directional leg, records the most meaningful retracement extreme inside that leg, and only creates a new IDM when price resumes the main move by printing a fresh expansion. That makes the final levels cleaner and more structurally relevant.
Once an IDM is created, it is drawn as a horizontal reference with a label. If price later trades through that level, the script marks it as swept, updates the label, and changes the line style to reflect that the liquidity has been taken. This creates a very practical chart view for traders who want to monitor inducement behavior, liquidity sweeps, and the relationship between pullbacks and later price delivery.
🔹 Features
🔸 Directional Leg Tracking
The script maintains an internal bullish or bearish trend state and updates the active structural leg as price continues to expand. This gives the indicator a directional framework instead of treating each new bar independently.
🔸 Inside Bar Filtering
Inside bars are ignored for structural progression. This helps the script focus on meaningful range expansion rather than reacting to small compressive candles that do not add new directional information.
🔸 Pullback Extreme Detection
During a bullish leg, the script tracks the lowest downside pullback that forms before the next bullish expansion. During a bearish leg, it tracks the highest upside pullback before the next bearish expansion. These stored extremes are the raw candidates for inducement levels.
🔸 Automatic IDM Creation
A stored pullback extreme becomes an active IDM only when the market resumes the active leg and creates a fresh structural push. This means the indicator does not mark every retracement immediately. It waits for continuation confirmation.
🔸 Bullish and Bearish IDM Mapping
Bullish IDM levels are created from pullback lows inside bullish continuation.
Bearish IDM levels are created from pullback highs inside bearish continuation.
This gives the user a clean map of likely liquidity resting points below or above price.
🔸 Sweep Recognition
Once an IDM is active, the script checks every new bar to see whether price has swept it. Bullish IDM is considered swept when current low trades at or below the level. Bearish IDM is considered swept when current high trades at or above the level.
🔸 Live Visual State Changes
Active IDM levels are drawn with dashed lines and labeled as unswept. Once swept, the line style changes, the color becomes softer, and the label updates to show that the liquidity event has already occurred.
🔸 Lightweight Structure Display
The script keeps an internal array of active IDM levels and limits the array size to avoid uncontrolled growth. This keeps the display practical and suitable for live chart use.
🔹 Calculations
1) Defining the IDM Object
type InducementLevel
float price
int bIndex
int dir
line idmLine
label idmLabel
bool isSwept
This is the core data container used by the script.
Each inducement level stores:
its price,
the bar index where it originated,
its direction,
its line object,
its label object,
and whether it has already been swept.
The dir field controls the level type:
1 means bullish IDM
-1 means bearish IDM
So before any logic runs, the script already has a dedicated structure for tracking the full lifecycle of each inducement level from creation to sweep.
2) Drawing Active and Swept Levels
method draw(InducementLevel this, color c_bull, color c_bear) =>
color c = this.dir == 1 ? c_bull : c_bear
string txt = this.isSwept ? "IDM ✓" : "IDM ✗"
if na(this.idmLine)
this.idmLine := line.new(this.bIndex, this.price, bar_index, this.price, color=c, style=line.style_dashed)
else if not this.isSwept
this.idmLine.set_x2(bar_index)
if na(this.idmLabel)
this.idmLabel := label.new(bar_index, this.price, txt, style=label.style_none, textcolor=c, size=size.small, textalign=text.align_left)
else if not this.isSwept
this.idmLabel.set_x(bar_index)
this
This method is responsible for visualizing each inducement level.
First, it selects the correct color according to direction. Bullish levels use the bullish color input, and bearish levels use the bearish color input. Then it builds a text state:
"IDM ✗" means the level is still active and not yet swept.
"IDM ✓" means the level has already been swept.
If the line does not exist yet, the script creates a dashed horizontal line starting from the level’s origin bar to the current bar. If the line already exists and the level is still unswept, the line is extended to the latest bar.
The label follows the same logic. If no label exists, it is created. If the label already exists and the level is still active, its position is moved to the latest bar.
So visually, each active IDM behaves like a live horizontal liquidity reference that extends forward until price takes it.
3) Detecting Liquidity Sweeps
method checkSweep(InducementLevel this, float currLow, float currHigh, color c_bull, color c_bear) =>
if not this.isSwept
swept = false
if this.dir == 1 and currLow <= this.price
swept := true
else if this.dir == -1 and currHigh >= this.price
swept := true
This method determines whether an existing inducement level has been taken.
The logic is direction specific.
For bullish IDM:
if the current low trades at or below the level price, the level is considered swept.
For bearish IDM:
if the current high trades at or above the level price, the level is considered swept.
This matches the structural idea behind inducement. A bullish pullback low represents liquidity resting below price, and that liquidity is considered taken once price trades through it. A bearish pullback high represents liquidity resting above price, and that liquidity is considered taken once price pushes through it.
So this method is the event detector that turns an active liquidity level into a completed liquidity event.
4) Updating the Visual State After a Sweep
if swept
this.isSwept := true
color c = this.dir == 1 ? color.new(c_bull, 50) : color.new(c_bear, 50)
this.idmLine.set_color(c)
this.idmLine.set_style(line.style_dotted)
this.idmLine.set_x2(bar_index)
this.idmLabel.set_text("IDM ✓")
this.idmLabel.set_textcolor(c)
this.idmLabel.set_x(bar_index)
Once a sweep happens, the script changes both the internal state and the visual appearance.
The level is marked as swept with this.isSwept := true .
Then the line color becomes softer by applying transparency.
The line style changes from dashed to dotted.
The label text changes from IDM ✗ to IDM ✓ .
This is useful because it preserves the historical location of the inducement while also showing that the level is no longer pending. In other words, the chart keeps the context but changes the state.
5) Filtering Out Inside Bars
var float mHigh = high
var float mLow = low
bool isInside = high <= mHigh and low >= mLow
This small block is more important than it looks.
The script stores a reference range using mHigh and mLow . A bar is considered inside if its high is less than or equal to the stored high and its low is greater than or equal to the stored low.
In simple terms, an inside bar is a bar that remains contained within the prior meaningful structure range. The script ignores those bars for the purpose of leg progression.
This helps reduce noise because inside bars usually reflect compression rather than new structural information. By ignoring them, the indicator focuses on actual range expansion and meaningful pullback development.
6) Tracking Trend State and Leg Extremes
var int trend = 1
var float legHigh = high
var float legLow = low
var float pullbackLow = na
var int pullbackLowBar = na
var float pullbackHigh = na
var int pullbackHighBar = na
This block defines the internal market structure memory.
trend stores whether the script currently sees the market as bullish or bearish.
legHigh and legLow track the active structural extreme of the current leg.
pullbackLow and pullbackHigh store the most important retracement extreme that forms against the current trend.
So the script is always tracking two things at once:
the direction of the main move,
and the deepest retracement against that move.
That retracement extreme later becomes the candidate IDM if price resumes the original direction.
7) Bullish Leg Logic and Bullish IDM Creation
if trend == 1
if high > legHigh
if not na(pullbackLow)
activeIDMs.push(InducementLevel.new(pullbackLow, pullbackLowBar, 1, na, na, false))
pullbackLow := na
legHigh := high
else if brokeLow
if na(pullbackLow) or low < pullbackLow
pullbackLow := low
pullbackLowBar := bar_index
This is the heart of bullish inducement detection.
When the script is in bullish mode, it watches for two types of events.
First, if price makes a new leg high:
high > legHigh
That means bullish continuation has occurred. If a downside pullback low had been stored before this continuation, the script converts that pullback low into a new bullish IDM by pushing it into the active array.
That is the crucial idea:
the pullback low becomes inducement only after price proves continuation by printing a fresh high.
Second, if the current bar breaks below the stored micro range low:
brokeLow
Then the script updates pullbackLow if this new low is deeper than the previously stored pullback. This allows the script to keep tracking the deepest retracement inside the bullish leg until continuation happens.
So bullish IDM is created from the most meaningful downside retracement that occurs before the next bullish expansion.
8) Bearish Leg Logic and Bearish IDM Creation
else if trend == -1
if low < legLow
if not na(pullbackHigh)
activeIDMs.push(InducementLevel.new(pullbackHigh, pullbackHighBar, -1, na, na, false))
pullbackHigh := na
legLow := low
else if brokeHigh
if na(pullbackHigh) or high > pullbackHigh
pullbackHigh := high
pullbackHighBar := bar_index
This is the mirror image of the bullish logic.
When the script is in bearish mode, it waits for a new leg low:
low < legLow
If that happens and a prior upside pullback high was stored, the script converts that pullback high into a bearish IDM. This marks the retracement high as a future liquidity point above price.
If price does not yet continue lower but instead breaks upward inside the local structure:
brokeHigh
Then the script updates pullbackHigh if the new high is greater than the previously stored retracement high.
So bearish IDM is created from the strongest upside retracement that forms before the next bearish continuation.
9) Detecting Trend Reversal and Resetting the Pullback Memory
if low < legLow
trend := -1
legLow := low
pullbackLow := na
pullbackHigh := na
if high > legHigh
trend := 1
legHigh := high
pullbackHigh := na
pullbackLow := na
These blocks handle directional flips.
Inside bullish mode, if price breaks below the active leg low, the script changes its internal state to bearish.
Inside bearish mode, if price breaks above the active leg high, the script changes its internal state to bullish.
Whenever the trend flips, the stored pullback variables are cleared. That is important because retracement data from the old trend should not be reused after the market has structurally changed direction.
So the script always keeps its inducement logic aligned with the current structural leg rather than mixing information from opposite phases.
10) Updating the Reference Range After a Non Inside Bar
if not isInside
bool brokeLow = low < mLow
bool brokeHigh = high > mHigh
mHigh := high
mLow := low
This block updates the structure reference only when the current bar is not an inside bar.
Before resetting the reference range, the script checks whether the current bar expanded below the stored low or above the stored high. Those two booleans are then used in the bullish and bearish logic to decide whether the move represents pullback development or continuation.
After those checks are done, the reference high and low are updated to the current bar’s high and low.
So mHigh and mLow act like a rolling structural filter that helps the script ignore internal compression and focus on meaningful range expansion.
11) Managing All Active IDM Levels on Every Bar
if activeIDMs.size() > 0
for i = 0 to activeIDMs.size() - 1
idm = activeIDMs.get(i)
idm.checkSweep(low, high, colorBullIDM, colorBearIDM)
idm.draw(colorBullIDM, colorBearIDM)
This is the execution loop for all stored inducement levels.
On every bar, the script goes through each active IDM and does two things:
it checks whether the level has now been swept,
and it redraws or updates the level on the chart.
This means every stored level remains live and state aware. Unswept levels keep extending forward, while swept levels lock their appearance into a completed state.
So the script is always balancing two layers:
new IDM creation from ongoing structure,
and lifecycle management of previously created levels.
12) Limiting the Number of Stored Levels
if activeIDMs.size() > 50
activeIDMs.shift()
This last block keeps the internal IDM array from growing indefinitely.
If more than fifty inducement levels are stored, the oldest one is removed from the array. This helps keep memory usage under control and makes the indicator more practical for ongoing chart use.
The purpose here is not analytical. It is purely operational. The script limits historical storage so the active structure set remains manageable. Indicator

Wraith Protocol WRAITH PROTOCOL
All-In-One Fibonacci | Volume Profile | Market Intelligence Overlay
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SHORT DESCRIPTION
─────────────────
Automatically maps Fibonacci retracements, buy/sell volume profile, and a
live market statistics table onto your chart — all in one clean overlay.
FULL DESCRIPTION
────────────────
WRAITH PROTOCOL is a precision-built overlay indicator that combines three
institutional-grade tools into a single, zero-clutter chart experience.
Designed for traders who demand structure, confluence, and real-time market
intelligence without switching between tools or cluttering their workspace.
It silently watches the last N candles, detects the swing high and low,
and then builds everything — Fibonacci levels, volume distribution, and
a full statistics dashboard — automatically, on every bar.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
WHAT IT DOES — FEATURE BREAKDOWN
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. AUTO FIBONACCI RETRACEMENTS
────────────────────────────
Automatically detects the highest high and lowest low over your chosen
lookback period and draws the full Fibonacci retracement grid between them.
Levels plotted:
-0.13 (Extension above high)
0.0 (Swing High — strong border line)
0.13 (Minor extension)
0.236 (Shallow retracement)
0.382 (Golden ratio zone — minor)
0.5 (Midpoint)
0.618 (Golden ratio — key confluence)
0.786 (Deep retracement)
0.886 (Final defense level)
1.0 (Swing Low — strong border line)
1.13 (Extension below low)
Each level is price-labelled on the right side with its ratio value.
Key levels (0.0 and 1.0) are rendered thicker and brighter.
The grid auto-updates every bar — no manual drawing needed.
Option: Enable "Extend to Right Edge" to project levels forward into
future candle space for forward planning.
2. DASHED RANGE BOX
──────────────────
A clean dashed bounding box is drawn around the exact lookback window —
from the first bar of the range to the last — framing the high and low.
This gives instant visual context for where the Fibonacci grid is anchored
and separates the active analysis zone from historical price action.
3. VOLUME PROFILE HISTOGRAM (Buy / Sell Split)
─────────────────────────────────────────────
A horizontal volume profile is rendered on the right side of the chart,
broken into configurable price buckets across the full range.
Each bucket shows:
— Buy volume (blue bars): candles that closed above their open
— Sell volume (red/pink bars): candles that closed below their open
The dominant price bucket — the one with the highest total volume,
known as the Point of Control (POC) — is highlighted in cyan, making
it instantly identifiable as the most contested price level in the range.
The profile width and right-side offset are fully adjustable so it
never overlaps your candles.
4. LIVE STATISTICS TABLE
────────────────────────
A clean 5-column, 4-row table is displayed at the bottom center of the
chart with real-time data derived from the lookback window.
Row 1 — Volume Intelligence:
Total Candle : Number of candles analyzed
Biggest Sell : Price of the single highest-volume bearish candle
Biggest Buy : Price of the single highest-volume bullish candle
Buy Rate : % of total volume that was buying pressure
Sell Rate : % of total volume that was selling pressure
Row 2 — Market Structure:
Trend : Bullish or Bearish (derived from buy/sell rate dominance)
Support : Auto-calculated at the 88.6% Fibonacci retracement
Resistance : Auto-calculated at the 61.8% Fibonacci retracement
P&L : % distance between support and resistance (range size)
Estimate : "Up" if price is below resistance, "Down" if above
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SETTINGS & CUSTOMISATION
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
General
• Lookback Period — Number of candles to analyze (default: 60)
• Volume Profile Buckets — Price level resolution of the histogram
• Profile Max Width — Horizontal width of the profile bars in bar units
• Profile Right Offset — Gap between last candle and profile start
Fibonacci
• Show Fibonacci Levels — Toggle the full Fib grid on/off
• Extend to Right Edge — Project Fib lines into future candle space
Visual
• Show Range Box — Toggle the dashed bounding box
• Show Volume Profile — Toggle the histogram
• Show Info Table — Toggle the statistics table
• Color Candles — Apply bull/bear custom colours to all candles
• Bull Candle Color
• Bear Candle Color
• Buy Volume Color
• Sell Volume Color
• Dominant Level Color
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
HOW TO USE
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Step 1 — Add to chart
Apply WRAITH PROTOCOL to any chart and timeframe. It works on all assets:
crypto, forex, stocks, indices, and futures.
Step 2 — Set your lookback
Adjust the lookback period to match your trading horizon.
Recommended starting points:
Scalping (1m–15m) : 30–60 candles
Swing (1h–4h) : 60–120 candles
Position (Daily+) : 60–200 candles
Step 3 — Read the levels
Price approaching the 0.618 or 0.886 Fibonacci level with the table
showing Bearish trend and high sell rate = high-probability rejection zone.
Price holding above the dominant cyan volume bucket with a Bullish trend
reading = strong continuation signal.
Step 4 — Confirm with the table
Use the Buy Rate vs Sell Rate to gauge who is in control.
Use the Estimate field as a quick directional bias filter.
Use the PnL field to assess the risk/reward of the current range.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
WORKS BEST WITH
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• Any timeframe from 1 minute to Weekly
• Crypto pairs (BTC, ETH, SOL, etc.)
• Forex majors and minors
• Stock indices and individual equities
• Futures contracts
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
IMPORTANT NOTES
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
• This indicator is for informational and educational purposes only.
It does not constitute financial advice.
• Past performance of any level or signal does not guarantee future results.
• Always use proper risk management and combine with your own analysis.
• The Estimate field is a directional bias tool, not a trade signal.
• Best used as a confluence layer alongside your primary strategy. Enjoy !!
Indicator

VIX Curve Pro - Real-Time Term Structure with StatisticsThis indicator displays the VIX term structure as a spatial curve directly on the chart, allowing you to instantly identify whether the volatility market is in contango or backwardation.
It shows the relationship between different VIX maturities (9D, 30D, 3M, 6M, 1Y) as a single curve.
It also shows some statistics and helps with market detection:
Historical percentile rankings for key VIX ratios
Real-time min/max/average/median values over lookback period
Current VIX term values with regime indicators
Understand where current conditions sit relative to historical context
Automatic identification of contango vs backwardation states
Visual indicators showing which part of the curve is inverted
Optional information guide explaining market states and trading implications
How to Use:
The curve shows the "shape" of volatility expectations across time. An upward-sloping curve (contango) means calm markets where longer-term volatility is priced higher than near-term. A downward-sloping curve (backwardation) shows market stress, where near-term volatility spikes above longer-term expectations.
Use the statistical tables to understand whether current ratios are at historical extremes (high percentile rank) or lows (low percentile rank), helping you gauge whether volatility structures are stretched or compressed.
Perfect for:
Volatility traders and options strategists
VIX futures and options traders
Understanding market fear and complacency levels
Timing volatility trades based on term structure
In the example above, I've added a chart with TVC:VIX , CBOE:VIX9D , CBOE:VIX3M and $CBOE:VIX6M. It is possible to see that although they are still in backwardation (short term vix is lower than long term), it might be close to flip. This kind of situation deserve extra attention. You can set alerts to when it flips.
This is a simple but useful indicator. Let me know if you have any questions! Indicator

Precision Supply MonitorPrecision Supply Monitor — Wyckoff-Inspired Supply & Demand Phase Detection
Precision Supply Monitor (PSM) analyzes price action and volume behavior to identify supply and demand phases in real time. The script evaluates market conditions using a weighted scoring model and presents the results through a three-meter dashboard table designed to help visualize how supply and demand conditions are evolving.
PSM is particularly useful for analyzing nano, micro, and small-cap stocks where float mechanics and supply rotation can strongly influence price behavior.
━━━━━━━━━━━━━━━━━━━━━━━━━━
QUICK START
━━━━━━━━━━━━━━━━━━━━━━━━━━
1. Start with the Phase row to see the current supply/demand environment.
2. Check Float Rotation to understand how much of the float has traded.
3. Watch Squeeze Pressure for compression that may precede expansion.
Strong readings often occur when multiple meters align — for example, elevated Float Rotation combined with rising Squeeze Pressure while price remains stable.
━━━━━━━━━━━━━━━━━━━━━━━━━━
PHASE DETECTION
━━━━━━━━━━━━━━━━━━━━━━━━━━
PSM continuously evaluates price and volume behavior to determine which of five phases best describes the current market environment. Each phase is scored from 0–100% and the highest scoring condition becomes the active phase displayed in the dashboard table. The chart examples below correspond with each phase description.
DISTRIBUTION
Market behavior may reflect selling pressure, characterized by bear-biased candles, the appearance of new lows within the lookback window, and elevated relative volume. A weighted scoring model prioritizes bear bias and new-low activity while applying penalties during tight consolidations to reduce false readings. Distribution can occur during both declining and advancing price action — selling pressure may be present even as price moves higher, particularly during late-stage momentum moves on low-float stocks where supply begins to overwhelm demand.
ABSORPTION
Buyers may be absorbing available supply within a compressed range. The primary signal is high volume occurring alongside a small price range — behavior commonly associated with supply being absorbed without significant price decline. Price holding above a short-term average strengthens this phase.
FLOAT LOCK
Supply availability begins to decline while price remains stable. Volume contracts while turnover remains elevated relative to float or average volume. This behavior can occur when a large portion of tradable shares has already rotated through the market.
FLOAT STRESS (requires float input — nano/micro/small tiers)
Float rotation has reached extremely elevated levels. When turnover approaches six times the float, supply may become thin and smaller buying pressure can move price more rapidly.
PARABOLIC RISK (requires float input — nano/micro/small tiers)
Turnover has reached extreme levels (approximately eight times float or higher). These conditions sometimes occur during late-stage momentum moves where exhaustion risk increases.
━━━━━━━━━━━━━━━━━━━━━━━━━━
THREE-METER DASHBOARD
━━━━━━━━━━━━━━━━━━━━━━━━━━
PSM displays three independent meters that measure different aspects of market behavior. The dashboard table updates in real time as new bars print, allowing traders to observe how supply and demand conditions evolve during active trading.
PHASE METER
Displays the strength of the currently detected phase (0–100%). Higher values indicate stronger alignment between observed market conditions and the detected phase.
FLOAT ROTATION
Measures how much of the tradable float has rotated through the market during the turnover window. When float shares are entered manually, turnover is calculated relative to float size. If float is not entered, the meter falls back to a volume-based proxy and displays "(no float)".
SQUEEZE PRESSURE
Measures compression and stability conditions that may precede directional expansion. The score incorporates range compression, price stability, relative volume, absence of new lows, and an optional float-rotation bonus when float data is provided.
Reading the meters together can help contextualize market behavior. For example:
• High Float Rotation + High Squeeze Pressure — supply rotation with compression
• High Float Rotation + Low Squeeze Pressure — heavy trading but unstable price action
• Low Float Rotation + High Squeeze Pressure — early compression forming
━━━━━━━━━━━━━━━━━━━━━━━━━━
TIER-AWARE THRESHOLDS
━━━━━━━━━━━━━━━━━━━━━━━━━━
All detection thresholds automatically adjust based on instrument tier.
PSM classifies instruments as:
Nano • Micro • Small • Mid • Large • Crypto • ETF
When market capitalization data is unavailable, the script falls back to average dollar volume.
Each tier uses calibrated values for:
• Relative volume thresholds
• Range compression detection
• Turnover requirements
• Volume-drop conditions
• New-low lookback windows
• Bear-bias scoring windows
This ensures the detection model adapts to the typical behavior of the instrument being analyzed.
━━━━━━━━━━━━━━━━━━━━━━━━━━
FLOAT OVERRIDE INPUT
━━━━━━━━━━━━━━━━━━━━━━━━━━
Float data on nano, micro, and small-cap stocks can occasionally be outdated or inaccurate — particularly after reverse splits or secondary offerings.
PSM allows users to manually enter float shares for Nano, Micro, and Small tier instruments. When provided, turnover calculations use actual float size rather than average volume. This enables Float Rotation, Float Stress, and Parabolic Risk phases to operate more accurately.
Mid, Large, Crypto, and ETF instruments ignore this input and automatically use volume-based turnover.
━━━━━━━━━━━━━━━━━━━━━━━━━━
PHASE MARKERS
━━━━━━━━━━━━━━━━━━━━━━━━━━
Optional markers plot above or below candles when all required phase conditions are met simultaneously and persist for two or more consecutive bars. The two-bar requirement reduces noise from single-bar spikes.
• Yellow circle (below) — Absorption
• Green circle (below) — Float Lock
• Red circle (above) — Distribution
• Orange circle (above) — Float Stress
• Magenta circle (above) — Parabolic Risk
Float Stress and Parabolic Risk markers require float shares to be entered manually. Without a float value these markers will not appear.
Markers are informational and do not represent trading signals.
━━━━━━━━━━━━━━━━━━━━━━━━━━
WHAT MAKES PSM DIFFERENT
━━━━━━━━━━━━━━━━━━━━━━━━━━
Most volume and momentum indicators focus on price direction or volatility expansion. PSM focuses specifically on the supply side of the market — how shares are rotating, whether buyers may be absorbing that supply, and when the available float may be becoming thin enough to influence price movement.
Standard indicators are typically calibrated for large and mid-cap markets where float is abundant. On nano and micro-cap stocks, float mechanics behave differently. A relatively small amount of volume can rotate a large percentage of the available float, producing price behavior that standard RVOL or momentum tools may not capture accurately.
PSM addresses this by combining Wyckoff-inspired phase scoring with float rotation mechanics and tier-aware thresholds that automatically adjust to the instrument being analyzed. Instrument tier is determined using market capitalization data available within PulseWire, falling back to average dollar volume when market cap data is unavailable. The result is a supply and demand framework designed specifically for the behavior of low-float momentum stocks — while remaining functional across all instrument types.
━━━━━━━━━━━━━━━━━━━━━━━━━━
HOW TO USE
━━━━━━━━━━━━━━━━━━━━━━━━━━
PSM is designed as an educational and observational tool. The following describes how traders may interpret the information it displays.
Start with the Phase row
The active phase provides a high-level read on the current supply and demand environment. Distribution may indicate that selling pressure is present. Absorption suggests buyers may be active. Float Lock suggests supply may be thinning. Float Stress and Parabolic Risk indicate elevated float rotation that may influence price behavior.
Use the rationale
A plain-English rationale at the bottom of the dashboard table identifies the primary factors driving the current phase reading — helping traders understand not just what the phase is, but why it is occurring. Examples include "bear bias + new lows" during Distribution or "vol drying up + high turnover" during Float Lock.
Cross-reference the three meters
The Phase Meter, Float Rotation, and Squeeze Pressure meters each measure a different dimension of market behavior. Reading them together provides more context than any single meter alone. A phase reading supported by strong meter alignment across all three may carry more observational weight than one where the meters diverge.
Float Stress and Parabolic Risk as awareness signals
These phases indicate that float rotation has reached elevated levels. They are not entry or exit signals — they are contextual awareness indicators that suggest supply conditions may be changing. Traders should apply their own analysis and risk management when interpreting these readings.
Enter the float for nano and micro-cap names
PulseWire float data can be stale or inaccurate on low-float stocks, particularly after reverse splits or secondary offerings. Entering the known float shares in the settings enables more accurate Float Rotation readings and unlocks Float Stress and Parabolic Risk phase detection.
━━━━━━━━━━━━━━━━━━━━━━━━━━
WHAT THIS SCRIPT DOES NOT DO
━━━━━━━━━━━━━━━━━━━━━━━━━━
Precision Supply Monitor does not generate buy/sell signals, execute trades, or manage positions. Phase readings update continuously as new data appears and may change as market conditions evolve.
This tool is intended to assist interpretation of supply and demand dynamics and should be used alongside independent analysis and risk management.
━━━━━━━━━━━━━━━━━━━━━━━━━━
SETTINGS OVERVIEW
━━━━━━━━━━━━━━━━━━━━━━━━━━
Display
• Show/hide stats table
• Table position and size
• Show/hide phase markers
• Marker offset (ATR)
Core
• Average volume length
• Average range length
• Turnover window
• Extension lookback
• Float Shares Override (0 = auto) — Nano/Micro/Small only. Enter known float (e.g. 7880000). Required for Float Stress, Parabolic Risk, and float-gated Squeeze bonus. Ignored on Mid/Large/Crypto/ETF. Indicator

Indicator

VIX-VIXEQ Regime DetectorThe VIX-VIXEQ Regime Detector is an market structure indicator that compares the CBOE Volatility Index (VIX) with the CBOE S&P 500 Equal Weight Volatility Index (VIXEQ) to identify distinct market volatility regimes.
It analyses the relationship between index-level and constituent-level volatility, and helps investors to detect regime changes that often precede major market moves.
Credits: Idea suggested by @m_chromatic Thanks a lot!
What It Measures
VIX measures implied volatility of S&P 500 index options (cap-weighted, dominated by mega-cap stocks)
VIXEQ measures implied volatility of equal-weighted S&P 500 constituents (reflects broader market volatility)
The ratio between these two metrics reveals whether volatility is concentrated in mega-caps or dispersed across the broader market.
When VIXEQ rises faster than VIX (ratio > 1.0), it indicates that constituent stocks are experiencing higher volatility than the index itself. This divergence often signals:
Increased market stress
Breakdown in correlation
Potential regime transitions
Mean reversion opportunities
Five Market Regimes in the Indicator
The indicator uses adaptive thresholds based on rolling statistics to classify markets into five distinct regimes:
🔵 CONCENTRATION (Ratio < threshold): Mega-cap dominance, Low dispersion, Healthy market structure
🟢 NORMAL (Ratio near mean): Balanced volatility, Healthy market conditions, Standard risk environment
🟡 ELEVATED (Ratio moderately above mean), Early warning signal, Rising constituent stress, Watch for deterioration
🟠 DISPERSION (Ratio significantly above mean), Broad market stress, Elevated constituent volatility, Defensive positioning warranted
🔴 SYSTEMIC (Ratio > 1.5σ above mean), Crisis conditions, Extreme constituent stress, High mean reversion potential
The indicator includes z-score calculations to measure how extreme the current spread is relative to historical norms.
Recommended Timeframe
Daily (1D): Optimal for most use cases - balances signal quality with responsiveness
Weekly (1W): For macro positioning and long-term regime context
4-Hour: Not recommended - too noisy for structural regime analysis
Technical Notes
Uses request.security() to fetch VIX and VIXEQ data
Ratio is scaled by (ratio - 1) × 10 for chart visibility alongside spread
Actual ratio values are displayed in the table and labels
Adaptive thresholds recalculate on every bar based on rolling statistics
All regime classifications update in real-time
Indicator

Indicator

Institutional Structure Intelligence Engine [JOAT]Institutional Structure Intelligence Engine
Introduction
The Institutional Structure Intelligence Engine is an advanced open-source market structure indicator that combines swing detection, order block analysis, fair value gap (FVG) identification, institutional level tracking, and velocity analysis into a comprehensive structural intelligence system. This indicator helps traders identify where institutional orders are positioned, where price inefficiencies exist, and how market structure is evolving in real-time.
Unlike basic support/resistance indicators that draw static lines, this engine dynamically tracks institutional footprints through order blocks (zones where institutions accumulated or distributed), fair value gaps (price inefficiencies that often get filled), breaker blocks (failed order blocks signaling reversals), and multi-timeframe institutional levels. The indicator is designed for traders who understand that market structure reveals institutional intent and that price gravitates toward areas of institutional interest.
Why This Indicator Exists
This indicator addresses the challenge of identifying institutional positioning in real-time. Institutional traders leave structural footprints that can be detected through systematic analysis. By combining multiple structural methodologies, this indicator reveals:
Order Block Detection: Identifies zones where institutions accumulated or distributed positions before major moves
Fair Value Gaps: Detects price inefficiencies where rapid institutional movement left unfilled gaps
Breaker Blocks: Tracks failed order blocks that signal potential trend reversals
Institutional Levels: Monitors Weekly/Daily highs and lows, Premium/Discount zones, and Golden Zone (0.618-0.5 Fibonacci)
Structure Velocity: Measures how quickly market structure is forming to identify momentum shifts
Compression Zones: Detects periods of range compression that often precede explosive moves
Each component provides a different structural perspective. Order blocks show where institutions positioned, FVGs show where price moved inefficiently, breaker blocks show where structure failed, institutional levels show key reference points, velocity shows momentum, and compression zones show coiling energy. Together, they create a comprehensive structural intelligence system.
Below showing the Main Features and how it works:
Core Components Explained
1. Advanced Order Block Detection
Order blocks are identified using strict volume and price action criteria:
Bullish Order Block:
// Two consecutive down candles followed by strong up move
if close < open and close < open and close > open and
volume > avgVolume * obVolumeThreshold and
close > high and
(high - low ) <= atr * maxATRMult and
(close - open) > atr * 0.5
Bearish Order Block:
// Two consecutive up candles followed by strong down move
if close > open and close > open and close < open and
volume > avgVolume * obVolumeThreshold and
close < low and
(high - low ) <= atr * maxATRMult and
(open - close) > atr * 0.5
Order blocks represent the last opposite-direction move before a strong impulse. The logic: institutions accumulate/distribute in the opposite direction before pushing price in their intended direction. The indicator tracks:
Order block volume (total volume during formation)
Number of touches (how many times price returned to the zone)
Zone strength (calculated from volume, touches, and age)
Breaker status (whether the order block was invalidated)
Overlapping Order Block Combination:
When multiple order blocks overlap, the indicator combines them into a single stronger zone:
if doOBsOverlap(ob1, ob2)
ob1.top := math.max(ob1.top, ob2.top)
ob1.bottom := math.min(ob1.bottom, ob2.bottom)
ob1.obVolume += ob2.obVolume
ob1.touches += ob2.touches
ob1.strength := math.max(ob1.strength, ob2.strength)
This prevents chart clutter and highlights the most significant institutional zones.
2. Breaker Block Detection
Breaker blocks are order blocks that failed - price broke through them instead of bouncing. This signals potential trend reversal:
// Bullish OB becomes breaker if price breaks below
if low < ob.bottom
ob.breaker := true
ob.breakTime := time
// Bearish OB becomes breaker if price breaks above
if high > ob.top
ob.breaker := true
ob.breakTime := time
Breaker blocks are displayed with distinct colors (cyan for bullish breakers, orange for bearish breakers) to differentiate them from active order blocks. When an order block becomes a breaker, it often signals that institutional positioning has changed and the previous structure is no longer valid.
3. Fair Value Gap (FVG) Detection
FVGs are identified using strict gap and volume criteria:
Bullish FVG:
// Gap between 2 bars ago high and current low
bool bullishFVGDetected = low > high and
(low - high ) > atr * 0.3 and // Minimum gap size
volume > avgVolume * 0.8 // Volume confirmation
Bearish FVG:
// Gap between 2 bars ago low and current high
bool bearishFVGDetected = high < low and
(low - high) > atr * 0.3 and // Minimum gap size
volume > avgVolume * 0.8 // Volume confirmation
FVGs represent price inefficiencies where institutional orders moved price so quickly that normal auction process was bypassed. These gaps often get "filled" as price returns to establish fair value. The indicator tracks:
FVG top and bottom prices
Mitigation status (whether the gap has been filled)
Mitigation bar (when the gap was filled)
Only non-mitigated FVGs are displayed to keep charts clean. Maximum FVG count is customizable (default: 3) to prevent clutter.
Showing Order Block, Breaker Block, and All Combined OB's that occured:
4. Institutional Level Tracking
The indicator monitors key institutional reference levels:
Weekly High/Low:
float lastWeekHigh = request.security(syminfo.tickerid, "W", high )
float lastWeekLow = request.security(syminfo.tickerid, "W", low )
Daily High/Low:
float yesterdayHigh = request.security(syminfo.tickerid, "D", high )
float yesterdayLow = request.security(syminfo.tickerid, "D", low )
Premium/Discount Zones:
Based on weekly range:
Premium Zone: 70%-100% of weekly range (institutional selling zone)
Discount Zone: 0%-30% of weekly range (institutional buying zone)
Golden Zone: 50%-61.8% of weekly range (optimal entry zone)
float weekRange = lastWeekHigh - lastWeekLow
float premiumTop = lastWeekHigh
float premiumBot = lastWeekLow + (weekRange * 0.7)
float discountTop = lastWeekLow + (weekRange * 0.3)
float discountBot = lastWeekLow
float goldenTop = lastWeekLow + (weekRange * 0.618)
float goldenBot = lastWeekLow + (weekRange * 0.5)
These zones help traders identify where institutions are likely to buy (discount) or sell (premium), with the golden zone representing optimal risk:reward entries.
Breaker Block with VOL, Discount zone touched for signal, Market Phase + Quality of chart score:
5. Structure Velocity Analysis
The indicator measures how quickly market structure is forming:
// Price velocity
priceVelocity = ta.change(close, velocityLength) / velocityLength
velocityMA = ta.sma(math.abs(priceVelocity), velocityLength)
velocityScore = velocityMA > 0 ? math.abs(priceVelocity) / velocityMA : 0
// Volume momentum
volumeMomentum = volume / avgVolume
volumeAcceleration = ta.change(volumeMomentum, 5)
// Structure velocity (how fast structure is forming)
structureVelocity = (bar_index - lastSwingHighBar) + (bar_index - lastSwingLowBar)
High velocity indicates rapid structure formation (trending market), low velocity indicates slow structure formation (ranging market). Velocity analysis helps traders identify momentum shifts before they become obvious in price.
6. Compression to Expansion Detection
The indicator detects periods of range compression using strict criteria:
float rangeMA = ta.sma(high - low, 50)
float currentRange = high - low
bool compressed = currentRange < rangeMA * 0.3 and volume < avgVolume * 0.8
bool expanding = currentRange > rangeMA * 2.0 and volume > avgVolume * 1.3
Compression zones are only displayed if:
Compression lasted at least 10 bars
Range is less than 1.5x ATR (truly tight)
This prevents false compression signals and highlights only significant coiling periods that often precede explosive moves.
7. Swing Point Detection
The indicator uses pivot-based swing detection:
pivotHigh = ta.pivothigh(high, swingLength, swingLength)
pivotLow = ta.pivotlow(low, swingLength, swingLength)
Swing points are stored in arrays and used for:
Structure line drawing
Break of Structure (BOS) detection
Change of Character (CHOCH) detection
Trend determination
Swing length is customizable (default: 10) to adjust sensitivity.
Visual Elements
Order Block Boxes: Filled boxes showing bullish (green) and bearish (red) order blocks with volume and touch count
Breaker Block Boxes: Distinct colored boxes (cyan/orange) showing failed order blocks
FVG Boxes: Transparent boxes showing bullish (green) and bearish (red) fair value gaps
Institutional Lines: Weekly high/low (purple), Daily high/low (yellow)
Premium/Discount Fills: Shaded zones showing premium (red), discount (green), and golden (orange) zones
Compression Boxes: Purple boxes showing range compression periods
Swing Points: Triangle markers showing swing highs (red) and swing lows (green)
All visual elements use "locked" boxes that don't extend indefinitely, preventing chart clutter. Overlap prevention logic ensures boxes don't stack on top of each other.
Input Parameters
Structure Detection:
Swing Length: Period for pivot detection (default: 10, range: 3-50)
Show Swing Points: Toggle swing markers (default: enabled)
Show Structure Lines: Toggle structure lines (default: enabled)
Show Compression Zones: Toggle compression boxes (default: disabled to reduce clutter)
Order Blocks:
Show Order Blocks: Toggle order block boxes (default: enabled)
Combine Overlapping OBs: Merge overlapping order blocks (default: enabled)
Show Breaker Blocks: Toggle breaker block display (default: enabled)
Volume Threshold: Minimum volume multiplier for OB detection (default: 1.5)
Max Order Blocks: Maximum OBs to display (default: 3, range: 1-10)
Max ATR Multiplier: Maximum OB size relative to ATR (default: 2.5)
Market Structure:
Show Break of Structure: Toggle BOS markers (default: disabled to reduce clutter)
Show Change of Character: Toggle CHOCH markers (default: enabled)
Show Fair Value Gaps: Toggle FVG boxes (default: enabled)
Show FVG Mitigation: Track when FVGs are filled (default: enabled)
Max FVGs to Display: Maximum FVGs to show (default: 3, range: 1-10)
Institutional Levels:
Show Weekly High/Low: Toggle weekly levels (default: enabled)
Show Daily High/Low: Toggle daily levels (default: enabled)
Show Golden Zone: Toggle 0.618-0.5 Fib zone (default: enabled)
Show Premium/Discount Zones: Toggle institutional zones (default: enabled)
Velocity Analysis:
Show Structure Velocity: Toggle velocity calculations (default: enabled)
Velocity Period: Period for velocity analysis (default: 20, range: 5-50)
Display:
Table Position: Dashboard location (Top Right/Top Left/Bottom Right/Bottom Left)
Show Structure Quality Score: Toggle quality metrics (default: enabled)
Colors:
All colors are fully customizable including bullish/bearish structure, order blocks, breaker blocks, FVGs, weekly/daily levels, golden zone, premium/discount zones, and compression zones.
4HR TF BTCUSDT showing the zones being used in action and price movement:
How to Use This Indicator
Step 1: Identify Key Institutional Zones
Look for order blocks with high touch counts and strong volume. These represent areas where institutions are likely to defend their positions.
Step 2: Monitor Fair Value Gaps
FVGs often get filled as price returns to establish fair value. Look for entries when price approaches unfilled FVGs, especially if they align with order blocks.
Step 3: Watch for Breaker Blocks
When an order block becomes a breaker, it signals that institutional positioning has changed. This often marks trend reversals or significant structure shifts.
Step 4: Use Premium/Discount Zones
Look for long entries in discount zones (0-30% of range) and short entries in premium zones (70-100% of range). The golden zone (50-61.8%) offers optimal risk:reward.
Step 5: Check Institutional Levels
Weekly and daily highs/lows act as magnets for price. Breaks above/below these levels often lead to significant moves.
Step 6: Monitor Structure Velocity
High velocity indicates trending conditions (follow the trend), low velocity indicates ranging conditions (fade extremes).
Step 7: Wait for Compression Breakouts
Compression zones mark periods of coiling energy. Breakouts from compression often lead to explosive moves with strong follow-through.
Best Practices
Use on 15-minute to 4-hour timeframes for optimal structure clarity
Combine order blocks with FVGs for high-probability entries
Wait for price to return to order blocks before entering - don't chase
Breaker blocks often become new support/resistance in opposite direction
Premium/discount zones work best in trending markets
Golden zone entries offer best risk:reward when combined with order blocks
Compression zones require patience - wait for confirmed breakout
Structure velocity helps determine whether to trade with trend or fade extremes
Multiple touches on an order block increase its significance
FVG fills often provide excellent entry opportunities with tight stops
Indicator Limitations
Order blocks don't always hold - institutions can change positioning
FVGs don't always get filled - some gaps persist indefinitely
Breaker blocks can fail - price can return above/below breaker zones
Premium/discount zones are relative to recent range - not absolute levels
Compression detection requires sufficient bars - may not work on new instruments
Structure velocity is a lagging indicator - confirms moves after they start
Maximum box/line limits (500 each) can be reached on lower timeframes with long history
Overlap prevention may hide some valid order blocks to prevent clutter
The indicator shows structure, not direction - requires trader interpretation
Works best on liquid instruments with clear institutional participation
Technical Implementation
Built with Pine Script v6 using:
Custom type definitions for OrderBlockInfo and FVGInfo
Array-based storage for order blocks, FVGs, and swing points
Strict volume and ATR-based filtering for accuracy
Overlap detection and combination logic for order blocks
Breaker block tracking with time-based invalidation
FVG mitigation detection
Multi-timeframe security requests for institutional levels
Fibonacci-based premium/discount zone calculations
Velocity and momentum analysis
Compression detection with strict criteria
Dynamic box and label management with anti-overlap logic
The code is fully open-source and can be modified to suit individual trading styles and preferences.
Originality Statement
This indicator is original in its comprehensive structural integration. While individual components (order blocks, FVGs, institutional levels) are established concepts, this indicator is justified because:
It combines seven distinct structural methodologies into a unified intelligence system
Order block detection uses strict multi-criteria filtering (volume, ATR, price action) for accuracy
Automatic order block combination prevents clutter while highlighting strongest zones
Breaker block tracking provides reversal signals not available in basic order block indicators
FVG detection includes mitigation tracking and strict size/volume filtering
Premium/discount zones integrate Fibonacci analysis with institutional levels
Structure velocity analysis provides momentum context for structural zones
Compression detection uses strict criteria to identify only significant coiling periods
Anti-overlap logic ensures clean charts without sacrificing information
Each component contributes unique structural intelligence: order blocks show institutional positioning, FVGs show inefficiencies, breaker blocks show failures, institutional levels show reference points, velocity shows momentum, and compression shows coiling energy. The indicator's value lies in presenting these complementary structural perspectives simultaneously with intelligent filtering and display management.
Disclaimer
This indicator is provided for educational and informational purposes only. It is not financial advice or a recommendation to buy or sell any financial instrument. Trading involves substantial risk of loss and is not suitable for all investors.
Market structure analysis is a tool for understanding institutional positioning, not a crystal ball for predicting future price movement. Order blocks, FVGs, and institutional levels do not guarantee profitable trades. Past structural patterns do not guarantee future structural patterns. Market conditions change, and strategies that worked historically may not work in the future.
The zones and levels displayed are mathematical calculations based on current market data, not predictions of future price movement. High-quality order blocks, unfilled FVGs, and premium/discount zones do not guarantee profitable trades. Users must conduct their own analysis and risk assessment before making trading decisions.
Always use proper risk management, including stop losses and position sizing appropriate for your account size and risk tolerance. Never risk more than you can afford to lose. Consider consulting with a qualified financial advisor before making investment decisions.
The author is not responsible for any losses incurred from using this indicator. Users assume full responsibility for all trading decisions made using this tool.
-Made with passion by officialjackofalltrades Indicator

Indicator

Indicator

Precision SPXPrecision SPX — Multi‑Timeframe Levels + Automated Alerts for SPX Traders
Precision SPX is a manual‑control Support and Resistance system built for SPX traders who rely on structure, precision, and daily level updates. It plots Monthly, Weekly, Daily, and Daily Range levels to map where price may react, reverse, or consolidate. This version includes a full alert engine that notifies you the moment price interacts with any level.
Core Features
Multi‑Timeframe Levels
The indicator plots a complete structure:
Monthly Levels — High & Low
Weekly Levels — High & Low
Daily Levels — Six total (4 Red, 2 Pink)
Daily Range Levels — High & Low
All levels are manually entered for maximum precision.
Customizable Visuals
Adjustable label size
Adjustable horizontal label placement
Toggle level labels on/off
Clean color‑coded hierarchy
ES/SPY Conversion Support
Optional manual ES spread or SPY ratio input
Automatically adjusts SPX levels
Lightweight & User‑Friendly
No repainting
No heavy calculations
Easy to integrate into any chart layout
How It Works
Precision SPX plots manually‑controlled Support and Resistance levels across multiple timeframes. Each level is labeled and color‑coded so you can quickly identify:
Higher‑timeframe structure
Daily intraday reaction zones
Overnight range boundaries
Breakout and reversal points
How to Use It
1. Apply the Indicator
Add Precision SPX to your chart.
2. Enter Your Levels
Input your Daily, Daily Range, Weekly, and Monthly levels into the string fields.
3. Trade With Structure
Use the plotted levels to identify:
Reversals
Breakouts
Retests
Stop‑loss placement
High‑probability reaction zones
Combine with trendlines, volume profile, or oscillators for confirmation.
Built‑In Alerts
Precision SPX includes a complete alert engine so you can receive notifications when price crosses any level.
Alert Modes
Any alert() function call — triggers when price crosses any level, with duplicate‑candle suppression.
Individual Level Alerts — choose a specific level such as:
R2_Hi, R1_Hi, P_Hi, P_Lo, R1_Lo, R2_Lo, DR_Hi, DR_Lo, W_Hi, W_Lo, M_Hi, M_Lo.
Level Categorization
Daily Levels:
Red: R2_Hi, R1_Hi, R1_Lo, R2_Lo
Pink: P_Hi, P_Lo
Daily Range:
DR_Hi, DR_Lo
Weekly Levels:
W_Hi, W_Lo
Monthly Levels:
M_Hi, M_Lo
How to Add Alerts
Open the PulseWire alert panel
Select Precision SPX as the condition
Choose Any alert() function call or a specific level
Set expiration, message, and notification preferences
Save
Daily Workflow
Because SPX levels change daily:
Update your daily string values
Create a new alert each day (PulseWire requires this for updated values)
Alerts will trigger based on the conditions you select
Release Notes — Precision SPX
Feb 2026 — Major Update
Full alert engine added
“Any alert() function call” support
Duplicate‑candle suppression
Complete level categorization
Daily update workflow
Cleaned and reorganized structure
Legacy Notes (From Precision Levels)
Jun 12, 2025
Added highlighted price labels with adjustable size
Added ES/SPY conversion inputs
Dragging disabled when conversion is active
Jun 28, 2025
Added customizable label placement
Reordered string input structure
Standardized daily color order
Added toggle for level labels
Nov 8, 2025
Added Daily Range levels
Updated string hierarchy
Example structure:
Red, Red, Pink, Pink, Red, Red, DR_Hi, DR_Lo, Weekly, Weekly, Monthly, Monthly Indicator

Rejection Blocks [UAlgo]Rejection Blocks is a market structure and supply demand overlay built to detect and manage rejection based zones that form after liquidity sweeps and structure shifts. The script tracks recent swing highs and swing lows, monitors for sweep style rejection candles around those swing levels, and then requires a confirmation break before registering a Rejection Block as an active zone.
Each Rejection Block is visualized as an outer zone plus internal buy and sell strength segments that act like a compact sentiment map. The blocks extend forward over time, respond to mitigation and invalidation rules, and can optionally stop extending or be deleted after mitigation. The script also optionally draws structure annotations such as sweep markers and BOS or CHOCH lines to provide context for why a block formed.
This indicator is designed as a complete zone lifecycle engine. It focuses on repeatable rule based detection, strict candle shape filtering for rejection quality, and robust object management so you can keep a clean chart while tracking the most relevant zones.
🔹 Features
1) Pivot Based Market Structure Tracking
The engine uses pivot highs and pivot lows to identify the most recent swing high and swing low levels. These levels act as the structure references for:
Sweep detection
Break of structure detection
Change of character detection
Swing left bars and swing right bars control how strict the swing confirmation is.
2) Rejection Candle Validation with Sweep Logic
A candidate Rejection Block begins with a sweep style candle at a swing level:
Bullish rejection candle sweeps below the last swing low and closes back above it
Bearish rejection candle sweeps above the last swing high and closes back below it
Two sweep modes are available:
Wick sweep (open and close inside)
Any sweep (close inside)
Min sweep distance in ticks can be required to avoid tiny micro sweeps.
3) Optional Candle Shape Filter for Quality Control
When enabled, the script enforces a strict rejection candle profile using:
Minimum wick to body ratio
Minimum dominant wick percent of candle range
Maximum opposite wick percent of candle range
Maximum body percent of candle range
This helps filter out candles that technically sweep but do not display rejection characteristics.
4) Close Location Filters
Additional close filters can be applied:
None
Close in favorable half of the candle range
Close beyond open
This improves selectivity and allows you to tailor the definition of rejection strength.
5) Flexible Rejection Block Zone Models
The zone that is stored and drawn for a Rejection Block can be defined in multiple ways:
Wick to Body
Open to Extreme
Full Candle
Body
This allows alignment with different trading methodologies, from wick based reaction zones to body based execution zones.
6) Confirmation Window and Pending Candidates
Rejection candles do not become active zones immediately. They enter a pending list and require confirmation within a defined window. Confirmation is achieved when price breaks the opposite structure level:
Bullish candidate confirms when price breaks above the last swing high
Bearish candidate confirms when price breaks below the last swing low
If confirmation does not occur within the confirm window, the candidate expires. This prevents old sweeps from creating late zones.
7) Strength Segmentation Inside the Block
Each active block contains:
An outer zone box representing the full block range
An inner buy strength box
An inner sell strength box
A cap line that marks the maximum inner width boundary
Strength is estimated at formation time using one of two models:
Close location
Close plus wick
Inner widths scale based on the computed buy and sell strengths, giving a quick visual of where pressure likely dominated inside the rejection candle.
8) Lifecycle Management: Extension, Mitigation, Invalidation, Aging
Blocks are actively managed through their lifecycle:
Extension
Blocks extend to the right as time progresses.
Mitigation
Blocks can be marked mitigated by touch or by close inside. After mitigation, the block can optionally stop extending or be deleted.
Invalidation
Blocks can be invalidated by wick or by close beyond the block boundary, with optional deletion on invalidation.
Aging
Blocks can be removed after a maximum age in bars to keep the chart focused.
9) Structure Annotations: Sweep, BOS, CHOCH
When enabled, the script draws contextual structure lines and labels:
SW lines indicating swing sweep context
BOS lines for continuation breaks
CH lines for change of character
A maximum line budget is enforced to respect object limits.
10) Robust Object Budgeting and Cleanup
The engine enforces limits for:
Maximum blocks
Maximum pending candidates
Maximum structure lines
Old objects are deleted in a controlled way to avoid exceeding PulseWire limits and to keep the most relevant zones visible.
🔹 Calculations
1) Candle Parts and Rejection Shape Metrics
The script breaks each candle into components:
Range
Body size
Upper wick
Lower wick
It then normalizes values by range and uses them for shape validation:
Dominant wick is lower wick for bullish direction and upper wick for bearish direction
Opposite wick is the other side
Body percent is body divided by range
A rejection candle passes shape checks when dominant wick is large enough relative to body, dominant wick percent exceeds a threshold, opposite wick percent stays below a threshold, and body percent stays below a threshold.
2) Sweep Validation Against Structure Level
For bullish direction, sweep requires low to trade below the swing level by a tick margin and close to finish back above the level. For bearish direction, sweep requires high to trade above the swing level by a tick margin and close to finish back below the level.
Min sweep ticks sets the margin:
sweepMargin equals minSweepTicks multiplied by mintick
The wick sweep mode further requires open to remain inside the level on the correct side.
3) Zone Derivation Models
Zone bounds are determined from candle anatomy based on the selected RB zone model.
Wick to Body:
Bullish zone from body bottom to low
Bearish zone from high to body top
Open to Extreme:
Bullish zone from open to low
Bearish zone from high to open
Full candle:
High to low
Body:
Body top to body bottom
These bounds become the candidate block top and bottom.
4) Strength Estimation
Base strength uses close location within the candle range:
closeLoc equals clamp of (close minus low) divided by range
Buy strength equals closeLoc
Sell strength equals 1 minus buy strength
If Close plus wick is selected, dominant wick contribution is blended into the buy strength calculation using fixed weights. Strength is an approximation and is fixed at formation time.
5) Market Structure Break Detection and Trend State
The engine tracks last swing high and last swing low timestamps and prices. It then detects breaks using cross style conditions:
Bull break when close crosses above last swing high
Bear break when close crosses below last swing low
Trend direction is updated on confirmed bars after a break is detected. The engine also tracks the last broken swing timestamp to avoid duplicate structure events on the same swing.
BOS and CHOCH are derived by comparing the new break direction to the previous trend direction.
6) Candidate Creation and Pending Queue
On confirmed bars, if a rejection candle occurs at the relevant swing level, a Candidate is created with:
Formation time
Zone top and bottom
Direction
Buy and sell strength
Confirmation level which is the opposite swing level
Candidates are pushed into a pending array which is capped by max pending.
7) Candidate Confirmation Within a Window
Each pending candidate is evaluated until it either expires or confirms:
Expired when time since candidate leftT reaches confirmWindow in bars
Confirmed when price breaks the candidate confirmLevel in the direction required for structure confirmation
Confirmed candidates are converted into Blocks and added to the active blocks array.
8) Block Construction and Visual Geometry
When a block is created, the script draws:
Outer box covering the full block range
Inner buy and sell boxes split at the zone midpoint
Cap line placed at a maximum percentage of the outer width
Inner widths are scaled using the block strengths and innerMaxPctOfOuter. A minimum inner width in bars is enforced.
9) Mitigation Detection
Mitigation is detected using one of two modes:
Touch mode: high low intersects the block range
Close Inside mode: close is inside the block range
After mitigation, the block can change visual styling, optionally stop extending, and optionally be deleted.
10) Invalidation Detection
Invalidation is evaluated when enabled:
For bullish blocks, invalidation occurs if price goes below the bottom
For bearish blocks, invalidation occurs if price goes above the top
This can be evaluated by wick or close depending on invalidation mode. Invalidated blocks can be visually marked and optionally deleted.
11) Aging and Cleanup
If max age bars is set, blocks older than that age are removed. Limits on blocks and structure lines are enforced with controlled deletion to respect platform constraints.
12) Visibility Filters
Blocks are shown or hidden based on direction toggles:
Show bullish blocks
Show bearish blocks
Structure lines are also gated by a separate toggle and a maximum line budget. Indicator

Indicator

Heiken Ashi Break of Structure with Market Structure [by Hampeh]Description
This indicator is designed to identify high-probability trading entries by combining the trend-smoothing capabilities of Heiken Ashi candles with the powerful concept of a Break of Structure (BOS).
To enhance signal quality and reduce false signals, it incorporates a mandatory market structure confirmation filter, requiring a Higher Low (HL) to be established before a buy signal and a Lower High (LH) before a sell signal. The indicator automatically provides dynamic Stop Loss levels and generates real-time alerts to streamline the trading process.
How It Works
The indicator's logic is built upon several key components that work together to filter for high-quality setups.
1. Heiken Ashi Foundation The script uses Heiken Ashi candles as its foundation to reduce market noise and provide a clearer visualization of the underlying trend. This smoothing effect makes it easier to identify sustained directional moves.
2. Break of Structure (BOS) Identification The core entry trigger is a Break of Structure, defined as:
Bullish BOS (Buy Signal): The indicator first identifies a downtrend phase (red Heiken Ashi candles). It marks the opening price of this phase (redOpen). A buy signal is triggered when the trend reverses (turns green) and the Heiken Ashi close price breaks above this redOpen level.
Bearish BOS (Sell Signal): Conversely, it identifies an uptrend phase (green Heiken Ashi candles) and marks its opening price (greenOpen). A sell signal is triggered when the trend reverses (turns red) and the Heiken Ashi close price breaks below this greenOpen level.
3. Market Structure Confirmation (HL/LH Filter) This is the key filter that validates the strength of a potential new trend:
Higher Low (HL) for Buys: A buy signal is only considered valid if the low point of the most recent downtrend phase is higher than the low point of the previous downtrend phase. This confirms a classic "Higher Low" market structure, indicating that buying pressure is increasing.
Lower High (LH) for Sells: A sell signal is only considered valid if the high point of the most recent uptrend phase is lower than the high point of the previous uptrend phase. This confirms a "Lower High" structure, suggesting that selling pressure is building.
4. Dynamic Stop Loss Calculation The indicator provides a logical and dynamic Stop Loss for every signal:
For Buy Signals: The Stop Loss is automatically placed just below the lowest low (lowestLow) recorded during the entire preceding downtrend (red candle) phase.
For Sell Signals: The Stop Loss is placed just above the highest high (highestHigh) recorded during the entire preceding uptrend (green candle) phase.
5. Signal Generation and Visualization
A final BUY signal is generated only when all conditions are met: a bullish BOS occurs and it is preceded by a confirmed Higher Low.
A final SELL signal is generated only when all conditions are met: a bearish BOS occurs and it is preceded by a confirmed Lower High.
When a valid signal is triggered, a label appears on the chart displaying the entry price and the calculated Stop Loss. A corresponding alert is also fired with detailed trade information.
Summary of Strategy
In essence, this indicator waits for a pullback (a Heiken Ashi color change), confirms that the pullback respects bullish or bearish market structure (HL or LH), and then triggers an entry upon a Break of Structure in the intended direction.
Disclaimer : This indicator is a tool for technical analysis and does not guarantee profits. Trading financial markets involves significant risk. Always conduct your own research and practice proper risk management.
Indicator

Volumetric Order Flow Structure [LuxAlgo]The Volumetric Order Flow Structure indicator is a comprehensive technical analysis tool designed to visualize market structure through the lens of volumetric distribution and institutional order flow.
🔶 USAGE
Traders can use this tool to identify institutional supply and demand zones backed by high-volume nodes. The glowing structure bars provide immediate feedback on breakout conviction, while the manipulation bubbles highlight areas where institutional players may be trapping retail traders before a reversal.
The indicator is particularly useful for identifying:
High-conviction breakouts versus low-volume "fakeouts."
Precise price levels within a zone where the most volume was transacted (POC).
Liquidity raids that suggest a potential reversal or trend continuation.
🔹 Volumetric Market Structure
The script automatically detects Change of Character (CHoCH) and Break of Structure (BOS). Breakout levels are represented by glowing "Volumetric Bars" that fill horizontally based on the breakout bar's volume delta, representing the internal buying or selling pressure of the move.
🔹 Stepped Volume Profiles
Active Order Blocks feature a 15-row horizontal histogram. The script calculates the volume distribution within the pivot candle, highlighting the Point of Control (POC) in orange to identify the most significant price node within the supply or demand zone.
🔹 Manipulation Bubbles
This feature identifies liquidity raids where price wicks beyond a zone but fails to close through it. These events are marked with circular "bubbles" sized dynamically by volume, featuring external volume data labels for precise analysis of institutional activity.
🔶 DETAILS
The script employs a dynamic zone management system where zones extend across the screen until the price closes beyond them. An advanced 'Hide Overlapping' filter ensures that if multiple zones occur in the same price range, only the most relevant (highest volume) block is displayed to maintain chart clarity.
Additionally, the indicator utilizes ATR-based scaling to ensure visual thickness and label sizes are perfectly proportional across all assets, ensuring a consistent experience whether trading Forex, Stocks, or high-priced Cryptocurrencies.
🔶 SETTINGS
🔹 Detection
Pivot Length: Sets the lookback period for detecting high and low pivots used for structure.
Volume Lookback: The window used to calculate relative volume for scaling and sensitivity.
🔹 Visuals
Max Recent Blocks: The maximum number of active supply/demand zones to display on the chart.
Base Transparency: Controls the overall opacity of the volumetric zones.
Hide Overlapping Blocks: When enabled, the script removes smaller/lower volume blocks that reside within the price range of a more significant block.
🔹 Manipulation
Show Manipulation Bubbles: Toggles the visibility of liquidity raid markers.
Size Sensitivity: Adjusts how aggressively the bubble sizes react to volume spikes.
Indicator

Market Structure Signals | ProjectSyndicateMarket Structure Signals automatically detects Break of Structure (BOS) and Change of Character (CHoCH) patterns using pivot-based swing analysis, generates clean entry levels with ADR10-calibrated TP1/TP2/SL zones, and provides a professional performance dashboard tracking win rates and trade history for data-driven strategy optimization.
Core Features
• 📊 Pivot-Based Market Structure Detection — Automatically identifies swing highs/lows using customizable lookback period (5-100 bars) to detect institutional order flow shifts and trend reversals.
• ⚡ BOS (Break of Structure) Signals — Triggers when price breaks previous swing high/low in trend direction, indicating continuation of smart money positioning.
• 🔄 CHoCH (Change of Character) Signals — Detects when breakout reverses previous trend direction, signaling potential trend exhaustion or reversal setup.
• 🎨 Clean Visual Presentation — Horizontal breakout lines with large BOS/CHoCH labels at breakout levels, color-coded for bullish (teal #21c997) and bearish (purple #cc24e2) setups.
• 📏 ADR10-Based TP/SL Calculation — Uses 10-day Average Daily Range (ADR10) percentage-based targets for consistent, volatility-adjusted risk management across all instruments and timeframes.
• 🎯 Dual Take Profit Levels — TP1 (default 20% of ADR10) and TP2 (default 30% of ADR10) with clean rectangular zones and price labels for clear profit targets.
• 🛡️ Stop Loss Zones — SL level (default 20% of ADR10) plotted as clean rectangular zone below entry for longs, above entry for shorts.
• 📦 Clean Zone Visualization — Rectangular boxes with customizable transparency (default 85% fill, 50% border) extend from entry bar to current bar for active trades.
• 🚫 No Position Sizing Clutter — Entry labels show clean price levels only, no quantity calculations or risk percentages cluttering the chart.
Professional Performance Dashboard
• 📈 Real-Time Statistics Panel — Top-right dashboard displays Total Signals, Closed Trades, TP1 Wins, TP2 Wins, and SL Losses with color-coded values.
• 🎯 Win Rate Metrics — Shows TP1 Win Rate (trades hitting at least TP1), TP2 Win Rate (trades reaching TP2), and Overall Win Rate (any TP hit).
• 📜 Last 10 Trades History — Color-coded trade results (TP2=teal, TP1=green, SL/Reversal=red) for quick performance review.
• 🔧 Adjustable Text Size — Dashboard text size setting (Tiny/Small/Normal/Large/Huge) for optimal visibility on any screen size or resolution.
• ✅ Mathematically Accurate — TP2 win rate always ≤ TP1 win rate (since TP2 is further), Overall win rate = TP1 win rate (any TP hit counts as win).
• 🔄 Dynamic Updates — Statistics recalculate automatically when you adjust TP/SL percentage settings to show historical performance with new parameters.
⚙️ Customization Options
Market Structure Settings
• Market Structure Lookback (5-100, default 25) — Number of candles for pivot high/low detection, lower = more sensitive, higher = major swings only.
• BOS Confirmation (Close/Wick) — Use candle close or wick for breakout confirmation, Close = conservative, Wick = aggressive entries.
• Show CHoCH Labels (true/false) — Toggle Change of Character labels on/off, disable for cleaner chart with BOS signals only.
TP/SL Settings (ADR10-Based)
• TP1 % of ADR10 (default 20%) — First target distance as percentage of 10-day Average Daily Range, adjust based on instrument volatility.
• TP2 % of ADR10 (default 30%) — Second target distance as percentage of ADR10, typically 1.5-2x TP1 for optimal risk:reward.
• SL % of ADR10 (default 20%) — Stop loss distance as percentage of ADR10, keeps risk consistent with market volatility.
🔔 How to Setup Alerts
Market Structure Signals includes built-in alert conditions for PulseWire's native alert system:
Step-by-Step Alert Setup:
1.Add Indicator to Chart — Apply "Market Structure Signals" to your chart with desired settings.
2.Open Alerts Panel — Click the Alert icon (bell) in top toolbar or press Alt + A (Windows) / Option + A (Mac).
3.Create Alert — Click "Create Alert" button (+ icon).
4.Select Condition — In "Condition" dropdown, select "Market Structure Signals" and choose:
•"Bullish BOS/CHoCH" — Alert when bullish breakout detected
•"Bearish BOS/CHoCH" — Alert when bearish breakout detected
5.Configure Alert Options:
•Alert Name: e.g., "XAUUSD M30 - Bullish BOS"
•Frequency: "Once Per Bar Close" (recommended) or "Only Once"
•Expiration: Set alert duration or leave open-ended
6.Notification Settings: Enable desired notification methods:
•📱 Push notifications to PulseWire mobile app
•📧 Email notifications
•🔊 Sound alerts in browser
•🪝 Webhook URL for third-party integrations
7.Save Alert — Click "Create" to activate alert.
Alert Best Practices:
• Use "Once Per Bar Close" frequency to avoid false alerts during bar formation.
• Set separate alerts for bullish and bearish signals on each timeframe you trade.
• Test alerts on demo/paper trading before live use to verify settings.
• Combine with price action confirmation before entering trades.
📈 Supported Markets & Instruments
✅ Gold (XAUUSD) — Excellent performance on M30/H1/H4 with ADR10-based targets perfectly suited for gold volatility.
✅ Forex Pairs — EUR/USD, GBP/USD, USD/JPY, AUD/USD, NZD/USD, and all major/minor pairs.
✅ Cryptocurrencies — BTC/USD, ETH/USD, and all crypto pairs (adjust ADR10 percentages for higher volatility).
✅ Stock Indices — ES (S&P 500), NQ (Nasdaq), YM (Dow Jones), RTY (Russell 2000).
✅ Individual Stocks — Large-cap stocks with sufficient liquidity and daily range.
✅ Commodities — Oil (CL), Natural Gas (NG), Silver (XAGUSD), Copper.
⏰ Recommended Timeframes
Optimal Performance:
• M10-M15 — Scalping and intraday setups, higher signal frequency, verify dashboard win rates before use.
• M30-H1 — Best balance of signal quality and frequency, recommended starting point for most traders.
Important Notes:
• Always verify recent performance using the dashboard before trading new timeframes.
• Lower timeframes (M5-M10) may produce more signals but require tighter risk management.
• Higher timeframes (H4-D1) produce fewer but more reliable structural breaks.
• ADR10-based targets automatically adapt to each timeframe's volatility characteristics.
How to Use This Indicator
Trading Workflow:
1.Apply to Chart — Add "Market Structure Signals" to your preferred instrument and timeframe (start with M30/H1).
2.Review Dashboard — Check win rates and recent trade history to assess current market structure quality and strategy performance.
3.Wait for Signal — BOS label appears when price breaks previous swing high/low, CHoCH when breakout reverses trend.
4.Confirm Entry — Use price action, candlestick patterns, or your trading system to confirm entry at breakout level.
5.Manage Trade — TP1/TP2 zones show profit targets, SL zone shows stop loss, adjust position size based on your risk tolerance.
6.Monitor Performance — Track results in dashboard, adjust TP/SL percentages if needed based on win rate data.
Strategy Tips:
• Focus on BOS signals in trending markets for continuation setups.
• Watch for CHoCH signals at key support/resistance for reversal opportunities.
• Combine with volume analysis, order flow, or momentum indicators for confirmation.
• Use higher timeframe structure (H4/D1) to filter lower timeframe signals (M30/H1).
• Adjust ADR10 percentages based on instrument: Gold 20-30%, Forex 15-25%, Crypto 30-50%.
🎯 Why This Indicator is Unique
• ✅ Volatility-adaptive targets vs fixed-pip targets
• ✅ Clean professional dashboard vs cluttered multi-panel stats
• ✅ Mathematically accurate win rates vs inflated performance metrics
• ✅ No position sizing clutter vs quantity/risk calculations on every label
• ✅ Customizable text size for any screen vs tiny unreadable text
• ✅ Built from scratch vs copy-paste indicator code
⚠️ IMPORTANT DISCLAIMERS
Educational Purpose Only
This indicator is designed for educational purposes only to help traders understand Smart Money Concepts (SMC), market structure analysis, and Break of Structure (BOS) / Change of Character (CHoCH) detection methodologies. It is NOT financial advice and should NOT be used as a standalone trading system.
Past Performance Warning
Past results are not a guarantee of future performance. Historical win rates, trade statistics, and dashboard metrics shown in backtesting or past chart data do not predict or guarantee future trading outcomes. Market conditions change, volatility fluctuates, and what worked historically may not work in current or future markets.
Risk Disclosure
Trading financial instruments involves substantial risk of loss and is not suitable for all investors. You should carefully consider your investment objectives, level of experience, and risk appetite before trading. Never trade with money you cannot afford to lose. Indicator

Indicator

Institutional Order Flow Strength Classifier [LuxAlgo]The Institutional Order Flow Strength Classifier tool identifies and ranks unmitigated order blocks by analyzing the institutional intensity behind market structure breaks.
It provides a percentage-based strength score for each zone, helping traders distinguish between minor price stalls and significant institutional supply/resistance areas.
🔶 USAGE
The indicator automatically detects Order Blocks (OBs) formed during Market Structure Breaks (BOS). Unlike traditional OB tools that highlight every pivot, this script focuses on the "Institutional Footprint"—the specific area where big players positioned themselves before a significant move.
🔹 Interpreting Strength (%)
The strength score (0-100%) indicates the level of institutional participation during the zone's creation.
High Strength (>70%): Indicates massive displacement and high relative volume. These zones are high-probability areas for limit order entries as they represent significant "unfilled" interest.
Medium Strength (40-70%): Indicates standard trend continuation zones, often useful for stop-loss placement or scaling into positions.
Low Strength (<40%): Indicates zones with weak follow-through. These are often treated as "internal liquidity" and may be swept or ignored by price rather than providing a bounce.
🔹 Zonal Overlap Filtering
To prevent chart clutter, the script features an advanced "Zonal Overlap" system. If multiple Order Blocks are created within the same price range, the indicator can hide the redundant zones, ensuring that only the most relevant level is visible. This helps traders focus on "confluence zones" where multiple institutional orders may be clustered.
🔹 Strongest OB Tracking
The script includes a dynamic "Strongest OB" plot. This is a continuous filled background area that tracks the zone with the highest strength percentage within the user-defined buffer. While individual OBs are shown as dashed boxes, this solid plot highlights the single most significant institutional level currently influencing the market.
🔶 DETAILS
The philosophy behind this script is that "not all Order Blocks are created equal." To classify them, the script uses a dual-metric weighted calculation:
Displacement (60% weight): This measures the "expansion" or the distance price moved away from the OB relative to its size. A large move indicates a high imbalance between buyers and sellers, suggesting institutional urgency.
Relative Volume (40% weight): This compares the volume of the candle that formed the OB to its 20-period average. High volume confirms that the move was backed by significant capital rather than low-liquidity volatility.
The script identifies the OB by searching for the last opposite-colored candle (the "Institutional Footprint") before a break of a Pivot High or Pivot Low. Once price crosses the extreme side of the box (the bottom for bullish OBs or top for bearish OBs), the zone is marked as "mitigated" and removed from the display.
🔶 SETTINGS
🔹 Order Block Settings
Pivot Lookback: The number of bars required to confirm a pivot high or low used for market structure detection.
Max Unmitigated OBs: The maximum number of active zones displayed on the chart at once.
🔹 Visualization
Bullish/Bearish OB Color: Sets the fill color for the detected Order Block boxes.
Hide Overlapped Zones: When enabled, prevents multiple boxes from stacking in the same price area, showing only the most relevant one.
Show Strength Labels: Toggles the percentage labels on the right side of the boxes.
Show Strongest OB Plot: Enables the continuous filled background plot for the zone with the highest strength score.
Strongest OB Buffer Size: Determines how many recent unmitigated zones the script should look through to find the strongest one.
Indicator

TDL Adaptive Session Zones Pro🔷 What This Indicator Does
TDL Adaptive Session Zones Pro maps high-probability reaction areas where price is statistically more likely to pause, reverse, or accelerate — based on real historical session data, not arbitrary levels.
Unlike static support and resistance tools, these zones automatically adapt to changing market volatility every session. When volatility contracts, zones tighten. When it expands, zones widen. The result is a dynamic framework that reflects how the market is actually behaving right now.
This indicator is built for intraday traders who want structure and context — not signals.
🔷 Core Components
1️⃣ Adaptive Percentile Zones (Session-Based S/R)
The engine of this indicator. It works by:
• Collecting historical intraday session ranges over a configurable lookback period (default 20 sessions)
• Calculating percentile distances (25th, 50th, 75th, 100th by default) from that data
• Projecting those distances symmetrically above and below the current session open
• Resetting and recalculating every session automatically
🟩 Lower zones → Statistically derived support reaction areas
🟥 Upper zones → Statistically derived resistance reaction areas
Outer zones (higher percentile) represent more extreme price extensions and carry greater significance when tested. Inner zones represent typical intraday range behavior.
The key insight: instead of drawing arbitrary lines, these zones tell you where price has historically found the edges of its range — adjusted for current conditions.
2️⃣ Strike / Round Number Levels (Liquidity Reference)
Plots round-number price levels at configurable intervals (50, 100, etc.) from the session open. These levels frequently act as liquidity concentration areas in index futures and options markets.
• Configurable interval spacing
• Min/Max distance controls
• Optional mid-strike gap levels (dotted)
• Session-bounded display
Useful for NQ, ES, and index derivatives where options strike prices create natural liquidity clusters.
3️⃣ Previous Day OHLC Reference
Plots Previous Day Open, High, Low, and Close as intraday reference levels — widely observed by both retail and institutional participants.
• All four levels with distinct color coding
• Configurable line style (solid, dashed, dotted)
• Clean labels for quick identification
4️⃣ Opening Range Breakout (ORB)
Captures the high and low of the first N minutes of the session (configurable: 5 to 60 minutes). The opening range provides useful context when combined with the adaptive percentile zones.
• Configurable time window
• Filled range visualization
• Session-bounded display
🔷 Optional Validation Filters
All filters are off by default and designed to help observe cleaner price behavior near important zones.
🔹 Candle Structure Validation
Filters out candles with excessive range (ATR multiple), small bodies (body/range %), or extreme wick imbalance. Helps isolate price action reflecting healthy market participation near key levels.
🔹 Rejection Wick Detection
Identifies candles with significant wick-to-body ratios (hammer-type structure), independent of candle color. Useful for spotting potential rejection behavior when price interacts with zone boundaries.
🔹 Volume Participation Filter
Highlights periods where volume exceeds the average by a configurable multiplier. Includes a confirmation window (number of bars following the spike) to allow for delayed reaction observation.
🔹 Daily Pivot
Classic pivot point (H+L+C)/3 plotted as a session-fixed reference level for additional market structure context.
🔹 Higher Timeframe Trend
Background color overlay based on a configurable HTF moving average. Supports SMA, EMA, WMA, and VWMA. Provides directional context without enforcing bias on the intraday analysis.
🔷 Confluence Highlight System
When price arrives near any key zone (percentile, strike, OHLC, ORB, or pivot) AND all enabled validation filters align on the same candle, that candle is highlighted in yellow.
⚠️ The yellow highlight is NOT a buy or sell signal. It indicates that price behavior appears structurally meaningful at an important market location based on your selected filter combination.
Three alertcondition() calls are included: Bullish confluence, Bearish confluence, and Any confluence — ready for PulseWire alerts.
🔷 Session Volatility Gauge
Real-time dashboard (table overlay) showing what percentage of the median daily range has been consumed in the current session.
States:
• LOW (< 40%) — Session range is compressed relative to history
• BUILDING (40-70%) — Range is developing, room for expansion
• HEALTHY (70-100%) — Normal range consumption
• EXTENDED (> 100%) — Session exceeds typical range, potential exhaustion
This helps gauge whether the session still has room to move or is approaching statistical limits.
🔷 Zone Touch Tracker
Counts fresh touches on each percentile zone during the current session. A "touch" is registered when price enters a zone's proximity after being outside it. More touches on a zone suggest greater significance.
Displayed as a table overlay with per-zone counts for both resistance and support zones. Resets automatically each session.
🔷 Recommended Settings
NQ / ES Futures (5m–15m):
• Session: 0930-1600, Timezone: America/New_York
• Percentiles: 25 / 50 / 75 / 100 (default)
• Strike Interval: 100
• ORB: 15 minutes
Stocks (5m–15m):
• Strike Interval: 5 or 10
• Consider tightening percentiles (20 / 45 / 65 / 85) for lower-volatility names
Gold Futures (5m):
• Strike Interval: 10 or 25
• Adjust session window to your active trading hours
🔷 How To Use
1. Apply to an intraday chart (1m to 15m recommended)
2. Observe where price interacts with the adaptive percentile zones
3. Optionally enable one or more validation filters to highlight structurally clean candles at key zones
4. Use the Session Volatility Gauge to assess how much range has been consumed
5. Enable the Zone Touch Tracker to identify high-significance levels
6. Apply your own analysis, execution method, and risk management
This is a context and structure tool. It shows you WHERE you are within the session's statistical range — the trading decisions are yours.
🔷 Technical Notes
• Works on any intraday timeframe; designed for 1m to 15m
• Requires sufficient historical data for percentile calculations (minimum ~5 sessions)
• Session detection works correctly with extended hours both on and off
• All zone levels are session-bounded and reset automatically
• Open source — inspect, learn from, or adapt the code as you see fit
⚠️ Disclaimer
This script is provided for educational and informational purposes only. It does not generate buy or sell signals and does not constitute financial advice. Past performance of any trading methodology is not indicative of future results. Always apply independent analysis and proper risk management.
Indicator
