Multi-Anchor_VWAP & Deviation Bands [AFD]
Three anchored VWAPs on one chart, with the price zones where they agree shaded in for you.
WHAT IT IS
An anchored VWAP shows the average price everyone has paid since a moment you pick - the gap open, the earnings bar, the swing low that started the move. That is where buyers from that moment sit at break-even, which is why price keeps coming back to it.
One anchor answers one question, so most traders end up dropping three or four by hand and dropping them again every session. This runs three at once: each anchors where you want, each carries its own deviation bands, and the script shades the zones where two of them line up.
THE CONFLUENCE SHADING
Look at this first. It does work you would otherwise do by eye.
When your session VWAP and your weekly VWAP arrive at the same price, that price is being watched by two different groups at once. Those levels tend to matter more than either line alone, and with three curves running they are easy to miss.
The script shades between any two layers that come within your tolerance of each other - on by default at 8 points, and it checks all three pairings, 1 to 2, 1 to 3 and 2 to 3.
Set the tolerance in ticks, points, currency, or percent of price. Trading more than one instrument, use percent: it is the only one you never have to re-tune when you change symbol.
THE ANCHORS
Ten per layer, mixed freely.
Set and forget - Session, Week, Month, Quarter, Year. Re-anchors itself every new period.
Pick the bar yourself - Manual timestamp. Type a date and time. This is the one for an earnings bar, a Fed day, a gap.
Let the chart find it - prior-session high or low, confirmed swing high or low. These follow structure so you are not re-anchoring by hand.
Defaults are session and week, the pairing most intraday traders want.
Two things about the structure anchors look broken if nobody warns you:
The curve shows up late. A swing is not a swing until enough bars print after it. At swing length 10 the line appears 10 bars after the pivot, then draws itself back to the pivot where it belongs.
It never rewrites history. When a newer pivot confirms, the layer re-anchors from there forward. Everything already drawn stays put.
THE BANDS
Up to three per layer, each with its own multiple from 0.0 to 10.0. They tell you how stretched price is from that anchored average. Four ways to measure the stretch:
Standard deviation (default) - how far price usually strays from this average. The classic VWAP band.
ATR - sized by recent range instead, so the envelope opens up in fast markets.
Percent of VWAP - a fixed percentage. Same shape on any instrument.
Standard error - starts wide on a fresh anchor and tightens as the window fills.
Type the multiples in, or load a Fibonacci preset: 0.382 / 0.618 / 1.0 for the inner set, 1.0 / 1.618 / 2.618 for the outer.
IT TELLS YOU WHEN IT CANNOT DO ITS JOB
An anchored VWAP can quietly stop being volume-weighted, or stop covering the window you think it does. This one writes it on the layer's own label, and these notes cannot be switched off - they show even with line labels turned off:
"UNWEIGHTED (no volume)" or "N bars unweighted" - the feed gives no usable volume, so this is a plain average, not a VWAP. Most indices and some spot forex. This is the one that matters.
"one bar per session" / "two-bar window" - a prior-session anchor on a daily or higher chart, where it can only ever span two bars.
"clipped to the draw depth" or "segment past the 5,000-bar buffer, not drawn" - the line starts in mid-air because it hit a drawing limit, instead of pretending it reaches further back than it does.
"(retro)" - a structure anchor, found after the fact. "RTH" - regular hours only, which changes what the average is.
A clean chart carries none of these. One showing up means something you could not otherwise see has happened.
SETTING IT UP
Add it. Layer 1 takes the session, layer 2 the week, and the shading marks where they agree.
Want one clean line? Switch layer 2 off. Want a third timeframe? Switch layer 3 on.
Anchoring to an event: Manual timestamp, then the bar's date and time. Anchoring to structure: a confirmed swing or a prior-session extreme.
Running two or three layers, turn on "Show anchor" - once bands overlap, a label naming its starting bar beats one that just says "L2".
84 inputs in seven groups, and anything that does not apply greys itself out.
ALERTS
One alert: VWAP crosses, band crosses, both, or off. Create it in PulseWire with "Any alert() function call". It only fires when a bar closes, never mid-bar, so you are not woken up by a wick that gets taken back.
WORTH KNOWING BEFORE YOU USE IT
Structure anchors draw late. That is the trade for anchoring to something only confirmable in hindsight.
History runs 5,000 bars, and draw depth caps how far a line reaches. Hit either and the label says so instead of the line quietly stopping short.
On "Regular hours only" the ATR bands still measure across every bar on the chart, so they use a wider set of bars than the average does.
"Current window only" hides older curves once a repeating anchor has cluttered things up. Fills, the prior-window level and the confluence shading switch off in that mode.
These bands are this script's own definition, not a claim of equivalence with anyone else's bands of the same name.
Not usable in the Pine Screener - the manual anchor needs a time input, and the Screener substitutes its default instead of reading it, so it would anchor from the wrong bar without telling you.
One symbol, one timeframe. No higher-timeframe or cross-symbol requests.
WHAT MAKES IT DIFFERENT
Three genuinely independent anchors - own anchor, own source, own colours, own bands. Not one anchor with presets.
Confluence shading across all three pairings, in four choices of unit.
It anchors to bars it can only recognise after the fact - prior-session extremes and confirmed swings - and back-fills the curve to them. A running-total VWAP cannot reach backwards like that without starting over.
It states its own failure modes on the chart instead of returning a number that is not what its name says.
Four band bases behind one band definition, and Fibonacci ratios as presets on the levels you already have rather than as extra clutter.
Open source under the Mozilla Public License 2.0. Indicator

Pivot Matrix + Zones [AFD]Overview
Pivot Matrix + Zones brings up to three independently configured pivot systems into one coordinated overlay. It combines exact pivot ladders, standard Central Pivot Range (CPR), ATR- or tick-scaled reaction zones, formula-aware cross-pack confluence, retained untested levels, a compact context dashboard, and seven bar-close alert conditions.
Each pack can use a different formula and anchor, allowing combinations such as Daily Traditional, Daily Camarilla, and Weekly Fibonacci to be compared without merging their identities.
The script is designed for descriptive market context. It does not produce trade recommendations, forecasts, performance statistics, or automated orders.
What makes it different
The script's original contribution is its identity-aware coordination of the three packs rather than a simple stack of pivot lines. Each pack has its own formula, anchor, tier ceiling, formula-pivot and CPR visibility, labels, R/S color, and line style. One shared lifecycle model freezes reaction width at origin, carries formula and anchor provenance into retained levels and alerts, and keeps dashboard and drawing state aligned.
Confluence requires overlapping reaction zones from at least two distinct enabled packs. Multiple levels or historical origins from only one pack do not create confluence, and duplicate canonical levels do not inflate the displayed pack count. Exact formula-and-anchor duplicates are marked inactive instead of drawing the same configuration twice.
The implementation and lifecycle logic are original. The named pivot methods use standard published calculations identified below; no third-party indicator source code is reused.
Pivot formulas and anchors
The three packs can use Traditional, Floor Pivots, Fibonacci, Woodie, Classic, DM, Camarilla, Frank Dilernia, Shadow Trader, or ACD Method calculations. Traditional, Fibonacci, Woodie, Classic, DM, and Camarilla use the formulas documented for PulseWire Pivot Points Standard. Floor Pivots uses the standard prior-period high, low, and close ladder through R3/S3; those levels match Traditional through the third tier, while Traditional retains its additional R4/R5 extensions.
Available anchors are Auto, Daily, Weekly, Monthly, Quarterly, and Yearly. Auto uses Daily pivots on chart resolutions through 15 minutes, Weekly pivots above 15 minutes and below one day, and Monthly pivots on daily-or-higher charts.
Each formula stops at its documented native tier. The Through Rn/Sn controls do not create unsupported extension levels. Camarilla calculations use the standard R/S equations and display H/L aliases alongside those names.
Data and session handling
Use daily-based values to request anchor data from the selected symbol context. Exchange default, RTH, and ETH choices are available. For futures, ETH uses the exchange-default electronic context, while RTH uses the named subsession entered in the settings. The default futures RTH name is us_regular, but valid names are symbol-specific.
On intraday charts, turning daily-based values off builds anchor values from the chart feed. This may reflect a visible session more closely, but Quarterly or Yearly anchors can have insufficient intraday history. On daily-or-higher charts, the script continues to use daily-based anchor data.
Most formulas use completed prior-anchor values. Woodie also uses the fixed open of the active anchor. The optional developing next CPR uses the active anchor's changing high, low, and close; it is visually separated and never enters confluence, retained history, or alerts.
CPR and reaction zones
CPR always uses the standard floor-pivot calculation from the completed period's high, low, and close. Its chart labels identify the center as PP, the lower Bottom Central boundary as Lower (BC), and the upper Top Central boundary as Upper (TC). This CPR pivot remains separate from a formula pivot when methods such as Woodie or DM produce a different value.
Reaction zones are symmetric bands around exact pivot prices. Their half-width can use confirmed Daily ATR, completed anchor ATR, or a fixed number of minimum ticks. The width is frozen when an anchor's geometry is created, so an existing zone does not drift as ATR changes inside that anchor. The exact pivot remains the center line; the surrounding fill is a configurable context band.
How to read the chart
Exact center lines are the calculated PP, resistance, support, or CPR levels. Soft surrounding fills show the configured interaction distance; they are not additional pivot levels or predictive outputs.
By default, formula PP lines and matching fills are yellow, Pack A R/S lines and fills are blue, and CPR boundaries and the central range are purple. Active labels identify Formula + Level, while CPR labels distinguish PP, Lower (BC), and Upper (TC). Price text is optional and hidden by default.
Confluence and retained levels
When eligible reaction zones from at least two distinct packs overlap, the script merges the overlap transitively into a confluence band. Each label names the unique contributing formulas and then shows the number of distinct packs represented, such as Traditional + Fibonacci x2. Enable confluence is the master control and is on by default. Turning it off removes confluence zones and labels and suppresses Confluence Touch events while the pivot packs, dashboard, retained-level lifecycle, and other alerts continue. When enabled, confluence color, text color, and projection change the display only, not the overlap or alert identity.
At an anchor rollover, eligible pivot zones that were not touched during their active period can be retained as Untested. A later confirmed wick overlap changes the record to TESTED, freezes and fades its drawing for 20 chart bars, and removes it afterward. Retained drawings are off by default, but lifecycle tracking, dashboard counts, confluence eligibility, and fill alerts continue while the drawings are hidden.
Dashboard
The compact dashboard shows only enabled packs with their selected pivot formula and any non-active status. It then classifies the two-period CPR relationship, reports whether the active-anchor open is above, below, or inside CPR, and shows the nearest retained untested level with the live count across all packs. CPR context follows the first enabled pack in A/B/C order.
Display controls
Active geometry can end at a finite current-bar offset, at the anchor end, or extend right. Confluence has its own finite current-bar, finite label-offset, and extend-right choices. Show confluence only hides non-confluence drawings while confluence is enabled; turning the master control off restores the normal layers. Calculations, the dashboard, lifecycle processing, and all enabled alerts continue.
Formula PP, CPR, labels, displayed prices, label size, line width, reaction shading, tier depth, and retained-level styling can be adjusted independently. Formula PP lines and fills default to yellow, Pack A R/S lines and fills default to blue, and CPR boundaries and the central range default to purple. The Inputs tab follows a numbered workflow and dims controls that do not apply without disabling calculations that still use their state. Prices are hidden by default, and chart labels identify formula and level without A/B/C prefixes; dashboard and alert provenance retain pack identity. Duplicate formula-and-anchor pack configurations are rejected rather than drawn twice.
Suggested setup workflow
Configure Pack A as the primary context, then enable Pack B or C when a second formula, anchor, or both are needed for comparison. Choose the highest native R/S tier, session basis, reaction-width method, and projection for the chart being reviewed. Use the dashboard and labels for identity, Show confluence only to isolate cross-pack overlaps, and retained-level drawings when the untested lifecycle should remain visible.
Create alerts only after the symbol, timeframe, sessions, pack settings, and reaction-width inputs are finalized, because those chart settings define the levels and events being monitored.
Alerts
Seven fixed conditions are available: Active Level Touch, Cross Up, Cross Down, CPR Enter, CPR Exit, Untested Level Filled, and Confluence Touch. Events confirm at chart-bar close. Optional dynamic messages aggregate supported events from the same confirmed bar and include available pack, formula, anchor, level, origin, and price context. PulseWire running alerts retain the script inputs saved when they were created, so delete and recreate an alert after changing Enable confluence or another input.
Limitations
Pivot values and rollover timing depend on the selected symbol, data feed, anchor, session context, and available history. Daily and intraday feeds can differ because of extended hours, futures settlements, and feed construction. An invalid futures subsession name can fall back to the exchange default, so confirm the requested name in Inputs and compare the resulting pivots with the intended session.
Reaction zones and confluence visualize proximity; they do not predict a response. Untested means the configured zone was not touched during its tracked active period; it does not imply that price must revisit or react to it.
Use a standard time-based chart when evaluating touches, crosses, and alerts because those events use the chart's OHLC bars. Alerts still depend on PulseWire alert creation, chart settings, feed updates, and bar-close processing.
The script keeps bounded histories of up to 30 live untested levels and 20 fading tested markers, with older retained records removed as those limits are reached. Confluence display is capped at 20 zones.
This is a public open-source Pine Script v6 indicator with a Mozilla Public License 2.0 source header. PulseWire's open-source reuse rules apply on-platform before the license terms. It is an educational charting tool and is not financial advice. Indicator

PO3 Matrix+ (M1D)PO3 Matrix+ (M1D)
Projects the recent candles of a chosen higher timeframe as a compact candle matrix beside live price, then marks the liquidity events, structure and PD array context that develop on that timeframe — taken swings, structure shifts, fair value gaps, previous-day levels, and cross-market divergence. The intent is to read higher-timeframe conditions without leaving the execution chart, and to keep every drawn element sourced from the same data so nothing drifts out of step.
── HOW IT IS BUILT ──
The selected higher timeframe is pulled once, as a snapshot of its recent candles, and every element is drawn on the last bar from that one source. Dividers, high/low rails, quadrants, sweeps, gaps and structure all read the same array, so they cannot disagree with each other. The forming candle is accumulated from chart bars, so it updates live without repainting its history.
Level lines are origin-anchored: each one begins at the candle that actually printed the extreme, not at the bar where the level happened to be calculated. Derived midlines (equilibrium, the inner quartiles) have no originating candle, so they run from the period open instead.
── WHAT IT DRAWS ──
PO3 CANDLE MATRIX — the selected higher timeframe's recent candles, projected to the right of price with time dividers on the live chart and a per-candle high/low rail. A countdown above the block shows the timeframe in use and the time left on the forming candle. The PD array context is mirrored onto the block at its own horizontal scale, and each event carries a compact direction marker there, so the block reads as a standalone view of what that timeframe is showing.
CANDLE EQUILIBRIUM — the true 50 percent of each completed candle in the block, as a reference the following candle can retrace into.
CURRENT-RANGE QUADRANTS — the forming candle's high, 75 percent, equilibrium, 25 percent and low projected across price as a live premium and discount reference.
LIQUIDITY SWEEPS — only swing liquidity is marked. A level qualifies when it is a swing high or swing low that a later candle raids and then closes back inside: wick beyond, body back within. A candle that simply trades past its neighbour is not a sweep and is not marked.
SMT DIVERGENCE — the correlated market is read on the same higher-timeframe grid, so the two align candle for candle. A SMT is marked when your chart takes a swing but the peer fails to take its matching swing, meaning the move lacked cross-market participation. The peer auto-pairs across equity indices, precious metals and BTC against ETH, in matching contract sizes, and can be overridden with any symbol. It deliberately does not guess a peer for markets where the correlation is too loose for a divergence to mean anything; with no pairing, no SMT is drawn. A SMT is invalidated in real time once price trades back through the extreme that formed it, and is then either faded or removed.
MARKET STRUCTURE SHIFT — a true swing broken by a body close. A swing here means a level price actually turned at: a swing low sits at the change from a down candle to an up candle, a swing high at the change from an up candle to a down one. A low that merely sits under its neighbours while price kept running the same way is not a swing and is never used, which is what separates this from a plain pivot break. The first candle to CLOSE beyond the swing's full wick — body, not wick — marks the shift; later closes past the same level are continuation and are not marked. An optional setting requires a liquidity raid to precede the shift, for the classic sweep-then-shift sequencing: a buyside raid before a bearish shift, a sellside raid before a bullish one.
FAIR VALUE GAPS (BISI+ / SIBI-) — detected on the higher-timeframe snapshot, so they are multi-timeframe by construction. Only fully formed gaps are drawn; a gap still forming on the live candle is ignored until it completes. Each zone moves through four states: live, active, inverted, or spent. A gap closed clean through has inverted — the old support is now resistance, or the reverse — and it stays inverted, flipped and redrawn in the inversion colour, for as long as that break holds. No retest is required, because a retest is where the level gets traded rather than what makes it valid. Closing back through in the original direction takes the gap back; the zone is spent, and fades but stays on the chart as history rather than disappearing.
PREVIOUS-DAY LEVELS — previous high, low and equilibrium, drawn from session start and dimming once taken. Three definitions of the day are offered because they genuinely differ on futures: the symbol's own daily candle, midnight to midnight New York, or the regular-hours session only. Regular hours are taken from the instrument itself rather than a fixed clock, so index futures, metals and everything else each use their own session. The label carries the source date, so a level that is several days old after a weekend reads as intentional.
CONTEXT TABLE — day, AMD phase, forming-candle bias, premium or discount, higher-timeframe direction, last sweep, market structure shift, fair value gap, previous-day status, and a session-close countdown. SMT is drawn on the chart and the block but does not have its own table row.
── SETTINGS WORTH KNOWING ──
The higher timeframe must be above the chart timeframe; the script says so on the chart if it is not.
Session handling is read from the instrument, not hardcoded, so the regular-hours option and the session countdown are correct on index futures, metals and anything else without configuration. Instruments that trade around the clock have no regular session, and the countdown says so rather than inventing one.
Every drawn element can be turned on or off on its own, and the chart labels and the compact markers on the projected block are controlled separately, so the block can be kept clean while the chart stays annotated. Label size, colour, vertical clearance, which side of a line a label sits on, and the marker glyph style are all adjustable.
Fair value gap sensitivity is measured against the average range of the visible higher-timeframe candles, so it scales per instrument rather than being a fixed distance. Raise the minimum height and displacement to keep only the larger gaps.
Market structure shift has an optional displacement requirement, off by default. Turn it on if you want the shifting candle to also expand or leave a gap, which reduces how often it marks.
Sweeps, gaps and structure marks each have a maximum shown, so the chart stays contained rather than accumulating history indefinitely. Gap zones also declutter against each other: two translucent zones stacked on the same prices multiply into a solid block, so a zone overlapping one already drawn beyond an adjustable tolerance is skipped and the most recent gap in that price band is the one kept. The same idea applies to stacking: two same-direction zones separated by only a thin seam read as one inefficiency wearing two boxes, so the older one is removed and the newest kept. Zones facing opposite directions are never removed for sitting close together — they are genuinely different reads.
── NOTES ──
Detection runs on completed higher-timeframe candles. The forming candle updates live, but a gap or a structure mark is only considered once the candles that define it have closed.
SMT is not available in bar replay. Replay rewinds the chart symbol only, so the correlated symbol keeps returning its live data and the two grids no longer line up; the table reports Misaligned and no divergence is drawn. That is the alignment guard working, not a fault. Every other feature reads from the chart symbol and replays normally.
Everything drawn is context. There are no entry or exit instructions, no directional calls, and no performance claims of any kind. It reports what has happened on the higher timeframe.
This is a market-analysis tool, not financial advice. Past market behaviour does not indicate future results. Test any tool thoroughly and trade your own plan.
Indicator

Ultravol Matrix - volume spike heatmap [GF4M]Ultravol Matrix - cross-exchange volume spike heatmap
❗️Reason for displaying two indicators together on the main chart:
🔗 Use together for reading volume — Ultravol, Ultravol Matrix are originally built as one indicator, split in two due to Pine's 64-plot limit & multi-pane drawing limit. (same language by UV-scaled color): Ultravol Matrix reads vol spike history, Ultravol reads live.
❗️Per PulseWire's policy that each script's description must be self-contained on its own, the Ultravol engine description common to both Ultravol and Ultravol Matrix is repeated across both indicators' descriptions.
───────────────────────────────────────────────
🔶 PROBLEM
On a standard chart, volume is just numbers and bars, so to know how much weight is behind the current candle's move, you have to scan the whole chart yourself and judge relative size. Doing that instantly during live trading takes intuition built through long training. This problem is worse in crypto: since the same asset trades on dozens of exchanges at once, looking at a single exchange's volume alone doesn't show where the real volume spike actually is. I came to think there were two important points.
1. (Common) How much does this volume mean in the market as a whole?
Every asset has a normal, average scale at which it typically trades. If far more trading is happening than that, the asset is drawing attention right now. Conversely, even when candles look active and volume keeps increasing, if it stays below the whole-market average, it is actually a minor move. In other words, it should be readable instantly against the whole market — not against the immediately preceding period.
2. (Multi-exchange asset) Is this a market-wide event, or a local event on one exchange?
For an asset traded on dozens of exchanges at once, as in crypto, even a very large exchange's volume spike alone won't move the price much — because the remaining exchanges still hold volume that can't be ignored. The same spike means something completely different depending on whether it happens across many exchanges at once or only locally — and neither a single exchange's volume, nor a simple aggregate of them, shows this difference clearly (it ends up buried under the pattern of whichever pair has overwhelming volume, like Binance).
🔷 SOLUTION
1. (Common) The whole chart's accumulated average volume is extracted as a base line, and each bar's ratio to it is standardized into a common UV-scaled color. For crypto, one step further — the volumes of 12 major exchange pairs are each weighted by importance and composited into one Final Synthetic UV volume, used as the main volume. This way, every visual element on the chart can be drawn based on one common scale. This is Ultravol.
2. (Multi-exchange asset) The volume spike history of each of those same 12 sources, before Ultravol composites them into one, is decomposed along the time axis using the same UV-scaled color, so you can see at a glance whether the current spike spans the whole market or is local. This is Ultravol Matrix. (Originally one indicator, but split into two because the number of plots needed exceeded Pine's limit (64-plot) — the core engine is the same.)
Volume can now be perceived instantly. Candles carrying below-average volume stay dark and featureless; candles carrying above-average energy render brighter and more intense. The screen looks quiet when the market is quiet, and busy when it is busy. And this color grammar reads the same way on any asset, any timeframe — because the reference is always that market's own whole-history average. This indicator set can fully replace ordinary candles and volume charts.
🔷 Ultravol Core Engine: Processing Diagram
🟣 Full engine mechanics (Master GATE scheduling, coin-unit correction, per-exchange trust weighting, auto listing-join) are documented in the Appendix — see origin indicator .
───────────────────────────────────────────────
Ultravol Matrix - cross-exchange volume spike heatmap
✨ Gives you an insight into hidden, cross-exchange volume spike flow — by color, instantly!
Across many crypto exchanges, Ultravol Matrix curates 12 pairs (spot + perp) — Each exchange's volume, reverted to native base. → normalized to its own signature. → Rendered on the same UV-defined color scale. → Spike flow patterns (not absolute volume) can be compared directly across history in one matrix.
📘 Strong trends begin with cascading vol spikes across all exchanges.
📗 A perp vol spike with no spot participation (all or a single perp pair) is often just a futures liquidation cascade.
📙 Track vol spike trends by exchange. Who is trending? Alone? User base? Region? Spot or Perp? All together?
📕 Trending vol spike sequence — drop to lower TF (1m or seconds) to read the order in detail.
✨ Ultravol Matrix Engine:
Its own unique method. 12-pair per-exchange UV-scaled color leveling is crypto-exclusive.
🔹 How to read it
🔗 The time-axis extension of Ultravol — same language by UV-scaled color: Ultravol Matrix reads history, Ultravol reads live.
🔹 You can easily spot mass volume that's concentrated in a single exchange.
🔹 All together or single spike trending.
🔹 For altcoins, even on the 5m and 15m timeframes, persistent long spikes tend to occur on only a few individual exchanges. This behavior is less frequent in major cryptocurrencies like BTC or ETH. (It is recommended to familiarize yourself with the volume spike patterns of your specific trading pairs in advance.)
Setup Panel
☑ 📱 : Mobile friendly UI setup
• Source : Ultravol (Auto) fixed
• Rescale : Only for extremes, too 🔥 or too ⚫️
Especially for altcoins, the market heats up significantly during trending phases. Consequently, if the heatmap temperature rises to a point where chart variations become difficult to distinguish, lowering the rescale option by -1 or -2 makes it easier to discern the intensity differences on the screen. (In this case, the adjusted value is temporarily displayed in the bottom-right corner.)
🔸 Hover over the nametag for symbol info.
🔸 Maximize the pane (or drag it taller) for detailed matrix flow.
Matrix's volume spectrum is compressed using a separate log-based clamp to fit within a low-height panel. Read it only as relative magnitude — judge volume spikes by color, not by bar height.
⚠️ Required setting: In order to vertically align the Name tag (on matrix)
⚙︎ > Chart option > Canvas > Margins > Top: 0% Bottom: 0% Rights: 50bars
Indicator

Ultravol - correct market volume [GF4M]Ultravol - correct market volume
❗️Reason for displaying two indicators together on the main chart:
🔗 Use together for reading volume — Ultravol, Ultravol Matrix are originally built as one indicator, split in two due to Pine's 64-plot limit & multi-pane drawing limit. (same language by UV-scaled color): Ultravol Matrix reads vol spike history, Ultravol reads live.
❗️Per PulseWire's policy that each script's description must be self-contained on its own, the Ultravol engine description common to both Ultravol and Ultravol Matrix is repeated across both indicators' descriptions.
───────────────────────────────────────────────
🔶 PROBLEM
On a standard chart, volume is just numbers and bars, so to know how much weight is behind the current candle's move, you have to scan the whole chart yourself and judge relative size. Doing that instantly during live trading takes intuition built through long training. This problem is worse in crypto: since the same asset trades on dozens of exchanges at once, looking at a single exchange's volume alone doesn't show where the real volume spike actually is. I came to think there were two important points.
1. (Common) How much does this volume mean in the market as a whole?
Every asset has a normal, average scale at which it typically trades. If far more trading is happening than that, the asset is drawing attention right now. Conversely, even when candles look active and volume keeps increasing, if it stays below the whole-market average, it is actually a minor move. In other words, it should be readable instantly against the whole market — not against the immediately preceding period.
2. (Multi-exchange asset) Is this a market-wide event, or a local event on one exchange?
For an asset traded on dozens of exchanges at once, as in crypto, even a very large exchange's volume spike alone won't move the price much — because the remaining exchanges still hold volume that can't be ignored. The same spike means something completely different depending on whether it happens across many exchanges at once or only locally — and neither a single exchange's volume, nor a simple aggregate of them, shows this difference clearly (it ends up buried under the pattern of whichever pair has overwhelming volume, like Binance).
🔷 SOLUTION
1. (Common) The whole chart's accumulated average volume is extracted as a base line, and each bar's ratio to it is standardized into a common UV-scaled color. For crypto, one step further — the volumes of 12 major exchange pairs are each weighted by importance and composited into one Final Synthetic UV volume, used as the main volume. This way, every visual element on the chart can be drawn based on one common scale. This is Ultravol.
2. (Multi-exchange asset) The volume spike history of each of those same 12 sources, before Ultravol composites them into one, is decomposed along the time axis using the same UV-scaled color, so you can see at a glance whether the current spike spans the whole market or is local. This is Ultravol Matrix. (Originally one indicator, but split into two because the number of plots needed exceeded Pine's limit (64-plot) — the core engine is the same.)
Volume can now be perceived instantly. Candles carrying below-average volume stay dark and featureless; candles carrying above-average energy render brighter and more intense. The screen looks quiet when the market is quiet, and busy when it is busy. And this color grammar reads the same way on any asset, any timeframe — because the reference is always that market's own whole-history average. This indicator set can fully replace ordinary candles and volume charts.
🔷 Ultravol Engine: Processing Diagram
🟣 Check the Appendix — (16 live feeds/candle · coin-unit correction (1000x-listed coins) · USDT/USDC reference price conversion · Master GATE calc scheduling · per-exchange trust weighting · auto listing-join. Full mechanics + reusable code.)
───────────────────────────────────────────────
Ultravol - correct market volume
✨ Gives you a trained trader's sense for volume — by color, instantly!
📘 Reveal key market energy areas through volume-encoded candles, spectrum layer, v-ray, energy flux, and spike panel by color. A full legacy candle & volume chart replacement.
📗 Final synthetic UV — Across many crypto exchanges, Ultravol curates 12 (spot + perp) — reverted to native base → normalized & weighted by custom criteria, spot summed and perp summed separately (used as Energy Flux source), then combined into one — to read the unified volume flow across the whole market.
📙 Per-exchange UV level on the panel — Each exchange's volume, normalized to its own signature. → Rendered on the same UV-defined color scale. → Current candle's volume spike level (not raw volume) can be compared across exchanges at a glance.
✨ Ultravol engine:
Its own unique method. Synthetic UV (12-pair fusion) and Per-exchange UV-scaled color mark are crypto-exclusive — UV-scaled coloring works on any chart.
🔷 How to read it
It is recommended to check the color reference scheme in the settings panel to understand how candle colors are represented. Once you are familiar with these patterns, you can instantly gauge the intensity of current movements during live trading.
Refer to the historical patterns where rare, massive volume occurred (indicated by sky blue, blue, and purple - When similar volume occurs later, frequently become the Top or Bottom.)
Massive volume spike levels frequently act as strong S/R.
🔷 Basic Screen - check volume by color.
Spike Panel
This panel simultaneously displays the live candle volume in two ways: 1) as an absolute value in the base unit, and 2) as a UV-scaled mark. Users can quickly identify which exchange is experiencing a volume spike based solely on the colored emoji characters.
Status Label
The working mode automatically adjusts based on the selected symbol type and information, with the current status displayed via the label in the bottom-right corner.
Panel setup
☑ 📱 : Mobile friendly UI setup
• Source : Use Ultravol (Auto) normally
• Rescale : Only for extremes, too 🔥 or too ⚫️
☑ V-Ray : Vertical highlight marks on big spike.
☑ Energy Flux : 8 Spot(U), 4 Perp(L)
+ Trending energy balance (Spot vs Perp)
☑ Candles : Chart candle × UV fusion.
Each element—Volume, Volume-encoded Candlesticks (Up/Dn), and Ruler—features its own independent color scheme.
No volume chart color
☑ Spectrum : Synthetic UV from 12 vol src.
+ Instant energy read by UV-scaled color
+ Max height. Move to a pane first.
☑ Panel : Exchange's raw vol (number)
+ Current UV-scaled spike (color mark)
☑ s Smaller UI ☑ ↓ Center-right
☑ ! Wait Long · Act Fast (#1 principle)
🔸 Hover over the panel for detailed info.
Vol src info. & current status notice
Volume spike marking by unique UV-scaled color
Works together as one.
You can see historical spike flow and current spike details at the same time.
🔗 Ultravol Matrix reads vol spike history, Ultravol reads live.
⚠️ Ultravol must be placed at the very front.
(To ensure the correct z-layer order of all graphics, including hybrid override candles, is displayed exactly as intended. )
HELP: Check a tooltip on the setup panel & spike panel.
🟣 APPENDIX — A few notes on what happens inside UV engine.
💊 Master GATE (Calculation scheduling)
This indicator reads 16 external data sources in real time: the volumes of 12 exchange pairs, plus market cap, two stablecoin exchange rates, and the market average price. The computation that follows these calls is substantial. But volume is a simple cumulative value — I do not see immediate tick-by-tick recomputation as essential. So the work is divided into what happens when a candle opens (new), while it is in progress (realtime), and when it closes (confirmed) — and the heavy computation was judged reasonable to run only at fixed intervals during the candle. It is the internal scheduler that keeps the whole indicator responsive, and a precondition for this indicator to work at all.
// 🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦
// MASTER GATE - throttling setup
var bool uv_throttleGATE_required = uv_chart_symbol_crypto_basequotetickvol_flg
varip bool bar_NOTLIVE_flg = false
varip bool bar_GATEbypass_flg = false
bar_NOTLIVE_flg := uv_throttleGATE_required
and barstate.isrealtime and (timenow - (time_close + ((time_close - time)*2)) > 0)
bar_GATEbypass_flg := not (uv_throttleGATE_required and barstate.isrealtime and not bar_NOTLIVE_flg)
const int UV_MASTERGATE_RATE_T_VAL = 160 // ms
varip int uv_MasterGATE_last_t = na // Last GATE Open time = LINUX time ms
varip bool uv_MasterGATEopen_flg = false
uv_MasterGATEopen_flg := bar_GATEbypass_flg
or na(uv_MasterGATE_last_t)
or (timenow - uv_MasterGATE_last_t >= UV_MASTERGATE_RATE_T_VAL)
or barstate.isconfirmed
if not bar_GATEbypass_flg and uv_MasterGATEopen_flg
uv_MasterGATE_last_t := timenow
// MASTER GATE - throttling setup End
// 🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦🟧🟦
You can make this simple throttling GATE. After configuring the GATE operating conditions as shown above, you can apply them to the actual indicator calculation section by utilizing uv_MasterGATEopen_flg like below. It is simple yet effective. (Caution: Given how Pine Script executes, this GATE mechanism provides reasonable computational savings rather than perfect scheduling. For precise control, use it alongside barstate.isnew / isrealtime / isconfirmed)
if uv_MasterGATEopen_flg
s1_color_x := f_src_uv_lv_coloring(s1_uv_lv)
s2_color_x := f_src_uv_lv_coloring(s2_uv_lv)
s3_color_x := f_src_uv_lv_coloring(s3_uv_lv)
s4_color_x := f_src_uv_lv_coloring(s4_uv_lv)
s5_color_x := f_src_uv_lv_coloring(s5_uv_lv)
s6_color_x := f_src_uv_lv_coloring(s6_uv_lv)
s7_color_x := f_src_uv_lv_coloring(s7_uv_lv)
s8_color_x := f_src_uv_lv_coloring(s8_uv_lv)
p1_color_x := f_src_uv_lv_coloring(p1_uv_lv)
p2_color_x := f_src_uv_lv_coloring(p2_uv_lv)
p3_color_x := f_src_uv_lv_coloring(p3_uv_lv)
p4_color_x := f_src_uv_lv_coloring(p4_uv_lv)
🏁 Compositing the 12 exchange pairs
The volumes of 8 spot and 4 perpetual pairs are each converted into base-currency units, then merged into a single weighted volume. Ultravol shows the merged value; Ultravol Matrix shows the per-exchange values before merging, on the same color standard. The list stops at 12 because the volume figures of lower-ranked exchanges are often inflated, and would contaminate the result rather than improve it — the top 12 alone carry roughly 80% of real volume. This part is admittedly subjective; it was curated based on general exchange reputation in the market.
🏁 Unifying coin display units
Some coins — 1000PEPE, 1000SATS — are listed by different exchanges at 1000× or 10000× units (typically the case for extremely low-priced assets). Without reverting these to their original common unit, summing volumes across exchanges loses its meaning. There is no published reference for which exchange lists which coin at which multiple, so each case was verified one by one and built into an internal exception table, matched against the crypto name of the current chart. The symbol tickers used to call the 12 volumes are composed in two ways: (a) coins present in the low-volume table use the values defined there; (b) all other coins are composed per-symbol from 12 predefined symbol templates.
💊 This simple function extract crypto-name from any symbols with 1000x 1000000x
f_crypto_symbol_corekey(_tickerid, _basecurrency) =>
_tickerid_upper = str.upper(_tickerid)
_key = str.upper(_basecurrency)
if str.contains(_tickerid_upper, ":1000000BOB")
_key := '1000000BOB'
else
_prefix = str.match(_key, "^(?:1000000|10000|1000)")
_suffix = str.match(_key, "(?:1000000|10000|1000)$")
if _prefix != ''
_key := str.substring(_key, str.length(_prefix))
if _suffix != ''
_key := str.substring(_key, 0, str.length(_key) - str.length(_suffix))
_key
💊 This simple function extract the multiple number from symbol.
f_crypto_symbol_multiple(_fullname, _corekey) =>
_f = str.upper(_fullname)
_k = str.upper(_corekey)
_k_pos = (na(_k) or _k == '') ? na : str.pos(_f, _k)
_multiple = 1.0
if not na(_k_pos)
_colon_pos = str.pos(_f, ':')
_prefix_start = na(_colon_pos) ? 0 : _colon_pos + 1
_between = str.substring(_f, _prefix_start, _k_pos)
_after = str.substring(_f, _k_pos + str.length(_k))
_pre_num = str.match(_between, "^(?:1000000|10000|1000)$")
_suf_num = str.match(_after, "^(?:1000000|10000|1000)")
_raw = _pre_num != '' ? str.tonumber(_pre_num) : _suf_num != '' ? str.tonumber(_suf_num) : 1
_multiple := na(_raw) ? 1.0 : _raw
_multiple
💊 Coin name exceptions
The crypto names used by PulseWire's CRYPTO: and CRYPTOCAP: feeds quite often differ from the names exchanges actually use (this happens among smaller coins — SLC → SLCS, HYPE → HYPEH, and the like). Each time one was found, it was manually verified to be the same coin and added to an exception list. That exception table is pre-checked on the actual M.CAP and Avg. Price security calls.
This simple function maps standard exchange crypto names to PulseWire's native CRYPTO: , CRYPTOCAP: chart names.
f_crypto_cryptocap_tv_ticker(_uv_chart_crypto_tickerhead_str) =>
// CRYPTO: CRYPTOCAP:
//────────────────────────────────────────────---
// EXCHANGES => CRYPTOCAP // Cypto name
//────────────────────────────────────────────---
result_ticker = switch _uv_chart_crypto_tickerhead_str
'SLC' => 'SLCS' // Silencio
'BABY' => 'BABYL' // Babylon
'HYPER' => 'HYPERL' // Hyperlane
'HYPERL' => 'HYPERL' // 〃
'HYPE' => 'HYPEH' // Hyperliquid
'BOB' => 'BOBBUIL' // Build On Bitcoin
'BOBBOB' => 'BOBBUIL' // 〃
'TAG' => 'TAGG' // Tagger
'TAO' => 'TAOB' // TAO
'TOSHI' => 'TOSHI3' // Toshi
'NEIROCTO' => 'NEIROF' // First Neiro On Ethereum
'NEIRO' => 'NEIROF' // 〃
'NEX' => 'NEXUS5' // Nexus
'RATS' => 'RATS2' // Rats
'CHEEMS' => 'CHEEMSC' // Cheems
'SATS' => 'SATSO' // SATS (Ordinals)
'CAT' => 'CATSI' // Simon's Cat
'TRUMP' => 'TRUMPOF' // Trump official
'USDS' => 'USDS2' // USDS
'MOVE' => 'MOVEM' // Movement
'MOCA' => 'MOCAV' // Mocaverse
'ZORA' => 'ZORA2' // Zora
'BARD' => 'BARDL' // Lombard
'ATH' => 'ATHAE' // Aethir
'SONIC' => 'SONICSV' // Sonic SVM
'KNC' => 'KNC' // Kyber Network
'ZRO' => 'ZROL' // LayerZero
'AMP' => 'AMP2' // AMP
'CHIP' => 'CHIPUS' // USD.AI
'RAVE' => 'RAVED' // RaveDAO
'PROS' => 'PROSPH' // Pharos
=> _uv_chart_crypto_tickerhead_str
result_ticker
💊 G-Index px (Reference market price)
A mix of the current chart's price and the whole-market average price. It is a buffer that keeps the base line from being dragged around by a momentary price jump on a single exchange. G-Index Price operates only when the current chart uses USDT, USDC, or USD as its base unit. -> takes the avg. price provided by TV -> converts it to the current chart's unit by exchange rate.
//⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜
// G-Index PX
//
varip bool g_index_px_works = false
varip float g_index_px = na
var float chart_current_multiple = not uv_chart_symbol_crypto_basequotetickvol_flg ?
1.0 : f_crypto_symbol_multiple(uv_chart_tikerid_str, uv_chart_crypto_tickerhead_str)
var string chart_current_currency = syminfo.currency
float USD2USDT_avg_rate = request.security("CRYPTO:USDTUSD", timeframe.period, ta.sma(hlc3, 3))
float USD2USDC_avg_rate = request.security("CRYPTO:USDCUSD", timeframe.period, ta.sma(hlc3, 3))
bool USDT_is_DEPEG = math.abs(USD2USDT_avg_rate - 1.0) * 100 >= 0.1
bool USDC_is_DEPEG = math.abs(USD2USDC_avg_rate - 1.0) * 100 >= 0.2
var int chart_currency_convert_mode = switch chart_current_currency
'USD' => 1
'USDT' => 2
'USDC' => 3
=> 0
float g_avg_chart_ratio = switch chart_currency_convert_mode
1 => 1.0
2 => (1.0 / USD2USDT_avg_rate)
3 => (1.0 / USD2USDC_avg_rate)
0 => 0.0
var bool chart_currency_convert_no_need = (uv_chart_crypto_tickerhead_str == 'USDT')
or (uv_chart_crypto_tickerhead_str == 'USDC')
or (uv_chart_crypto_tickerhead_str == 'USDS')
or (uv_chart_crypto_tickerhead_str == 'PYUSD')
or (uv_chart_crypto_tickerhead_str == 'USDP')
var string g_index_px_crypto_ticker = 'CRYPTO:' + f_crypto_cryptocap_tv_ticker(uv_chart_crypto_tickerhead_str) + 'USD'
if chart_currency_convert_mode != 0
g_index_px := (request.security(g_index_px_crypto_ticker,timeframe.period, close * g_avg_chart_ratio,gaps=barmerge.gaps_on, ignore_invalid_symbol=true) * chart_current_multiple )
if not g_index_px_works and not na(g_index_px) and uv_volmode_ultravol_task_flg and not chart_currency_convert_no_need
g_index_px_works := true
if g_index_px_works and na(g_index_px) and na(g_index_px )
g_index_px_works := false
//G-Index - end
//⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜🟥⬜
🏁 Listing detection and exception reporting
An exchange that was absent early in the chart and began trading midway is automatically included in the calculation from that point on, and appears on the panel. The top-right panel shows the current bar's volume both as an absolute number (in base units) and as per-pair UV-scaled markings. When an exception occurs — some data not provided on a particular timeframe, for instance — you can hover over the panel to see exactly how the indicator is operating right now. Better to show what is happening than to behave strangely in silence.
🏁 You can check the uv engine (marking area like below) inside code.
// ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
// Ultravol Core Engine
// ⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜⬜
Indicator

Strong Volumetric Zones | ProjectSyndicateStrong Volumetric Zones carves the chart's true supply and demand from actual transacted volume — not from pivots, not from moving averages, not from projected lines — then power-ranks every zone so you know which ones are institutional footprint and which ones are noise. It pulls lower-timeframe order-flow data for every candle in the lookback window, builds a full volume-at-price histogram with buy/sell decomposition, isolates the high-volume nodes that dominate their neighborhood, extends each one into a bounded zone using a fractional-volume cutoff, and grades all of them 0–10. The whole tool runs on one idea: price alone is a story half-told — a level where the auction deposited enormous volume, where delta confirms one side was defending, where every test has been rejected, and that stands fresh and unchallenged is a different animal from a thin blot of retail churn, and it should not look the same on your chart.
BTCUSD
This is an order-flow reaction matrix, not a signal generator. It tells you where the auction has parked real liquidity, whether that liquidity is supply-side or demand-side, how many times price has tested it and held, how hard price was rejected on each hold, and which zone is the strongest one on the chart right now. The read is directional in the sense that you can see, at a glance, whether the session's volume structure is stacked with supply above or demand below — and whether the current candle is absorbing, exhausting, or stacking imbalance in real time.
🟢🔴 Summary how to trade this — more details below, read entire guide. Two clean approaches: react at the zone, or trade the break of it. Prefer STRONG / EXTREME grades and zones with high hold rates — the shallow low-graded zones tag constantly and mean little. The dashboard's Nearest ▲ / Nearest ▼ and Zone Status tell you instantly whether price is inside a volumetric wall or in open air. Runs on any timeframe with intrabar data available.
🧱 The Volume Core — the only source of truth. Every zone in this tool descends from a confirmed high-volume node in the actual volume-at-price histogram, never from a price-only pivot, never from an indicator line, never from a projected level. The engine requests lower-timeframe bars — auto-scaled from 1-second up to 5-minute depending on your chart — and decomposes each candle's range into volume-by-price bins. Buy volume and sell volume are tracked independently from the close-vs-open direction of every intrabar tick. The profile lookback is 300 bars by default and the bin resolution scales dynamically with ATR200, so the histogram adapts to the instrument's volatility without manual tuning. Nothing is drawn from a guess.
🔭 Lower-Timeframe Decomposition — Six granularity slots, auto-selected by default, running from 1-tick to 5-minute. Each confirmed chart candle is exploded into its internal sub-bars; volume is assigned to price bins based on the actual range covered by each sub-bar, not from a proportional tick-close estimate. Buy/sell classification follows the candle direction of the sub-bar itself. This is the reconstruction layer that separates a volume profile built from order flow from one built from assumptions. When the chart is on H4, the engine still reads M1 structure inside every bar.
◆ High-Volume Node Isolation — the signature carve. Within the global histogram, a bin must dominatepeakRadius neighbours on both sides (default 2) to qualify as a high-volume node — it is the local maximum of its neighborhood. A floor filter (minPeakPct of the POC volume, default 18%) eliminates statistical noise. All qualifying peaks are then sorted by absolute volume, strongest first, and the engine attempts to carve up tomaxZones zones (default 8), skipping any whose range overlaps an already-accepted zone. This is where the tool separates from a blob of undifferentiated volume bars: instead of forty equal-weighted histogram rows, you get a handful of bounded zones ranked by the actual liquidity parked inside them.
📐 Zone Edge Extension — Each confirmed node becomes a seed, and the zone expands outward bin-by-bin while neighbouring bins retain at leastnodeCut (default 40%) of the node's volume. Expansion halts atmaxSpan bins (default 2) to prevent overgrowth. The result is a bounded rectangular zone with a defined top, bottom, and mid-line — not a single price point, not an infinite band. The zone's width reflects the actual spread of significant volume around the node, not an arbitrary ATR multiple. Overlapping zones are rejected outright; only the strongest node survives at any price level.
🏷️ The 0–10 Strength Engine — Every zone carries a live grade with stars and a tier word WEAK → MODERATE → STRONG → VERY STRONG → EXTREME. The score is a weighted blend of five independently measurable properties, all derived from real volume and real price action:
▪️ Volume Share 3.5 — how much of the profile's total volume sits inside this zone, normalized against the strongest zone. The dominant term. A zone that holds 30% of the auction is not the same as one holding 3%.
▪️ Touch Count 2.5 — how many times price has entered and exited the zone across the full lookback. Normalized against 6 touches. A zone tested repeatedly has been confirmed by the market.
▪️ Hold Win Rate 2.0 — of all completed tests, what percentage resulted in a hold (rejection) rather than a break. A zone that defends itself 80% of the time is structurally different from one that folds on the first touch.
▪️ Freshness 1.0 — how recently the zone was last tested, normalized against the profile lookback. A zone untouched for 200 bars is fresher than one poked five bars ago.
▪️ Delta Skew 1.0 — the absolute buy-vs-sell imbalance inside the zone, normalized against a 35% threshold. A demand zone with 70% buy volume has institutional sponsorship; a 51/49 split does not.
Read the grade as a descriptive conviction ranking for which zone deserves your attention — it is not a backtested win-rate. A score filter hides everything below a level you choose, and a minimum-touch filter strips zones that have never been tested, so you can strip the chart down to STRONG and EXTREME only.
USDJPY
🔬 Per-Candle Strength Score — Independently, every confirmed candle receives its own 0–10 order-flow strength score, built from five micro-structural inputs: relative volume vs the 20-bar average, delta dominance (absolute delta / total volume), POC concentration (how much volume sits in the single busiest row), stacked imbalance run length, and value-area tightness. This is the engine that powers the Flow Signals — Absorption, Exhaustion, and Stacked Imbalance — and the dashboard's live candle readout. It tells you whether the bar you are looking at right now has order-flow weight behind it or is thin air.
🧬 In-Zone Statistics — Each zone is labeled at its center with its star grade, SUPPLY-SIDE or DEMAND-SIDE designation, the numeric score and tier, the volume share as a percentage of total profile volume, the number of completed tests, the hold win rate, the average reaction magnitude in multiples of ATR, and the buy/sell bias split. A typical label reads:★★★☆☆ DEMAND-SIDE · 6.2/10 STR · VOL 12% · TESTS 4 · HOLD 75% · REACT 2×ATR · DEMAND 68/32. Labels can be restricted by score and touch filters, or the text can be turned off entirely for a pure heatmap look. Four label sizes. Price tags at the right edge show the zone mid-line and score at a glance.
📊 Volume-At-Price Histogram — A full horizontal histogram drawn at the right side of the chart, extending beyond the zones. Each bar's width is proportional to the volume at that price level; color follows buy/sell dominance (demand vs supply palette), with the Master POC row highlighted in the dedicated POC color. A minimum-bin filter hides statistical dust. The histogram is the raw material from which every zone is carved — you see the mountain range and the zones simultaneously.
📐 Master POC & Value Area — The Point of Control (the single highest-volume price in the profile) is drawn as a continuous line spanning the full zone range and extending through the histogram, tagged with its exact price. The Value Area High and Value Area Low (default 70% of total volume) are drawn as dashed lines with labels. Together these three references give you the fair-value anchor for the entire lookback: price above VAH is in premium territory, price below VAL is at a discount, price inside the value area is at equilibrium.
🔬 Per-Candle Footprint — An optional intrabar footprint drawn inside the most recent N candles (default 10). Each row shows block-character bars proportional to volume or delta at that price level, color-coded by buy/sell dominance. Rows outside the candle's value area are muted; the POC row is highlighted. A value-area outline box frames the candle's internal equilibrium. On high-strength candles (score above a configurable threshold), the tier abbreviation is printed directly inside the footprint. This is the microscope — you see exactly where the volume parked inside the bar you just traded.
🎯 Naked POC Tracking — Optionally, every candle whose internal strength score exceeds a threshold spawns a dotted POC line that extends right until price actually trades through it. Once tested, the line is deleted. A cap on active naked POCs (default 8) keeps the chart clean. These are untested fair-value anchors — price tends to return to them, and their persistence means the auction has not yet cleared that liquidity.
NQ
⚡ Order-Flow Signals — Three micro-structural signals fire on confirmed bars:
▪️ ABS — Absorption. Delta dominance is high (>35%), but the candle body is small (<30% of range) and relative volume is elevated (>1.2×). One side absorbed the other's aggression without moving price. The direction hint points opposite to the absorbed delta: if selling was absorbed, the signal is bullish.
▪️ EXH — Exhaustion. Relative volume is elevated (>1.3×), delta is flat (<12%), and price closed near the high or low. Aggression was spent without conviction. The direction hint points away from the extreme: exhaustion at the high is bearish.
▪️ STK — Stacked Imbalance. Three or more consecutive rows of one-sided imbalance (buy vs adjacent sell, or vice versa, at the configured ratio, default 3×). A directional imbalance stack is a footprint of institutional execution.
Signals appear as tiny labeled markers at the high or low of the candle, color-coded by direction. They are not zone entries — they are real-time flow readings that confirm or deny what the zones are telling you.
📋 Live Command Dashboard — A compact panel that answers the questions you actually ask a volume-zone tool, organized into four sections:
▪️ LIVE ORDER FLOW — Bar Delta with a fill meter, Buy/Sell split with a dual-tone bar, Cumulative Volume Delta with trend arrows, Session Delta, Candle Score with tier, and the active Flow Signal with direction tag. This is the real-time pulse: who is hitting whom right now.
▪️ VOLUME PROFILE — Master POC price and position relative to close, Value Area range with a width meter, VA Location (inside or outside), and Profile Depth (bars processed, bins, zones carved). This is the structural map: where is fair value, how wide is it, how deep is the data.
▪️ REACTION ZONE RADAR — Up to six zones ranked by strength score, each showing price, star grade, score, bias (DEMAND / SUPPLY / BATTLE), test count, and hold win rate. The strongest zone on the chart is always row one. This is the hit list.
▪️ REGIME — Volatility state (COMPRESSED / NORMAL / EXPANSION) based on ATR14 vs ATR100, Zone Status (IN SUPPLY / IN DEMAND / OPEN AIR) with the in-zone score, and Nearest Supply / Nearest Demand with star grades. This is the tactical read: are you in a wall, are you in open air, how far to the next wall.
🔒 Non-Repainting — Lower-timeframe data is requested on confirmed bars only. Volume is accumulated into the histogram only after the chart bar closes. Zones are carved on the last bar of the chart from the completed histogram and then projected — they do not shift, flicker, or disappear retroactively within their lookback window. The candle strength score updates on confirmation. This is the honest tradeoff of order-flow structure: you wait for the bar to close, and in exchange the reading is real.
🔔 Native Alerts — Five condition alerts:
▪️ Volumetric Zone Entry — price enters any displayed zone.
▪️ Strong Volumetric Zone Entry — price enters a zone scoring 7+ (VERY STRONG / EXTREME). The one alert most people will actually run.
▪️ Volumetric Zone Exit — price leaves a zone.
▪️ High-Strength Candle — a confirmed candle scores 7+ on the order-flow engine.
▪️ Order-Flow Signal — an Absorption, Exhaustion, or Stacked Imbalance signal fires on any confirmed bar.
🎨 Five Theme Palettes — Obsidian Aurora (teal/coral/purple), Obsidian Gold (emerald/vermillion/gold), Deep Ocean (cyan/rose/indigo), Midnight Ember (mint/ember/amber), and Graphite Mono (silver/steel/white). Every palette is engineered for a pure-black chart background: deep, saturated, never toxic. Full custom override is available for demand, supply, POC, and accent colors. Zone shading scales opacity directly off the score — weak zones stay faint, extreme zones render solid. You read conviction with your peripheral vision before you read a single number.
Silver
🔧 Fully Customizable — Intrabar granularity (auto or manual), profile lookback, bin resolution, max zones, node isolation radius, min node volume, zone edge cutoff, max zone width, min tests and min score filters, right extension, zone text and price tag toggles, text size, mid-line width and fade, histogram toggle/width/floor, Master POC toggle, Value Area toggle and percentage, footprint toggle/bars/rows/type/max-length/candle-VA/strength-text/threshold, naked POC toggle/min-score/cap, signal toggle and imbalance ratio, dashboard toggle/position/size, theme selection, custom colors, and all five scoring weights for both zones and candles — all adjustable.
🎯 Why this is different — Most volume tools dump a histogram on your chart and leave you guessing which rows matter. Most zone tools draw every pivot they find with no weighting, no testing, no delta, no bias. This one reconstructs the order flow, carves zones from confirmed high-volume nodes, tracks how many times price tested each one and whether it held, measures the reaction magnitude, reads the buy/sell sponsorship inside the zone, and grades the result 0–10. You read the zone, the volume behind it, the delta skew, the hold rate, and the conviction score — at a glance. The chart itself does the filtering.
🚀 Apply to Gold XAUUSD, Silver, Forex, Crypto and Indices on any timeframe with intrabar data.
🎯 How To Trade It — Two Approaches
Everything hinges on the grade and the hold rate. A WEAK zone with no tests is noise you can see; a STRONG or EXTREME zone with a 70%+ hold rate and demand-side bias is where institutional volume has already defended. Trade the graded zones, and use the dashboard's Zone Status and Volatility Regime to confirm the trade has the right environment.
◾ 1 REACT at the zone — trade the rejection
This is the tool's core use. Price arrives at a high-graded zone and you fade the touch back toward the opposite side of the ladder.
▪️ Setup: wait for price to reach a STRONG / VERY STRONG / EXTREME zone — ideally one with a high hold rate and a clear DEMAND or SUPPLY bias. Check the dashboard: is it the top-ranked zone on the radar? Is the Volatility Regime in NORMAL or EXPANSION (not compressed — compressed means no fuel for a reaction)? Is the Candle Score on the approach bar showing Absorption or Stacked Imbalance in your direction?
▪️ Entry: on rejection out of the zone, with your own confirmation — a wick, an engulfing close, a lower-timeframe structure break, or an order-flow signal that validates the rejection. The zone is the location; it is not the trigger.
▪️ Stop: on the far side of the zone band. The zone has real width derived from the volume distribution — use it. A decisive close through the zone means the volume was cleared and the thesis is wrong.
▪️ Targets: the Nearest ▼ demand or Nearest ▲ supply on the opposite side, then step through the radar tier by tier, banking partials at each graded zone.
⚖️ The cleanest version: price runs into an EXTREME demand zone with 80% hold rate, the Candle Score on the approach prints ABS (absorption), the Volatility Regime shows EXPANSION, and price rejects on the first touch. First touches of fresh high-graded zones with order-flow confirmation are the setup; the fifth retest of the same zone is not.
◾ 2 TRADE THE BREAK — the zone flips role
The mirror case, and the one that saves you when approach 1 fails.
▪️ Setup: a decisive close through a high-graded zone — especially one with a strong hold rate — is meaningful information. It took real volume displacement to clear a level that the market had been defending. Check the delta inside the zone on the break bar: if the breaking candle has strong delta in the break direction, the liquidity was genuinely absorbed, not just pierced.
▪️ Entry: on the retest of the broken zone from the other side, once it has flipped from supply to demand or demand to supply. Wait for price to return to the zone and show respect — a wick, a small-body candle, an absorption signal.
▪️ Stop: back on the original side of the zone. If price reclaims it, the break failed and the original bias holds.
▪️ Targets: the next graded zone in the direction of travel, then the next. Use the radar: if all remaining zones in the direction are weak and untested, structure is thin and the move may extend.
⚖️ Watch the top-ranked zone on the radar. When the strongest zone on the chart breaks and holds as a flip, that is the session's structural event. The naked POCs ahead become magnets.
Rule of thumb: ⭐ First touch of a fresh STRONG / EXTREME zone with high hold rate and Volatility in NORMAL or EXPANSION → look for the rejection trade. ⭐ Decisive close through a high-graded zone confirmed by Candle Score and delta → stop fading it, wait for the retest and trade the flip. ⭐ Low grades, no tests, compressed volatility, or a zone already tested repeatedly → no trade. The score exists to tell you when to do nothing.
⚠️ IMPORTANT NOTICE: Strong Volumetric Zones maps and ranks volume-derived supply and demand zones from reconstructed lower-timeframe order flow. The 0–10 zone score is a descriptive conviction ranking built from volume share, touch count, hold win rate, freshness and delta skew — it is not a backtested win-rate, and this indicator tracks no trade outcomes and reports no performance statistics. The 0–10 candle strength score is built from relative volume, delta dominance, POC concentration, stacked imbalance and value-area tightness — also a descriptive reading, not a signal with a verified edge. Zones are locations, not entries. Volume accumulation occurs only on confirmed bars. These zones are decision support, not a standalone trade trigger. Always combine them with your own strategy, price-action confirmation and risk management. Past behavior does not guarantee future results. Indicator

OrderFlow Absorption Matrix | ProjectSyndicateOrderFlow Absorption Matrix reconstructs the order flow hiding inside every candle and maps it onto price as a living liquidity profile — then power-ranks the levels where aggressive volume was absorbed and price is most likely to react. It drills into each bar with a lower-timeframe scan to measure true buy/sell delta and, crucially, absorption — the volume that pushed into a wick and got soaked up by passive limit orders instead of moving price. That footprint is binned across the range into a Liquidity Profile, a Delta column and an Absorption column, anchored by the Value Area (POC / VAH / VAL), and distilled into 0–10 strength-ranked support/resistance zones. The whole tool runs on one idea from order-flow theory: price doesn't reverse where volume is heavy — it reverses where aggression is absorbed. The Absorption engine finds those hidden walls, scores them, and shows you the conviction behind each one at a glance.
🌊 LTF Delta & Absorption Engine — the core of the tool. A lower-timeframe scan breaks each chart bar into its intrabar prints and measures two things conventional volume cannot: net Delta (buying minus selling pressure) and Absorption (aggressive volume that drove into the upper or lower wick and was rejected — sellers absorbing buyers at highs, buyers absorbing sellers at lows). Granularity is adjustable, with optional seconds data for fine delta on low timeframes, and a clean fallback to candle direction when intrabar data is unavailable.
🟪 The Absorption Column — the namesake read. Beside the profile, a dedicated column ranks every price bin by how much aggressive flow was absorbed there. Tall absorption bars mark the hidden walls — iceberg-style passive defense where the market repeatedly refused to move despite aggression hitting it. These are the levels that hold, and the Absorption Side read tells you whether the heaviest absorption sits below price (defended support) or above it (defended resistance).
📊 The Liquidity Profile — a binned volume profile built over a rolling lookback, split four ways into strong / weak buying and strong / weak selling. Bars that traded on above-percentile volume render brighter as "strong," so you see not just where volume built, but where conviction did. The profile projects to the right of price so your candles stay clean.
🎯 Delta Heatmap Column — net buy/sell delta per price bin, shaded by intensity and labelled with the signed value, so you can read exactly which shelves were accumulated and which were distributed — even when total volume looks balanced.
🧲 Value Area — POC / VAH / VAL — the auction skeleton. The Point of Control (highest-volume price), the Value-Area High and Low are computed by true value-area expansion from the POC and drawn as clean reference lines. POC is the magnet; the VA edges frame fair value, and "Price vs POC" (in ATR) tells you how stretched the auction is.
🏆 0–10 Strength-Ranked Liquidity Zones — the power-ranking. The strongest levels are peak-detected from the profile and each earns a live 0–10 grade from five principled factors, each with a fixed directional sign: Volume (how much traded at the level), Absorption (how much aggression was soaked up there — the differentiator), Touches (how many times price tested it across the window), Rejection Wicks (how violently it was defended), and Recency (recent tests outrank stale ones). All five weights are adjustable. Zones are filtered by a minimum score and capped to the strongest N, so the chart only carries levels that earned their place — never overload.
🏷️ In-Zone Strength Labels & Stats — each zone carries its grade inside the band: stars, the X.X/10 score, a tier word (FORMING → WEAK → MODERATE → STRONG → ELITE) and a SUPPORT / RESIST side marker — plus the detailed stats that built it: Volume, Absorption, Touch count and Rejection count (V / A / T / R). Quality and reasoning read instantly, right on the level.
🎨 Strength-Shaded Fill — stronger zones render more opaque while weak ones stay faint, so the chart shows which levels carry weight before you read a number. Support zones shade with the bullish tone, resistance with the bearish tone, and the brightest band is your highest-conviction wall.
🧮 Flow Pressure Verdict — a composite read that fuses profile imbalance, cumulative-delta bias, absorption side and the most recent significant print into a single directional score, resolved to ACCUMULATION, DISTRIBUTION or BALANCED. One line tells you whether the order flow is quietly loading up or unloading beneath the price action.
🔭 MTF Flow Bias — a non-repainting flow read on three higher timeframes (default 15 / 60 / 240), each tagged BULL / BEAR / FLAT, so you can align your level with the larger order-flow tide before you act.
🖥️ Command Dashboard — a clean, terminal-style panel grouping everything that matters: Order Flow (last print, bar delta, bar volume, CVD bias), Liquidity Profile (POC / VAH / VAL, buy/sell share, net imbalance, price vs POC), Key Zones (top zone price, top-zone strength, absorption peak and side), MTF Flow and the Flow Pressure verdict — quality and context at a glance, no separate windows.
🎨 Five High-Contrast Themes — Plasma (aqua / rose / gold, default), Cyber, Ice & Fire, Phosphor and Mono — all tuned to read cleanly on a black background, with an optional flow-tint on the candles themselves.
🧹 Score Filter & Toggles — hide every zone below a score threshold, cap the number of zones, switch the profile, delta column, absorption column, value area, zones, dashboard and candle tint on or off — so the chart only shows the layers you trade.
🔒 Honest & Non-Repainting Core — historical bars are fixed: the profile, zones and scores are built from completed-bar history, and the higher-timeframe flow read uses a strict non-repainting request (prior confirmed bar only). The live bar and the rolling profile naturally refresh as each new bar closes — exactly as order flow should — but nothing redraws the past, and the score never hides a level to flatter the picture. The strength grade is a descriptive order-flow framework for ranking attention, not a backtested signal.
🔔 Native Alerts — a Whale Print alert for the largest order-flow clusters, a Medium-or-greater Print alert, an Any-Print alert, plus directional Buy-Print and Sell-Print alerts — so you catch significant flow the moment it hits the tape.
🔧 Fully Customizable — detection method and side-classification, percentile sensitivity and consensus windows, LTF granularity and seconds toggle, profile lookback / resolution / width / offset, strong-volume filter, value-area percent, the five zone-score weights, minimum strength, max zones, touch normalization, label content / size, MTF timeframes, theme, transparency and dashboard position / size — all adjustable.
🎯 Why this is different — most profile and S/R tools show you where volume is, then leave you guessing which shelf actually matters. OrderFlow Absorption Matrix answers it: it measures the absorption hidden in the wicks, ranks each level 0–10 on real order-flow evidence, and puts the score, the side and the supporting stats right inside the zone. You read where the wall is, why it's strong, and which way the flow is leaning — at a glance.
🚀 Apply to Gold (XAUUSD), Silver, Forex, Crypto, Indices and Futures on any intraday timeframe (volume-bearing symbols).
🎯 How To Trade It — Two Approaches
Everything hinges on one question the tool answers: is this level absorbing aggression (it holds) or is flow breaking through it (it gives)? High-strength zones with heavy absorption favor reaction; weak or de-rated zones being hit with strong same-side delta favor continuation.
◾ 1) Fade into an absorbed zone → rotate to value (reaction) — use on STRONG / ELITE zones (≥7) with heavy absorption
This is the indicator's core thesis. When price drives into a high-strength zone whose grade is built on Absorption and Rejection — most reliable when the Absorption Side confirms the direction (heavy absorption below = defended support, above = defended resistance) and Flow Pressure isn't screaming with the move.
▪️ Wait for price to tag the rated zone and print rejection — a wick or reversal back inside the band, ideally with the Delta column showing the aggressor being absorbed rather than breaking through.
▪️ Entry: on the rejection back inside the zone, facing the Value Area.
▪️ Stop: just beyond the zone / the next stronger level out. If price closes decisively through and holds, the absorption thesis failed — stand aside or flip to Approach 2.
▪️ Targets: step toward fair value — the POC as the primary magnet, then the opposite Value-Area edge (VAH/VAL) if momentum carries.
⚖️ The cleanest version: price spikes into an ELITE resistance zone with a tall absorption bar, the Delta column shows buyers getting soaked up, price fails to hold and rotates back down through VAH into the POC. That absorption-to-value reversion is the move this tool is built to frame. Use the Whale-Print and directional Buy/Sell-Print alerts to catch the stretch as it prints.
◾ 2) Break & retest a failing zone → trade with the flow (continuation) — use when zones are weak / de-rated or flow is one-sided
When a level is graded low, when the Delta column shows persistent same-side pressure into it, and the Flow Pressure verdict and MTF Flow all lean the same way, a clean break is the order flow expanding, not exhausting.
▪️ Wait for a decisive close beyond the zone on strong same-side delta (not a single wick), with the band failing to absorb.
▪️ Entry: in the direction of the break, on the close beyond the level or on a retest of the broken zone (a broken resistance often flips to support, and vice-versa).
▪️ Stop: back inside the broken zone, against the move.
▪️ Targets: the next ranked zone, the opposite Value-Area edge, or a measured move — trailing as flow extends.
Rule of thumb: ⭐ STRONG / ELITE absorbed zone + confirming Absorption Side → expect a reaction, fade it back toward the POC. ⭐ Weak / de-rated zone + one-sided delta and aligned MTF flow → expect follow-through, trade the break and retest.
⚠️ IMPORTANT NOTICE: OrderFlow Absorption Matrix reconstructs estimated order flow from lower-timeframe data and ranks where price is most likely to react. Lower-timeframe delta and absorption are an approximation of true tape, not exchange order-book data, and the 0–10 score is a descriptive order-flow framework — NOT a backtested signal and NOT a standalone trade trigger. Always combine it with your own strategy, price-action analysis and risk management to confirm setups. The indicator requires a volume-bearing symbol. Past behavior does not guarantee future results. Indicator

Indicator

Aura Volume Delta Matrix [Pineify]Aura Volume Delta Matrix
This indicator measures the net demand pressure behind each bar by separating candle volume into buying and selling components, smoothing the difference, and plotting it as a gradient histogram against a signal line. Rather than treating volume as a single unsigned number, it asks: how much of this bar's volume was buying versus selling? The answer — volume delta — reveals whether the crowd was net accumulating or distributing, even when price barely moved.
Key Features
Candle-polarity volume split: full bar volume attributed to buyers when close > open, sellers when close < open, and split 50/50 on doji candles
Dual EMA smoothing pipeline — one pass to extract the trend from noisy raw delta, a second pass to generate a crossover signal line
Normalized gradient histogram: bar intensity scales to the 100-bar rolling maximum, so weak readings appear faint and strong readings appear saturated, giving an immediate visual sense of magnitude relative to recent history
Crossover signals that only fire when delta is already on the correct side of zero — filtering out shallow, mean-reverting crosses that would otherwise generate noise
How It Works
The calculation pipeline has three stages.
Volume attribution: Each bar's total volume is assigned to buyers or sellers based on candle polarity. A bullish close (close > open) attributes 100% to buyers; a bearish close (close < open) attributes 100% to sellers; equal open and close splits it evenly. This is a bar-level proxy for order flow — not tick-level CVD, but a reasonable approximation available on any timeframe without premium data.
Delta smoothing: Raw delta (bullVol − bearVol) is noisy on its own. A configurable EMA (default 14) removes single-bar spikes and reveals the directional bias over recent bars. This smoothed delta is what plots as the histogram.
Signal line: A second EMA (default 9) is applied to the smoothed delta. This behaves like the MACD signal line — when the histogram crosses above it while already positive, demand is re-accelerating from a bullish baseline; crossing below while negative signals the opposite.
The gradient coloring normalizes the histogram against its own 100-bar peak, so you can immediately tell whether current delta intensity is historically significant or just routine churn.
How the Components Work Together
The two-pass EMA structure is intentional. A single EMA of raw delta would react quickly but produce too many false crosses. By smoothing first and then deriving a signal from the smoothed output, the crossover logic only fires when momentum has already built enough to survive the first layer of filtering. The zero-side gate on signals adds a second filter: a bullish crossover below zero means demand is recovering within a still-bearish context, which is a weaker setup than a crossover that occurs while net buying is already dominant. Together these two conditions — crossover confirmed by zero-side context — push the signal rate down and focus it on higher-conviction shifts.
Trading Ideas and Insights
Use bullish crossovers (delta crosses above signal while delta > 0) as a candidate entry trigger on trending assets. Consider waiting for price to also be above a longer-period moving average before acting on the signal.
Divergence between price making a new high and delta making a lower high may indicate absorption — sellers stepping in at resistance without moving price yet. This is worth watching rather than acting on automatically.
On ranging markets, delta will oscillate around zero and the smoothing will compress toward the baseline. Low histogram intensity (faint gradient bars) visually signals low-conviction conditions where crossover signals are less reliable.
The signal line alert conditions can be used to push notifications when the crossover setup occurs, removing the need to watch the chart continuously. Still, confirm with price structure before entering.
As with any volume-based indicator, results vary by asset liquidity and data provider. Crypto and futures markets with transparent volume data tend to produce cleaner delta readings than instruments where reported volume is an estimate.
Unique Aspects
The gradient normalization against a rolling 100-bar peak is a visual improvement over fixed-scale histograms: it adapts to each instrument's typical volume range without manual scaling, making the chart readable across different assets.
The zero-side signal filter avoids a common problem in oscillator crossover systems — signals that fire during shallow pullbacks within a larger counter-trend, where the histogram is technically crossing but the broader context is unfavorable.
The doji split (50/50 at open = close) is a minor but honest edge case handling that most simplified volume delta scripts skip.
How to Use
Add the indicator to any chart. It works on all timeframes, though intraday timeframes tend to show more granular delta shifts.
Watch histogram color and intensity. Solid, saturated green bars suggest strong net buying relative to recent history; faint bars suggest low-conviction buying or a quiet session.
Look for crossovers of the orange signal line. Bullish: histogram rises through the signal line while above zero. Bearish: histogram falls below the signal while below zero. Half-crossovers (histogram crosses signal but is on the wrong side of zero) are filtered from alerts.
Set alerts via the indicator's alert conditions if you want to monitor for crossover setups without watching the chart.
Customization
Delta Smoothing Length (default: 14) — Controls how much the raw volume delta is smoothed before plotting. Higher values produce a slower, more stable histogram but introduce more lag. Lower values react faster and may show more noise.
Signal Line Length (default: 9) — The EMA length applied to the smoothed delta to create the crossover trigger. Shorter values generate more frequent signals; longer values are more selective.
Bullish / Bearish / Signal Colors — Fully customizable to match your chart theme or personal preference.
Conclusion
Aura Volume Delta Matrix translates raw bar volume into a directional demand measure, smooths it through a dual-EMA pipeline, and presents the result as a gradient histogram with a signal-line crossover system. It's most useful for traders who want a volume-based confirmation layer that isn't just "volume went up" but instead reflects which side of the trade had more participation. Pair it with price structure or trend context for best results — no volume indicator tells the full story on its own.
Indicator

Markov Transition MatrixMarkov Transition Matrix
This indicator classifies higher-timeframe returns into three states and then tracks how often price transitions from one state to the next.
The three states are:
Bullish when the N-bar return is above the selected positive threshold
Bearish when the N-bar return is below the selected negative threshold
Neutral when the return stays between those thresholds
The result is a 3x3 transition matrix that answers questions such as:
After a bullish state, how often does the next state stay bullish?
After a neutral state, how often does the next state turn bearish?
Which current state has the strongest tendency to persist or reverse?
How It Works
Choose an analysis timeframe.
Choose a lookback window in candles.
For each completed bar in that timeframe, the script computes the return from close to the current close.
That return is classified as Bullish, Neutral, or Bearish using the threshold input.
Each one-step transition from the previous state to the new state is added to the cumulative matrix.
What The Table Shows
The main value in each cell is the one-step transition probability for that row and column.
The detail row under each cell shows P^2, P^3, and the raw transition count.
The summary row shows the latest confirmed state plus the current row probabilities for Bullish, Neutral, and Bearish.
The bottom bar shows a simple directional bias: P(Bull) - P(Bear).
P^2 and P^3 in this script are powers of the one-step probability. They are not full 2-step or 3-step Markov-chain forecasts produced by matrix multiplication.
Inputs
Threshold (%) : Minimum absolute return needed to classify a bar as Bullish or Bearish.
Timeframe : Higher timeframe used for the transition analysis.
Lookback Window : Number of candles used to measure each return.
Table Position : Screen location of the matrix.
How To Read It
Diagonal cells show persistence. High values there mean a state often repeats.
Off-diagonal cells show transitions. High values there mean a state often rotates into another one.
A positive bottom-bar reading means Bullish transitions currently outweigh Bearish transitions from the latest confirmed state.
A negative bottom-bar reading means Bearish transitions currently outweigh Bullish transitions from the latest confirmed state.
Usage Notes
The chart timeframe must be less than or equal to the selected analysis timeframe.
The matrix is cumulative across all available history in the selected timeframe context.
Changing timeframe, threshold, or lookback recompiles the script and rebuilds the tally from scratch.
This is a state-transition study. It does not place trades or generate broker orders.
Practical Uses
Compare persistence vs reversal behavior across different symbols.
Test whether a market spends more time trending or mean-reverting at a chosen timeframe.
Check whether a recent state has historically led to bullish continuation, neutral drift, or bearish follow-through.
Indicator

Normalized FX Majors Matrix FDP (8 Currencies)### Overview
The **Normalized FX Majors Matrix** is a premium Currency Strength Index designed to measure the absolute performance of the 8 major global currencies (USD, EUR, GBP, JPY, CHF, CAD, AUD, NZD).
Instead of looking at isolated currency pairs, this indicator processes a flawless mathematically symmetrical matrix of all 28 underlying cross-rates, extracting the true geometric equally-weighted strength of each individual currency.
### How It Works
1. **Mathematical Symmetry:** The indicator requests 28 major cross-rates to build an unbiased basket. Each currency is measured accurately against 7 other counterparties.
2. **Log Returns & Smoothing:** It calculates the logarithmic returns of each pair to handle volatility scaling properly, with an optional EMA smoothing parameter to filter out short-term market noise.
3. **Base 100 Rebase:** All 8 lines are re-anchored to a value of 100 at the beginning of the user-defined lookback window (`Normalization Window`). This allows for an instant visual comparison of cumulative returns.
4. **Dynamic Leaderboard:** A real-time dashboard ranks the currencies from strongest to weakest, color-coded dynamically to match the plot lines.
### How to Trade with It
- **Trend Following (Strong vs. Weak):** Look at the ranking table. Pair the strongest currency at the top with the weakest currency at the bottom (e.g., if USD is top and JPY is bottom, look for Long opportunities on USDJPY).
- **Crossover Signals:** When a currency line crosses above another, it indicates a shifting global capital flow.
- **Breakout Confirmation:** Use this matrix to confirm if a chart breakout is supported by true individual currency strength or if it is just a false move driven by the counter-currency. Indicator

Strategy Sensitivity MatrixThe Strategy Sensitivity Matrix is an institutional-grade backtesting tool designed to evaluate the robustness and parameter sensitivity of trend-following strategies. It enables users to compare the historical performance of a broad range of parameter combinations across multiple metrics to assess the overall stability of the selected strategy. The model displays the complete backtest landscape in a structured, color-coded matrix that allows investors to quickly identify robust parameter regions and evaluate historical performance stability across parameter combinations.
At its core, the matrix systematically evaluates a wide range of parameter combinations, where every individual cell represents the backtest result for one unique parameter configuration. Users can switch between volatility-based strategies and moving-average strategies. In volatility mode, the matrix rows represent volatility lengths and the matrix columns represent volatility factors. In crossover mode, the rows represent fast moving-average lengths and the columns represent slow moving-average lengths. Supported volatility types include the Average True Range (ATR), Standard Deviation (SD), and Mean Absolute Deviation (MAD). Supported moving-average types include the Exponential Moving Average (EMA), Simple Moving Average (SMA), Wilder’s Moving Average (RMA), and Weighted Moving Average (WMA). Supported display metrics include:
CAGR = Compounded Annual Growth Rate.
Sharpe = CAGR per unit of standard deviation.
Sortino = CAGR per unit of downside deviation.
Martin = CAGR relative to the Ulcer Index (UI).
Calmar = CAGR relative to maximum drawdown.
Max DD = Largest peak-to-trough decline in value.
Alpha (α) = Excess annualized risk-adjusted returns.
Expectancy = Average expected return per trade.
Profit Factor = Total gross profit per unit of losses.
Win Rate = Ratio of profitable trades to total trades.
Trades/Year = Average number of trades per year.
The matrix follows an intuitive percentile-based coloring framework that dynamically compares the relative performance and stability of all parameter combinations. Stronger values above or equal to the matrix median are highlighted in green, with bright green representing the top 10% of all parameter combinations. Weaker values below the matrix median are highlighted in orange, while red represents objectively weak performance based on the selected metric. Broad clusters of consistently strong results generally suggest lower parameter sensitivity and potentially greater robustness, while isolated peaks generally suggest elevated parameter sensitivity.
The summary table displayed above the matrix provides a broader distribution-level statistical overview of results across all parameter combinations. This structure allows investors to evaluate whether strong historical performance appears statistically widespread or narrowly concentrated across the parameter landscape. Stable parameter landscapes generally exhibit lower standard deviation, similar median and average values, and smaller performance gaps between the best and top 10% parameter combinations. The summary table includes the following sections:
Start = Start month and year of the selected backtest period.
End = End month and year of the selected backtest period.
Metric = Performance metric currently displayed in the matrix.
B&H = Buy-and-hold performance for the selected metric.
Best = Best-performing parameter combination in the matrix.
Top 10% = Average value of the top 10% parameter combinations.
Median = Median value across all parameter combinations.
Average = Average value across all parameter combinations.
Std Dev = Standard deviation of all parameter combinations.
≥ B&H = Percentage of combinations equal or better than B&H.
In summary, the Strategy Sensitivity Matrix is a powerful robustness analysis tool designed to help investors make data-driven decisions when evaluating parameter combinations across trend-following strategies. By evaluating the full parameter landscape, investors can quickly determine whether strong historical performance appears broadly distributed across stable parameter regions or narrowly concentrated within isolated parameter combinations. While historical robustness can provide valuable insight into past market behavior over the selected backtest period, users should remain mindful that market structures evolve over time and that historically stable parameter regions may not necessarily persist in future market conditions. Indicator

Adaptive Swing Matrix | MouryaThis indicator provides a Multi-Timeframe (MTF) table matrix designed to display the real-time states of several standard momentum and trend indicators across 11 user-defined timeframes simultaneously.
The primary purpose of this script is to consolidate chart real estate. By organizing MTF data into a single table, it allows users to monitor higher-timeframe trends and oscillator states without needing to continuously switch chart intervals or clutter their screen with multiple lower panes.
Indicator Logic & Components:
This matrix tracks the following standard indicators across the user's chosen timeframes:
Trend (EMA Crossover): Evaluates a fast EMA crossing a medium or slow EMA, filtered by a macro 200-period baseline EMA.
RSI (Relative Strength Index): Displays the current RSI value, color-coded based on user-defined breakout/breakdown thresholds.
MFI (Money Flow Index): Displays volume-weighted momentum.
ADX (Average Directional Index): Evaluates trend strength to filter out sideways consolidation periods.
MACD (Moving Average Convergence Divergence): Evaluates the relationship between the MACD line and the Signal line relative to the zero-line. The matrix uses the following acronyms to display the exact MACD state:
AZPCO: Above Zero, Positive Crossover (MACD is > 0 and MACD > Signal)
AZNCO: Above Zero, Negative Crossover (MACD is > 0 and MACD < Signal)
BZPCO: Below Zero, Positive Crossover (MACD is < 0 and MACD > Signal)
BZNCO: Below Zero, Negative Crossover (MACD is < 0 and MACD < Signal)
VWAP (Volume Weighted Average Price): Displays the current VWAP value and highlights if the closing price is currently holding above or below the baseline.
NASDAQ:INTC Matrix Features:
Customizable Timeframes: Users are not restricted to default intervals. You can input custom minute, hour, day, week, or month intervals for all 11 rows via the settings menu.
Overall Consensus Score: The bottom row of the table evaluates a 7-timeframe core grouping. If a strict majority of these selected timeframes share the same trend direction, it outputs a unified directional signal.
Visual Chart Overlays: Users can optionally enable the EMA lines and VWAP bands on their main chart. These visual elements have been strictly segregated in the indicator's Style tab for easy toggling.
All backend settings—including lengths, source data, and trigger thresholds for the RSI, MFI, and ADX—are fully unlocked in the inputs menu for personal customisation. Indicator

Pymander's EZ Momentum MatrixPymander's EZ Momentum Matrix—your new go-to tool for catching the pulse of the market!
I built this indicator because I know how frustrating it is to feel like you're "chasing" a move or getting caught in choppy fakeouts. This tool is designed to act like your trading GPS, helping you cut through the noise and align yourself with the high-probability trend instantly.
How it works:
Under the hood, we’ve combined two powerful components into one seamless visual experience:
The Momentum Wave: An ultra-sensitive oscillator that reacts to price shifts almost instantly. It changes color based on its slope—green when rising and red when falling—so you know exactly when momentum is shifting, even before a zero-cross.
The Trend Matrix: This is the heatmap bar at the bottom. It uses low-lag DEMA (Double EMA) logic and a 50-period trend filter to act as your "gatekeeper." It ensures you only take long signals when the macro trend is actually in your favor.
What makes it unique?
Confluence Diamonds: When the fast momentum wave and the filtered Trend Matrix align perfectly, a diamond signal appears on the wave. These are your "stars aligned" moments for high-probability entries.
Extreme Turn Signals: Small circles appear when the oscillator curls back in overbought or oversold zones, giving scalpers an early warning for potential micro-reversals.
The Glow: We polished the visuals with a slight aura glow effect and smooth gradients. Not only does it help you see signals more clearly, but your charts will look amazing while you're trading!
Why you’ll love it:
It’s all about clarity. By using the EZ Momentum Matrix, you stop guessing and start following. It simplifies complex trend and momentum data into a color-coded system that makes trade decisions faster and much more disciplined.
We’d love to hear how this is working for your specific strategy, so please reach out with any feedback or suggestions!
Wishing you tons of luck out there, stay disciplined, and here’s to many green days ahead!
-Pymander
Indicator

Luminous Volume Flow & Breakout Matrix [Pineify]Luminous Volume Flow & Breakout Matrix
This indicator estimates directional money flow by splitting each bar's volume proportionally between buyers and sellers based on where price closed within its range. A close near the high attributes most volume to buying pressure; a close near the low attributes it to selling. The smoothed net delta becomes a volume momentum oscillator, while a separate statistical layer flags volume surges — bars where total volume exceeds its recent mean by a configurable number of standard deviations. When a surge aligns with a directional lean, it often marks the kind of institutional event that precedes sustained moves.
Key Features
Proportional volume splitting — fractional allocation based on close position within the bar's range, not a binary up/down classification
EMA-smoothed volume delta oscillator with adaptive gradient coloring
Statistical volume surge detection using a mean + standard deviation threshold
Surge signals filtered by oscillator direction — bullish surges only fire when net flow is positive, bearish only when negative
How It Works
Rather than assigning all of a bar's volume to one side, the calculation uses a proportional model. If a bar's range is 10 points and the close sits 7 points above the low, 70% of volume is attributed to buying pressure and 30% to selling. This produces a continuous volume delta that reflects intrabar conviction with more granularity than binary methods.
For each bar, buy volume = (close − low) / (high − low) × volume, and sell volume = (high − close) / (high − low) × volume. Zero-range bars receive zero allocation to avoid division errors
The raw delta (buy − sell) is smoothed with an EMA to strip out single-bar noise and reveal the underlying volume direction trend
Independently, the indicator calculates a 20-bar SMA and standard deviation of total volume. Bars exceeding the mean by the configured multiplier times the standard deviation are flagged as surges
The smoothed delta is normalized over a 50-bar window to a 0–1 range, then mapped to a bear-to-bull color gradient for visual momentum reading
How the Components Work Together
The volume delta oscillator and the surge detector answer two different questions. The oscillator reveals direction — whether the prevailing volume is buyer- or seller-dominated. The surge detector reveals magnitude — whether total participation is abnormally high. Neither signal alone is particularly useful: a volume spike in a mixed-delta environment is just noise, and steady directional flow without unusual volume is normal trending behavior.
The indicator combines both by only plotting surge markers when the oscillator confirms direction. A bullish triangle appears when volume exceeds the statistical threshold AND the smoothed delta is positive — meaning the abnormal volume is flowing toward buyers, not just appearing randomly. This two-filter approach reduces false signals from earnings gaps, data releases, or other events that produce big volume without clear directional intent.
Trading Ideas and Insights
A bullish surge triangle after a pullback into support may indicate institutional accumulation — the combination of extreme volume and positive delta suggests large buyers absorbing supply at a level they consider favorable
Clusters of surge signals in the same direction over several bars carry more weight than isolated spikes. A single bar can be a data artifact; three or four surges in a week suggests a structural shift
When the oscillator gradient fades from deep bull to neutral while price continues higher, consider that the move may be running on fumes — price is advancing but volume conviction is declining
The proportional volume split is an approximation, not actual order flow data. Doji bars with small ranges but high volume will split nearly 50/50 regardless of the real buyer/seller composition. On instruments with thin volume or wide spreads, treat the oscillator as directional bias rather than precise measurement.
Unique Aspects
Proportional allocation produces a continuous delta spectrum rather than the binary all-or-nothing split many volume indicators use. A bar closing at 60% of its range assigns 60/40, preserving nuance that binary methods discard
The surge detection is purely statistical — it adapts to the instrument's own volume profile rather than relying on fixed thresholds. A surge on a microcap and a surge on SPY are both defined relative to their own baselines
Directional filtering of surges means the triangles only appear when both conditions align, making them relatively rare and targeted rather than noisy
How to Use
Add the indicator to your chart. The colored columns show the smoothed volume delta — above zero means net buying pressure, below zero means net selling
Watch the gradient intensity: deep, saturated colors indicate strong directional flow within the recent 50-bar context. Fading colors suggest conviction is weakening
Look for triangle markers at the bottom (bullish surge) or top (bearish surge) of the indicator pane. These flag statistically unusual volume aligned with directional flow
Adjust the Volume Surge Multiplier higher if you see too many signals — a value of 2.5–3.0 will isolate only the most extreme events
Customization
Flow Smoothing Length (default: 14) — EMA period for the volume delta. Lower values track fast shifts in buying/selling pressure; higher values produce a smoother oscillator at the cost of 3–5 bars of additional lag
Volume Surge Multiplier (default: 2.0) — How many standard deviations above the 20-bar volume mean qualifies as a surge. At 2.0, roughly 5% of bars will trigger in normally distributed volume; at 3.0, under 1%
Bullish / Bearish Flow Color — Set the gradient endpoints for positive and negative volume flow. The gradient interpolates between these based on the oscillator's position within its 50-bar range
Conclusion
The Luminous Volume Flow & Breakout Matrix combines proportional volume splitting with statistical surge detection to surface moments where unusual volume carries clear directional intent. The oscillator provides continuous context on who controls the tape, while the surge markers highlight outlier events worth paying attention to. Best used as a confirmation layer alongside price structure — volume shows you the conviction behind a move, but not the map. Indicator

Market Correlation Matrix [NikaQuant]Market Correlation Matrix
A real-time correlation dashboard that displays Pearson correlation coefficients between the current chart symbol and up to 6 user-defined comparison symbols.
═══ FEATURES ═══
• Track correlations for up to 6 symbols simultaneously (default: BTCUSDT, GOLD, SPX, DXY, US10Y, QQQ)
• Heatmap-colored table with intuitive color coding from strong positive (green) to strong negative (red)
• Correlation change tracking — see how correlations are shifting over a configurable lookback period
• Visual strength bars showing absolute correlation magnitude at a glance
• Signal classification labels: STRONG+/-, MOD+/-, WEAK+/-, NEUTRAL
• Built-in alerts for strong positive/negative crosses (±0.7) and zero-line crosses
• Fully customizable: table position, text size, all colors, border styling
═══ HOW IT WORKS ═══
The indicator calculates Pearson correlation over a user-defined period (default: 50 bars) between the chart’s close price and each comparison symbol’s close price. It then renders a compact table showing:
1. Symbol — Ticker of the comparison asset
2. Corr — Current correlation value (-1 to +1)
3. Change — How much the correlation shifted vs N bars ago (with directional arrows)
4. Strength — Block-style visual bar representing absolute correlation
5. Signal — Classification from NEUTRAL to STRONG+/-
═══ SETTINGS ═══
Symbols: Configure up to 6 comparison symbols (leave blank to skip)
Correlation Period: Lookback length for Pearson calculation (default: 50)
Change Lookback: Compare current vs past correlation (default: 10 bars)
Display: Table position, show/hide title
Style: Full color customization for heatmap, headers, borders, and change indicators
═══ ALERTS ═══
• Strong positive correlation cross (above +0.7) per symbol
• Strong negative correlation cross (below -0.7) per symbol
• Any symbol crossing the zero line
═══ USE CASES ═══
• Monitor intermarket relationships in real time
• Identify regime changes when correlations break down or strengthen
• Confirm or filter trade setups using cross-asset correlation context
• Track USD, bonds, equities, and crypto correlations from a single chart Indicator

_Trinity Matrix_
Short description
A structured multi-layer oscillator built around a refined Trinity Wave core, MFI regime columns, confidence scoring, divergence filtering, and TF / HTF context.
Full publication description
Trinity Matrix is a multi-layer oscillator designed to read continuation, reversal quality, regime strength, and divergence context inside a single panel.
It combines a refined Trinity Wave core, MFI regime structure, confidence scoring, mode-based signal filtering, divergence logic, and a compact TF / HTF dashboard into a unified workflow.
The name is a nod to layered market context: not a single signal, but a structured matrix of wave state, regime strength, confidence, and divergence.
Core Structure
Trinity Wave core with additional smoothing and soft limiting to reduce extreme spikes while preserving directional character
MFI Columns to separate baseline participation from stronger expansion phases
Strong zone highlighting to visually distinguish stronger bullish and bearish regime expansion
Confidence engine that blends Trinity Wave continuation and MFI continuation into a normalized directional score
Signal modes for different levels of selectivity: None, Early, Standard, and Strict
ATR-gated divergence filtering for cleaner divergence structures
TF / HTF confidence dashboard for comparing active timeframe conviction against a selected higher timeframe
Built-in alerts for buy, strong buy, elite buy, sell, strong sell, and elite sell conditions
How to Read It
Trinity Wave is the main directional layer. Green indicates bullish state, red indicates bearish state.
MFI Columns show regime participation.
White columns = baseline MFI flow
Shiny white columns = stronger bullish expansion
Orange columns = stronger bearish expansion
Average MFI bands help show where positive or negative regime strength is building relative to recent memory.
Confidence Dashboard summarizes directional conviction on both the active timeframe and the selected higher timeframe.
Row 1 = TF / HTF labels
Row 2 = confidence percentage
Row 3 = qualitative tag: Weak / Moderate / Strong
Signal Modes
None hides signal output
Early is faster and more aggressive
Standard is more balanced
Strict applies the strongest filtering and usually produces the fewest signals
Divergence Module
The divergence layer uses Trinity Wave turning points, confidence filtering, pivot distance control, and optional ATR gate filtering.
It can draw on the oscillator and, if enabled, on price as well.
The goal is not to maximize divergence count, but to keep the structures more selective and readable.
Alerts
This script includes separate alert conditions for:
TW Buy
TW Buy Strong
TW Buy Elite
TW Sell
TW Sell Strong
TW Sell Elite
Suggested Use
Trinity Matrix works best as a structured reading tool rather than a one-click decision engine.
A practical workflow is:
Read Trinity Wave direction and location
Check whether MFI is in baseline flow or strong expansion
Use confidence and HTF context to judge continuation or reversal quality
Use signal mode based on your desired aggressiveness
Use divergence as a contextual filter, not as a standalone trigger
Important Notes
Signal frequency changes significantly with the selected signal mode
HTF confidence reflects the live state of the selected higher timeframe
Divergence output is intentionally filtered and selective
This is an indicator framework, not a full trading strategy
Attribution
Core WaveTrend-style formulation was adapted from the open-source WaveTrend Oscillator by LazyBear, then extended with additional smoothing, soft limiting, MFI regime logic, confidence scoring, divergence filtering, dashboard structure, and alert workflow.
Acknowledgement
Built through many rounds of testing, refinement, and iteration — with a little help from ChatGPT and CodeGPT along the way.
Disclaimer
For educational and analytical use only. Not financial advice. Indicator

Market State Matrix [LuxAlgo]The Market State Matrix indicator is a high-density radial dashboard designed to visualize the entire market condition as a layered, 360-degree "radar." Unlike linear indicators, the Matrix organizes data into 5 concentric rings and 12 multi-scale slices , providing an instant snapshot of market confluence, conflict, and cyclical phases.
🔶 USAGE
The indicator operates in a dedicated pane, providing a centralized view of market health across five dimensions and twelve lookback periods.
🔹 The 5 Radial Dimensions (Inside to Outside)
Ring 1: Trend Regime (Teal/Red) - Visualizes the primary EMA-based direction.
Ring 2: Momentum Intensity (Cyan/Purple) - A heatmap based on RSI distance from the 50-level.
Ring 3: Volatility Glow (Gold) - Brightens as ATR expands relative to its historical average.
Ring 4: Volume Pressure (White) - Highlights areas of high relative participation and interest.
Ring 5: Price Structure (Lime/Orange) - Tracks Higher Highs/Lows vs. Lower Highs/Lows across various scales.
🔹 Interpretation
Full Alignment: Look for solid "columns" of color from the core to the outer ring. This represents maximum conviction across all market dimensions.
Internal Conflict: Mixed colors within a slice indicate internal disagreement—for example, a bullish trend (Ring 1) with bearish momentum (Ring 2) suggests potential exhaustion or a mean-reversion setup.
Volatility Breaks: Watch the Gold ring (Ring 3) for expansion. High volatility paired with high volume (Ring 4) often precedes a significant trend shift.
Regime Core: The center circle acts as your primary anchor, glowing solid Bullish or Bearish based on the fastest timeframe's regime.
🔶 DETAILS
The Matrix utilizes a Multi-Scale Engine divided into 12 radial slices, each representing a progressively longer lookback period (ranging from 8 to 220 bars). This allows users to see how different time-clusters are reacting simultaneously. "Sensitive Slices" respond to micro-shifts and short-term volatility, while "Stable Slices" reflect the long-term macro regime.
The tool also features a **Dominant Phase Highlighter**: A glowing radial arc and focus overlay highlight the current active slice of price action. This identifies where the market is positioned in its current cycle (Expansion, Exhaustion, Contraction, or Accumulation).
🔶 SETTINGS
🔹 Visual Settings
Horizontal Offset: Adjusts the X-axis position of the wheel on the chart.
Core Radius: Sets the size of the inner-most circle.
Ring Width: Determines the thickness of each of the 5 concentric rings.
Ring Gap: Sets the thin separation distance between segments for visual clarity.
Show Dashboard Legend: Toggles the visibility of the "Matrix Layers" table in the top-right corner.
Indicator

Harmonic Periodicity Matrix [Pineify]Harmonic Periodicity Matrix — Multi-Cycle Stochastic Oscillator with Momentum Ribbon & Adaptive Signals
The Harmonic Periodicity Matrix is an advanced cycle-detection oscillator that identifies market rhythm, momentum shifts, and high-probability reversal zones by harmonically combining three stochastic waves at different periodicities. Rather than relying on a single fixed lookback window — which inevitably misses cycles of differing durations — this indicator synthesizes a short-cycle , a primary-cycle , and a long-cycle stochastic into a single composite wave. The result is a smoother, more robust picture of where the market currently sits within its natural oscillation pattern.
Key Features
Three harmonically spaced stochastic cycles fused into one composite wave
Weighted Moving Average (WMA) smoothing to reduce noise without excessive lag
EMA-based signal line that generates precise momentum-crossover triggers
Dynamic gradient coloring that visually encodes cycle strength and direction
Momentum Ribbon fill between the cycle wave and signal line for at-a-glance bias confirmation
Overbought / Oversold reference zones with subtle background shading
Filtered Buy and Sell signals that fire only when reversals originate from extreme cycle territory
How It Works
At its core, the indicator computes three stochastic oscillators (%K) across three harmonically related lengths derived from a user-defined Primary Cycle Length :
Short cycle — half the primary length ( cycleLen / 2 ), capturing fast intraday or shorter-term oscillations.
Primary cycle — the user-defined length ( cycleLen ), representing the dominant market rhythm.
Long cycle — 1.5× the primary length ( cycleLen × 1.5 ), anchoring the broader trend context.
These three stochastic readings are averaged into a single composite cycle and then smoothed with a Weighted Moving Average (WMA) over the user-defined Smoothing Factor . Subtracting 50 centers the result around zero (range: −50 to +50), making overbought and oversold conditions immediately intuitive.
A Signal Line — an EMA calculated over twice the smoothing period — acts as a lagging reference. Crossovers between the composite wave and the signal line mark momentum inflection points.
Trading Ideas and Insights
Zero-line crosses — When the composite wave crosses above 0, market momentum is transitioning bullish; below 0 signals bearish transition.
Overbought / Oversold extremes — Readings above +25 indicate potential exhaustion; readings below −25 indicate potential recovery opportunity.
Signal crossovers from extremes — The highest-conviction signals occur when the wave crosses the signal line while already in oversold (< −15, Buy) or overbought (> +15, Sell) territory.
Momentum Ribbon color — A green ribbon confirms bullish momentum continuation; a red ribbon warns of bearish pressure even if price is still rising.
How Multiple Indicators Work Together
The power of the Harmonic Periodicity Matrix comes from the deliberate combination of three stochastic oscillators and two moving average types:
The three stochastics represent different frequency bands of market activity — fast, medium, and slow. Averaging them suppresses random noise that would appear in any single stochastic while preserving genuine cyclical structure that repeats across all three timeframes simultaneously.
The WMA smoothing is applied to the averaged cycle rather than to each individual stochastic. WMA front-weights recent data, keeping the smoothed line more responsive than a Simple Moving Average while avoiding the excessive lag of longer EMAs — the ideal balance for a cycle oscillator.
The EMA signal line is computed over a longer period (2× the smoothing factor), intentionally lagging behind the main wave. This lag creates meaningful crossover events: when the faster composite wave crosses the slower signal line, it indicates a genuine shift in momentum rather than a transient fluctuation.
The gradient coloring system encodes amplitude into color, providing an instant visual read of cycle intensity that raw numbers cannot convey. The background zone shading reinforces awareness of extreme readings without cluttering the visual space.
Together, these components form a self-contained cycle analysis system: the three stochastics define the oscillation, the WMA refines it, the EMA signal line contextualizes momentum, and the visual layer communicates everything instantly.
Unique Aspects
Harmonic period spacing — Using 0.5×, 1×, and 1.5× ratios is inspired by harmonic analysis principles, where related frequencies reinforce true cyclical signals and cancel spurious noise.
Amplitude-coded gradient — Color intensity scales with distance from zero (0→40 bullish, −40→0 bearish), making it easy to distinguish a mild rebound from a powerful trend.
Filtered signals — Buy signals require the crossover to occur below −15; Sell signals require it above +15. This prevents signal generation in neutral mid-range territory where momentum reversals are statistically less reliable.
Zero-centered display — Centering around 0 (rather than displaying 0–100) aligns naturally with how traders think about bullish vs. bearish bias.
How to Use
Add the indicator to any chart and timeframe. It plots in a separate panel below the price chart.
Watch for green circles (Buy signals) — these appear when the cycle wave crosses up through the signal line from oversold territory (below −15).
Watch for red circles (Sell signals) — these appear when the cycle wave crosses down through the signal line from overbought territory (above +15).
Use the Momentum Ribbon fill color to confirm trend direction before entering trades.
Pay attention to the overbought (+25) and oversold (−25) zones — readings beyond these thresholds suggest cycle exhaustion and potential reversal.
Combine with price action or volume analysis for additional confirmation before executing trades.
Customization
Primary Cycle Length (default: 20) — Increase for longer-term swing cycle detection; decrease for faster, shorter-term cycle tracking.
Smoothing Factor (default: 6) — Higher values produce a smoother wave with more lag; lower values are more reactive but noisier.
Bullish Wave color — Default green (#089981); customizable.
Bearish Wave color — Default red (#F23645); customizable.
Equilibrium color — Default gray (#787b86); customizable.
Conclusion
The Harmonic Periodicity Matrix offers a methodologically grounded approach to market cycle analysis by combining multi-frequency stochastic decomposition, adaptive smoothing, and momentum-crossover detection into a single, visually intuitive oscillator. It is designed for traders who want more than a standard stochastic — those who seek to understand the rhythm of the market across multiple cycle lengths simultaneously. Whether you are swing trading, trend following, or timing entries within a larger move, this indicator provides a structured, repeatable framework for identifying when momentum is genuinely shifting versus when the market is simply oscillating in neutral territory. Indicator

Arbitrage Matrix [LuxAlgo]The Arbitrage Matrix is a follow-up to our Arbitrage Detector that compares the spreads in price and volume between all the major crypto exchanges and forex brokers for any given asset.
It provides traders with a comprehensive view of the entire marketplace, revealing hidden relationships among different exchanges for the same asset and offering easy, visual comparisons.
🔶 USAGE
Arbitrage is the practice of taking advantage of price differences for the same asset across different markets. Arbitrage traders look for these discrepancies to profit from buying where it’s cheaper and selling where it’s more expensive to capture the spread.
For begginers this tool is a clear snapshot of how different markets value the same asset, making global price dynamics easy to grasp.
For advanced traders it is a powerful scanner for arbitrage setups, helping you identify where the biggest opportunities lie in real time.
Arbitrage opportunities are often short‑lived, but they can be highly profitable. By showing you where spreads exist, this tool helps traders:
Understand market inefficiencies
Avoid trading at unfavorable prices
Identify potential profit opportunities across exchanges
By default, the tool searches all the enabled sources for the asset in the chart. It uses crypto exchanges as sources for crypto assets and forex brokers for all other assets.
The data is displayed on a dashboard, which is the tool's only visual element.
Traders can enable or disable any exchange or broker from the settings panel. All are enabled by default.
🔹 Displayable Data
Traders can choose from four types of data to display: last price, last volume, average price, and average volume.
Note that price and volume data may not be available for all assets at all sources, and sources without data will not be displayed.
As the image shows, each chart displays a different type of data for the same asset. In this case, the asset is ETHUSDT.
🔹 Reading the Matrix
Traders must read the data in a row-by-column format, as shown in the following example.
Assume that we are charting BTCUSDT Daily. In the row, we have Exchange A; in the column, we have Exchange B. The data is the average price, and the value is 100. The default length for the average is 20.
It reads like this: The average BTCUSDT price over the last 20 days is $100 higher on Exchange A than on Exchange B.
If the value were -100, it would mean that the average price is $100 lower in Exchange A than in Exchange B.
🔹 Matrix Style
Traders can change the colors and disable the background gradient, which is enabled by default.
They can also fine-tune the location and dashboard size from the settings panel.
🔶 SETTINGS
Sources: Choose between crypto exchanges, forex brokers, or automatic selection based on the asset in the chart.
Average Length: Select the length for the price and volume averages.
Crypto Exchanges: Enable or disable any available exchange.
Forex Brokers: Enable or disable any available broker.
🔹 Dashboard
Data: Select the data to display.
Position: Select the dashboard location.
Size: Select the dashboard size.
🔹 Style
Bullish: Select bullish color.
Bearish: Select bearish color.
Background Gradient: Enable background gradient color.
Indicator

Indicator

Count█ OVERVIEW
A library of functions for counting the number of times (frequency) that elements occur in an array or matrix.
█ USAGE
Import the Count library.
import joebaus/count/1 as c
Create an array or matrix that is a `float`, `int`, `string`, or `bool` type to count elements from, then call the count function on the array or matrix.
id = array.from(1.00, 1.50, 1.25, 1.00, 0.75, 1.25, 1.75, 1.25)
countMap = id.count() // Alternatively: countMap = c.count(id)
The "count map" will return a map with keys for each unique element in the array or matrix, and with respective values representing the number of times the unique element was counted. The keys will be the same type as the array or matrix counted. The values will always be an `int` type.
array mapKeys = countMap.keys() // Returns unique keys
array mapValues = countMap.values() // Returns counts
If an array is in ascending or descending order, then the keys of the map will also generate in the same order.
intArray = array.from(2, 2, 2, 3, 4, 4, 4, 4, 4, 6, 6) // Ascending order
map countMap = intArray.count() // Creates a "count map" of all unique elements
array mapKeys = countMap.keys() // Returns // Ascending order
array mapValues = countMap.values() // Returns count
Include a value to get the count of only that value in an array or matrix.
floatMatrix = matrix.new(3, 3, 0.0)
floatMatrix.set(0, 0, 1.0), floatMatrix.set(1, 0, 1.0), floatMatrix.set(2, 0, 1.0)
floatMatrix.set(0, 1, 1.5), floatMatrix.set(1, 1, 2.0), floatMatrix.set(2, 1, 2.5)
floatMatrix.set(0, 2, 1.0), floatMatrix.set(1, 2, 2.5), floatMatrix.set(2, 2, 1.5)
int countFloatMatrix = floatMatrix.count(1.0) // Counts all 1.0 elements, returns 5
// Alternatively: int countFloatMatrix = c.count(floatMatrix, 1.0)
The string method of count() can use strings or regular expressions like "bull*" to count all matching occurrences in a string array.
stringArray = array.from('bullish', 'bull', 'bullish', 'bear', 'bull', 'bearish', 'bearish')
int countString = stringArray.count('bullish') // Returns 2
int countStringRegex = stringArray.count('bull*') // Returns 4
To count multiple values, use an array of values instead of a single value. Returning a count map only of elements in the array.
countArray = array.from(1.0, 2.5)
map countMap = floatMatrix.count(countArray)
array mapKeys = countMap.keys() // Returns keys
array mapValues = countMap.values() // Returns counts
Multiple regex patterns or strings can be counted as well.
stringMatrix = matrix.new(3, 3, '')
stringMatrix.set(0, 0, 'a'), stringMatrix.set(1, 0, 'a'), stringMatrix.set(2, 0, 'a')
stringMatrix.set(0, 1, 'b'), stringMatrix.set(1, 1, 'c'), stringMatrix.set(2, 1, 'd')
stringMatrix.set(0, 2, 'a'), stringMatrix.set(1, 2, 'd'), stringMatrix.set(2, 2, 'b')
// Count the number of times the regex patterns `'^(a|c)$'` and `'^(b|d)$'` occur
array regexes = array.from('^(a|c)$', '^(b|d)$')
map countMap = stringMatrix.count(regexes)
array mapKeys = countMap.keys() // Returns
array mapValues = countMap.values() // Returns
An optional comparison operator can be specified to count the number of times an equality was satisfied for `float`, `int`, and `bool` methods of `count()`.
intArray = array.from(2, 2, 2, 3, 4, 4, 4, 4, 4, 6, 6)
// Count the number of times an element is greater than 4
countInt = intArray.count(4, '>') // Returns 2
When passing an array of values to count and a comparison operator, the operator will apply to each value.
intArray = array.from(2, 2, 2, 3, 4, 4, 4, 4, 4, 6, 6)
values = array.from(3, 4)
// Count the number of times and element is greater than 3 and 4
map countMap = intArray.count(values, '>')
array mapKeys = countMap.keys() // Returns
array mapValues = countMap.values() // Returns
Multiple comparison operators can be applied when counting multiple values.
intMatrix = matrix.new(3, 3, 0)
intMatrix.set(0, 0, 2), intMatrix.set(1, 0, 3), intMatrix.set(2, 0, 5)
intMatrix.set(0, 1, 2), intMatrix.set(1, 1, 4), intMatrix.set(2, 1, 2)
intMatrix.set(0, 2, 5), intMatrix.set(1, 2, 2), intMatrix.set(2, 2, 3)
values = array.from(3, 4)
comparisons = array.from('<', '>')
// Count the number of times an element is less than 3 and greater than 4
map countMap = intMatrix.count(values, comparisons)
array mapKeys = countMap.keys() // Returns
array mapValues = countMap.values() // Returns
Library

FiniteStateMachine🟩 OVERVIEW
A flexible framework for creating, testing and implementing a Finite State Machine (FSM) in your script. FSMs use rules to control how states change in response to events.
This is the first Finite State Machine library on PulseWire and it's quite a different way to think about your script's logic. Advantages of using this vs hardcoding all your logic include:
• Explicit logic : You can see all rules easily side-by-side.
• Validation : Tables show your rules and validation results right on the chart.
• Dual approach : Simple matrix for straightforward transitions; map implementation for concurrent scenarios. You can combine them for complex needs.
• Type safety : Shows how to use enums for robustness while maintaining string compatibility.
• Real-world examples : Includes both conceptual (traffic lights) and practical (trading strategy) demonstrations.
• Priority control : Explicit control over which rules take precedence when multiple conditions are met.
• Wildcard system : Flexible pattern matching for states and events.
The library seems complex, but it's not really. Your conditions, events, and their potential interactions are complex. The FSM makes them all explicit, which is some work. However, like all "good" pain in life, this is front-loaded, and *saves* pain later, in the form of unintended interactions and bugs that are very hard to find and fix.
🟩 SIMPLE FSM (MATRIX-BASED)
The simple FSM uses a matrix to define transition rules with the structure: state > event > state. We look up the current state, check if the event in that row matches, and if it does, output the resulting state.
Each row in the matrix defines one rule, and the first matching row, counting from the top down, is applied.
A limitation of this method is that you can supply only ONE event.
You can design layered rules using widlcards. Use an empty string "" or the special string "ANY" for any state or event wildcard.
The matrix FSM is foruse where you have clear, sequential state transitions triggered by single events. Think traffic lights, or any logic where only one thing can happen at a time.
The demo for this FSM is of traffic lights.
🟩 CONCURRENT FSM (MAP-BASED)
The map FSM uses a more complex structure where each state is a key in the map, and its value is an array of event rules. Each rule maps a named condition to an output (event or next state).
This FSM can handle multiple conditions simultaneously. Rules added first have higher priority.
Adding more rules to existing states combines the entries in the map (if you use the supplied helper function) rather than overwriting them.
This FSM is for more complex scenarios where multiple conditions can be true simultaneously, and you need to control which takes precedence. Like trading strategies, or any system with concurrent conditions.
The demo for this FSM is a trading strategy.
🟩 HOW TO USE
Pine Script libraries contain reusable code for importing into indicators. You do not need to copy any code out of here. Just import the library and call the function you want.
For example, for version 1 of this library, import it like this:
import SimpleCryptoLife/FiniteStateMachine/1
See the EXAMPLE USAGE sections within the library for examples of calling the functions.
For more information on libraries and incorporating them into your scripts, see the Libraries section of the Pine Script User Manual.
🟩 TECHNICAL IMPLEMENTATION
Both FSM implementations support wildcards using blank strings "" or the special string "ANY". Wildcards match in this priority order:
• Exact state + exact event match
• Exact state + empty event (event wildcard)
• Empty state + exact event (state wildcard)
• Empty state + empty event (full wildcard)
When multiple rules match the same state + event combination, the FIRST rule encountered takes priority. In the matrix FSM, this means row order determines priority. In the map FSM, it's the order you add rules to each state.
The library uses user-defined types for the map FSM:
• o_eventRule : Maps a condition name to an output
• o_eventRuleWrapper : Wraps an array of rules (since maps can't contain arrays directly)
Everything uses strings for maximum library compatibility, though the examples show how to use enums for type safety by converting them to strings.
Unlike normal maps where adding a duplicate key overwrites the value, this library's `m_addRuleToEventMap()` method *combines* rules, making it intuitive to build rule sets without breaking them.
🟩 VALIDATION & ERROR HANDLING
The library includes comprehensive validation functions that catch common FSM design errors:
Error detection:
• Empty next states
• Invalid states not in the states array
• Duplicate rules
• Conflicting transitions
• Unreachable states (no entry/exit rules)
Warning detection:
• Redundant wildcards
• Empty states/events (potential unintended wildcards)
• Duplicate conditions within states
You can display validation results in tables on the chart, with tooltips providing detailed explanations. The helper functions to display the tables are exported so you can call them from your own script.
🟩 PRACTICAL EXAMPLES
The library includes four comprehensive demos:
Traffic Light Demo (Simple FSM) : Uses the matrix FSM to cycle through traffic light states (red → red+amber → green → amber → red) with timer events. Includes pseudo-random "break" events and repair logic to demonstrate wildcards and priority handling.
Trading Strategy Demo (Concurrent FSM) : Implements a realistic long-only trading strategy using BOTH FSM types:
• Map FSM converts multiple technical conditions (EMA crosses, gaps, fractals, RSI) into prioritised events
• Matrix FSM handles state transitions (idle → setup → entry → position → exit → re-entry)
• Includes position management, stop losses, and re-entry logic
Error Demonstrations : Both FSM types include error demos with intentionally malformed rules to showcase the validation system's capabilities.
🟩 BRING ON THE FUNCTIONS
f_printFSMMatrix(_mat_rules, _a_states, _tablePosition)
Prints a table of states and rules to the specified position on the chart. Works only with the matrix-based FSM.
Parameters:
_mat_rules (matrix)
_a_states (array)
_tablePosition (simple string)
Returns: The table of states and rules.
method m_loadMatrixRulesFromText(_mat_rules, _rulesText)
Loads rules into a rules matrix from a multiline string where each line is of the form "current state | event | next state" (ignores empty lines and trims whitespace).
This is the most human-readable way to define rules because it's a visually aligned, table-like format.
Namespace types: matrix
Parameters:
_mat_rules (matrix)
_rulesText (string)
Returns: No explicit return. The matrix is modified as a side-effect.
method m_addRuleToMatrix(_mat_rules, _currentState, _event, _nextState)
Adds a single rule to the rules matrix. This can also be quite readble if you use short variable names and careful spacing.
Namespace types: matrix
Parameters:
_mat_rules (matrix)
_currentState (string)
_event (string)
_nextState (string)
Returns: No explicit return. The matrix is modified as a side-effect.
method m_validateRulesMatrix(_mat_rules, _a_states, _showTable, _tablePosition)
Validates a rules matrix and a states array to check that they are well formed. Works only with the matrix-based FSM.
Checks: matrix has exactly 3 columns; no empty next states; all states defined in array; no duplicate states; no duplicate rules; all states have entry/exit rules; no conflicting transitions; no redundant wildcards. To avoid slowing down the script unnecessarily, call this method once (perhaps using `barstate.isfirst`), when the rules and states are ready.
Namespace types: matrix
Parameters:
_mat_rules (matrix)
_a_states (array)
_showTable (bool)
_tablePosition (simple string)
Returns: `true` if the rules and states are valid; `false` if errors or warnings exist.
method m_getStateFromMatrix(_mat_rules, _currentState, _event, _strictInput, _strictTransitions)
Returns the next state based on the current state and event, or `na` if no matching transition is found. Empty (not na) entries are treated as wildcards if `strictInput` is false.
Priority: exact match > event wildcard > state wildcard > full wildcard.
Namespace types: matrix
Parameters:
_mat_rules (matrix)
_currentState (string)
_event (string)
_strictInput (bool)
_strictTransitions (bool)
Returns: The next state or `na`.
method m_addRuleToEventMap(_map_eventRules, _state, _condName, _output)
Adds a single event rule to the event rules map. If the state key already exists, appends the new rule to the existing array (if different). If the state key doesn't exist, creates a new entry.
Namespace types: map
Parameters:
_map_eventRules (map)
_state (string)
_condName (string)
_output (string)
Returns: No explicit return. The map is modified as a side-effect.
method m_addEventRulesToMapFromText(_map_eventRules, _configText)
Loads event rules from a multiline text string into a map structure.
Format: "state | condName > output | condName > output | ..." . Pairs are ordered by priority. You can have multiple rules on the same line for one state.
Supports wildcards: Use an empty string ("") or the special string "ANY" for state or condName to create wildcard rules.
Examples: " | condName > output" (state wildcard), "state | > output" (condition wildcard), " | > output" (full wildcard).
Splits lines by , extracts state as key, creates/appends to array with new o_eventRule(condName, output).
Call once, e.g., on barstate.isfirst for best performance.
Namespace types: map
Parameters:
_map_eventRules (map)
_configText (string)
Returns: No explicit return. The map is modified as a side-effect.
f_printFSMMap(_map_eventRules, _a_states, _tablePosition)
Prints a table of map-based event rules to the specified position on the chart.
Parameters:
_map_eventRules (map)
_a_states (array)
_tablePosition (simple string)
Returns: The table of map-based event rules.
method m_validateEventRulesMap(_map_eventRules, _a_states, _a_validEvents, _showTable, _tablePosition)
Validates an event rules map to check that it's well formed.
Checks: map is not empty; wrappers contain non-empty arrays; no duplicate condition names per state; no empty fields in o_eventRule objects; optionally validates outputs against matrix events.
NOTE: Both "" and "ANY" are treated identically as wildcards for both states and conditions.
To avoid slowing down the script unnecessarily, call this method once (perhaps using `barstate.isfirst`), when the map is ready.
Namespace types: map
Parameters:
_map_eventRules (map)
_a_states (array)
_a_validEvents (array)
_showTable (bool)
_tablePosition (simple string)
Returns: `true` if the event rules map is valid; `false` if errors or warnings exist.
method m_getEventFromConditionsMap(_currentState, _a_activeConditions, _map_eventRules)
Returns a single event or state string based on the current state and active conditions.
Uses a map of event rules where rules are pre-sorted by implicit priority via load order.
Supports wildcards using empty string ("") or "ANY" for flexible rule matching.
Priority: exact match > condition wildcard > state wildcard > full wildcard.
Namespace types: series string, simple string, input string, const string
Parameters:
_currentState (string)
_a_activeConditions (array)
_map_eventRules (map)
Returns: The output string (event or state) for the first matching condition, or na if no match found.
o_eventRule
o_eventRule defines a condition-to-output mapping for the concurrent FSM.
Fields:
condName (series string) : The name of the condition to check.
output (series string) : The output (event or state) when the condition is true.
o_eventRuleWrapper
o_eventRuleWrapper wraps an array of o_eventRule for use as map values (maps cannot contain collections directly).
Fields:
a_rules (array) : Array of o_eventRule objects for a specific state. Library
