Model FollowerThis indicator maps price structure using confirmed candle closes rather than wicks — a new high or low only registers once price actually closes beyond the prior range, filtering out spikes that don't follow through. Each new range is anchored to the true swing point: the last opposing candle (or any wick that pierced past it) before the break, giving a clean staircase view of how structure is actually developing.
From that structure, it plots two live target references:
Local Target (orange) — tracks the current extreme of whichever direction price is presently trending, on your chart's own timeframe. Pushing higher, it follows the developing high; the moment structure turns lower, it immediately switches to the developing low. This updates in real time and reflects what's happening on your timeframe right now — including during a countertrend pullback inside a larger trend.
HTF Target (blue) — the same structure logic, calculated independently on a higher timeframe pulled automatically based on your current chart's timeframe. This gives a read on where price is headed on a broader scale without needing to manually flip charts.
How to use it: when the local and HTF targets are pointing the same direction, the immediate move has higher-timeframe backing. When they diverge — say, local structure just turned bullish but the HTF target is still pointing down — that's often a sign you're looking at a countertrend bounce or a pullback rather than a fresh trend continuation, not a fully confirmed reversal yet.
Note: this tool intentionally doesn't auto-label market phases (accumulation/distribution) or draw supply/demand zones — reading trend context and zone validity is left to the trader, since that involves judgment a mechanical rule can't fully capture. This indicator is built to support that reading, not replace it. Indicator

Weis Wave Renko - Effort vs ResultABOUT THIS SCRIPT
Weis Wave Renko – Effort vs Result indicator combines Renko price structure with Weis Wave volume analysis to help assess the relationship between market effort and price result.
This script is a fork and substantial extension of the original “Weis Wave Volume” script published by modhelius . Full credit is given to modhelius for the original Weis Wave calculation, Renko assignment methodology and histogram on which this version is based.
PURPOSE
The script was developed to support the following workflow:
Use VSA/Wyckoff analysis to identify the market background and possible exhaustion, absorption or testing activity.
Use Weis Wave volume to compare the effort behind successive buying and selling waves.
Use Renko structure to confirm changes of direction, higher lows, lower highs and sustained reversals.
Use the developing relationship between effort and result to assess whether supply or demand is strengthening, weakening or being absorbed.
Where appropriate, use a confirmed Renko reversal as part of an entry, stop-placement or trade-management process.
The script is intended to support a discretionary Wyckoff/VSA-style analysis of Renko charts.
It does not treat every Renko colour change as a trading signal. Instead, it is designed to help answer questions such as:
Is demand expanding or contracting?
Is supply expanding or contracting?
Is price rising with less apparent selling resistance?
Is price falling because support beneath the market is weak?
Is increased volume producing less price progress?
Does a high-volume wave represent a possible buying or selling climax?
Has a later lower-volume test supported or rejected that interpretation?
The underlying concept is effort versus result:
Effort = cumulative wave volume.
Result = the price movement achieved by the Renko wave.
PIVOT STATISTICS
At each completed Renko peak or trough, the script displays:
Weis Wave volume.
Number of Renko boxes contained in the wave.
The statistics box refers to the completed wave that formed that peak or trough.
The current uncompleted wave can also display a live statistics box. Live statistics remain provisional until the wave is completed by a confirmed change of direction.
WAVE COMMENTS
Each completed wave can receive a separate comment box connected to the centre of the relevant Renko leg.
The comment box may contain three distinct sections:
Structural conclusion.
Primary wave classification from the Scenario Key.
Explanation based on later price and volume behaviour.
For example:
Buying climax confirmed
Demand expanding
Next up-wave retest failed below the climax high on lower volume
The primary wave classification describes the completed wave relative to the previous wave in the same direction.
The structural conclusion may update later as additional waves complete reflecting the dynamic nature of the indicator.
PRIMARY WAVE CLASSIFICATIONS
Up-waves are compared with the preceding completed up-wave:
Demand expanding - More volume accompanied by a longer rise.
Demand contracting - Less volume accompanied by a shorter rise.
Less effort needed to rise - Similar or lower volume produced the same or greater upward progress.
Buying effort absorbed - More volume produced a shorter rise, suggesting that buying effort encountered supply.
Down-waves are compared with the preceding completed down-wave:
Supply expanding - More volume accompanied by a longer decline.
Supply contracting - Less volume accompanied by a shorter decline.
Less support beneath price - Similar or lower volume produced the same or greater downward progress.
Selling effort absorbed - More volume produced a shorter decline, suggesting that selling effort encountered demand.
No material change - Neither volume nor price result changed sufficiently to exceed the selected Material Change Threshold.
CLIMAX ANALYSIS
A large wave is not classified as a confirmed climax merely because it has high volume. The script uses a staged process:
Possible buying climax:
An up-wave becomes a buying-climax candidate.
The next down-wave must produce the selected Renko reversal confirmation, which defaults to three boxes.
The immediately following up-wave is treated as the retest.
The buying climax is confirmed only when that next up-wave: has lower volume than the original climax up-wave; produces a shorter rise; and fails below the climax high. The comment can then state:
Buying climax confirmed -
Next up-wave retest failed below the climax high on lower volume - Possible selling climax
A down-wave becomes a selling-climax candidate. The next up-wave must produce the selected Renko reversal confirmation. The immediately following down-wave is treated as the test. The selling climax is confirmed only when that next down-wave: has lower volume than the original climax down-wave; produces a shorter decline; and holds above the climax low.
The comment can then state:
Selling climax confirmed -
Next down-wave test held above the climax low on lower volume
Only the immediate next corresponding up-wave or down-wave is used for the test. The script does not search through later waves to find a result that retrospectively fits the climax interpretation.
NO SUPPLY AND NO DEMAND
Possible no supply requires a down-wave that:
has lower volume than the previous down-wave;
produces a shorter decline; and
forms a higher low.
The following up-wave must then sustain the selected number of reversal boxes.
Possible no demand requires an up-wave that:
has lower volume than the previous up-wave;
produces a shorter rise; and
forms a lower high.
The following down-wave must then sustain the selected number of reversal boxes.
These are rule-based interpretations of wave behaviour. They are not substitutes for a full Wyckoff or VSA analysis of background, location and market structure.
DEVELOPING WAVES
The current wave comment can update dynamically as volume and Renko-box count accumulate.
Developing comments use provisional wording such as:
Demand currently expanding.
Supply currently contracting.
Buying effort currently absorbed.
Possible no supply.
Possible no demand.
A developing classification can change before the wave completes.
PROJECTION BOXES/BRICKS
PulseWire can display projection boxes/bricks while the source-timeframe bar remains open.
Projection does not mean that the script is forecasting future bricks. It means that current price before the time period close has already moved far enough to meet one or more Renko thresholds during the still-open source bar.
For example, on a Daily Renko chart:
intraday price movement can produce provisional Renko bricks;
those bricks can appear before the Daily bar closes;
they can change or disappear before the close;
they become part of the confirmed historical Renko structure only after the source bar is confirmed.
The same principle applies to Weekly and other source intervals.
Live statistics and developing comments should therefore be treated as provisional.
RENKO ASSIGNMENT METHODS
Traditional: Traditional uses a fixed price-unit assignment value.
If the PulseWire chart is set to: Traditional box size = 3, the indicator should normally also be set to the same Renko Assignment Method = Traditional Value = 3
The script cannot automatically read the Renko box-size setting from the PulseWire chart.
ATR: ATR derives the assignment value from Average True Range. The Value input represents the ATR lookback period rather than a fixed number of price points. ATR adapts to volatility, but changing box/brick size make historical box-count comparisons less directly uniform than Traditional sizing.
Part of Price: The inherited Part of Price method calculates close ÷ Value
For example: Value 20 = approximately 5% of price. This is not identical to PulseWire’s Percentage LTP Renko setting.
DISPLAY AND POSITIONING
The script includes adjustable controls for:
up-wave and down-wave histogram colours;
histogram transparency;
pivot statistics placement;
statistics font size;
statistics connector lines;
adjacent statistics-label stacking;
wave-comment font size and line wrapping;
wave-comment vertical and horizontal offsets;
adjacent wave-comment stacking;
comment connector lines;
Permanent Note position and dimensions;
Scenario Key position and dimensions.
Adjacent label and chart leg comment box stacking is optional. Because Pine cannot measure the rendered pixel width or height of labels, collision avoidance is based on bar distance and price-coordinate separation rather than exact screen-pixel boundaries. The user may need to adjust these settings in the user interface panel to avoid overlapping of labels and comment boxes.
SCENARIO KEY
The Scenario Key translates observable effort-and-result combinations into the primary wave comments used by the script.
The table also explains the structural sequences used for:
climax candidates;
confirmed buying and selling climaxes;
possible no supply;
possible no demand;
failed follow-through;
provisional current-wave conclusions.
TIMEFRAME CONSIDERATIONS
Changing the PulseWire chart timeframe changes the source data used to construct the Renko chart.
A Daily Renko structure and a Weekly Renko structure are therefore separate reconstructions, not merely different zoom levels of the same sequence.
Weekly charts may be useful for broad structural background.
Daily charts may provide more responsive directional changes.
Lower source intervals generally provide greater granularity but also produce more noise and more frequent projection box/brick changes.
LIMITATIONS
Renko charts use synthetic price construction.
The apparent Renko box/brick price is not always a directly tradable execution price.
Projection boxes/bricks can repaint while the source bar is open.
Historical calculations can change when:
the chart timeframe changes;
Renko settings change;
indicator assignment settings change;
additional lower-timeframe data becomes available;
PulseWire reconstructs the Renko history.
This indicator should not be used to assume fills at ideal Renko box/brick prices.
Any strategy testing should use confirmed signals and actual market OHLC prices, with appropriate allowance for spread, slippage and execution delay.
The script provides analytical context. It does not provide financial advice or guarantee that any identified climax, test, no-supply condition, no-demand condition or Renko reversal will lead to a profitable trade.
CREDITS
Original Weis Wave Volume script and core calculation: modhelius
This version is an amended and extended fork incorporating:
Renko peak and trough statistics;
wave box counts;
dynamic wave comments;
effort-versus-result classifications;
climax and test sequencing;
no-supply and no-demand analysis;
projection-brick context;
configurable display, positioning and overlap-management controls.
DEVELOPMENT CONTEXT
The extended analytical concept implemented in this fork was developed following James Knox ’s presentation to the "To The Tick" trading group on 20/7/26 combining:
TradeGuider VSA observations;
Wyckoff concepts of effort versus result, climaxes, tests, springs, no supply and no demand;
Weis Wave volume;
Renko changes of direction and structural pivots.
The script’s classifications and dynamic comments were developed to make those relationships more easily visible directly on the Renko chart.
Indicator

Weis Wave Renko - Effort vs ResultABOUT THIS SCRIPT
Weis Wave Renko – Effort vs Result indicator combines Renko price structure with Weis Wave volume analysis to help assess the relationship between market effort and price result.
This script is a fork and substantial extension of the original “Weis Wave Volume” script published by modhelius . Full credit is given to modhelius for the original Weis Wave calculation, Renko assignment methodology and histogram on which this version is based.
PURPOSE
The script was developed to support the following workflow:
Use VSA/Wyckoff analysis to identify the market background and possible exhaustion, absorption or testing activity.
Use Weis Wave volume to compare the effort behind successive buying and selling waves.
Use Renko structure to confirm changes of direction, higher lows, lower highs and sustained reversals.
Use the developing relationship between effort and result to assess whether supply or demand is strengthening, weakening or being absorbed.
Where appropriate, use a confirmed Renko reversal as part of an entry, stop-placement or trade-management process.
The script is intended to support a discretionary Wyckoff/VSA-style analysis of Renko charts.
It does not treat every Renko colour change as a trading signal. Instead, it is designed to help answer questions such as:
Is demand expanding or contracting?
Is supply expanding or contracting?
Is price rising with less apparent selling resistance?
Is price falling because support beneath the market is weak?
Is increased volume producing less price progress?
Does a high-volume wave represent a possible buying or selling climax?
Has a later lower-volume test supported or rejected that interpretation?
The underlying concept is effort versus result:
Effort = cumulative wave volume.
Result = the price movement achieved by the Renko wave.
PIVOT STATISTICS
At each completed Renko peak or trough, the script displays:
Weis Wave volume.
Number of Renko boxes contained in the wave.
The statistics box refers to the completed wave that formed that peak or trough.
The current uncompleted wave can also display a live statistics box. Live statistics remain provisional until the wave is completed by a confirmed change of direction.
WAVE COMMENTS
Each completed wave can receive a separate comment box connected to the centre of the relevant Renko leg.
The comment box may contain three distinct sections:
Structural conclusion.
Primary wave classification from the Scenario Key.
Explanation based on later price and volume behaviour.
For example:
Buying climax confirmed
Demand expanding
Next up-wave retest failed below the climax high on lower volume
The primary wave classification describes the completed wave relative to the previous wave in the same direction.
The structural conclusion may update later as additional waves complete reflecting the dynamic nature of the indicator.
PRIMARY WAVE CLASSIFICATIONS
Up-waves are compared with the preceding completed up-wave:
Demand expanding - More volume accompanied by a longer rise.
Demand contracting - Less volume accompanied by a shorter rise.
Less effort needed to rise - Similar or lower volume produced the same or greater upward progress.
Buying effort absorbed - More volume produced a shorter rise, suggesting that buying effort encountered supply.
Down-waves are compared with the preceding completed down-wave:
Supply expanding - More volume accompanied by a longer decline.
Supply contracting - Less volume accompanied by a shorter decline.
Less support beneath price - Similar or lower volume produced the same or greater downward progress.
Selling effort absorbed - More volume produced a shorter decline, suggesting that selling effort encountered demand.
No material change - Neither volume nor price result changed sufficiently to exceed the selected Material Change Threshold.
CLIMAX ANALYSIS
A large wave is not classified as a confirmed climax merely because it has high volume. The script uses a staged process:
Possible buying climax:
An up-wave becomes a buying-climax candidate.
The next down-wave must produce the selected Renko reversal confirmation, which defaults to three boxes.
The immediately following up-wave is treated as the retest.
The buying climax is confirmed only when that next up-wave: has lower volume than the original climax up-wave; produces a shorter rise; and fails below the climax high. The comment can then state:
Buying climax confirmed -
Next up-wave retest failed below the climax high on lower volume - Possible selling climax
A down-wave becomes a selling-climax candidate. The next up-wave must produce the selected Renko reversal confirmation. The immediately following down-wave is treated as the test. The selling climax is confirmed only when that next down-wave: has lower volume than the original climax down-wave; produces a shorter decline; and holds above the climax low.
The comment can then state:
Selling climax confirmed -
Next down-wave test held above the climax low on lower volume
Only the immediate next corresponding up-wave or down-wave is used for the test. The script does not search through later waves to find a result that retrospectively fits the climax interpretation.
NO SUPPLY AND NO DEMAND
Possible no supply requires a down-wave that:
has lower volume than the previous down-wave;
produces a shorter decline; and
forms a higher low.
The following up-wave must then sustain the selected number of reversal boxes.
Possible no demand requires an up-wave that:
has lower volume than the previous up-wave;
produces a shorter rise; and
forms a lower high.
The following down-wave must then sustain the selected number of reversal boxes.
These are rule-based interpretations of wave behaviour. They are not substitutes for a full Wyckoff or VSA analysis of background, location and market structure.
DEVELOPING WAVES
The current wave comment can update dynamically as volume and Renko-box count accumulate.
Developing comments use provisional wording such as:
Demand currently expanding.
Supply currently contracting.
Buying effort currently absorbed.
Possible no supply.
Possible no demand.
A developing classification can change before the wave completes.
PROJECTION BOXES/BRICKS
PulseWire can display projection boxes/bricks while the source-timeframe bar remains open.
Projection does not mean that the script is forecasting future bricks. It means that current price before the time period close has already moved far enough to meet one or more Renko thresholds during the still-open source bar.
For example, on a Daily Renko chart:
intraday price movement can produce provisional Renko bricks;
those bricks can appear before the Daily bar closes;
they can change or disappear before the close;
they become part of the confirmed historical Renko structure only after the source bar is confirmed.
The same principle applies to Weekly and other source intervals.
Live statistics and developing comments should therefore be treated as provisional.
b]RENKO ASSIGNMENT METHODS
Traditional: Traditional uses a fixed price-unit assignment value.
If the PulseWire chart is set to: Traditional box size = 3, the indicator should normally also be set to the same Renko Assignment Method = Traditional Value = 3
The script cannot automatically read the Renko box-size setting from the PulseWire chart.
ATR: ATR derives the assignment value from Average True Range. The Value input represents the ATR lookback period rather than a fixed number of price points. ATR adapts to volatility, but changing box/brick size make historical box-count comparisons less directly uniform than Traditional sizing.
Part of Price: The inherited Part of Price method calculates close ÷ Value
For example: Value 20 = approximately 5% of price. This is not identical to PulseWire’s Percentage LTP Renko setting.
DISPLAY AND POSITIONING
The script includes adjustable controls for:
up-wave and down-wave histogram colours;
histogram transparency;
pivot statistics placement;
statistics font size;
statistics connector lines;
adjacent statistics-label stacking;
wave-comment font size and line wrapping;
wave-comment vertical and horizontal offsets;
adjacent wave-comment stacking;
comment connector lines;
Permanent Note position and dimensions;
Scenario Key position and dimensions.
Adjacent label and chart leg comment box stacking is optional. Because Pine cannot measure the rendered pixel width or height of labels, collision avoidance is based on bar distance and price-coordinate separation rather than exact screen-pixel boundaries. The user may need to adjust these settings in the user interface panel to avoid overlapping of labels and comment boxes.
SCENARIO KEY
The Scenario Key translates observable effort-and-result combinations into the primary wave comments used by the script.
The table also explains the structural sequences used for:
climax candidates;
confirmed buying and selling climaxes;
possible no supply;
possible no demand;
failed follow-through;
provisional current-wave conclusions.
TIMEFRAME CONSIDERATIONS
Changing the PulseWire chart timeframe changes the source data used to construct the Renko chart.
A Daily Renko structure and a Weekly Renko structure are therefore separate reconstructions, not merely different zoom levels of the same sequence.
Weekly charts may be useful for broad structural background.
Daily charts may provide more responsive directional changes.
Lower source intervals generally provide greater granularity but also produce more noise and more frequent projection box/brick changes.
LIMITATIONS
Renko charts use synthetic price construction.
The apparent Renko box/brick price is not always a directly tradable execution price.
Projection boxes/bricks can repaint while the source bar is open.
Historical calculations can change when:
the chart timeframe changes;
Renko settings change;
indicator assignment settings change;
additional lower-timeframe data becomes available;
PulseWire reconstructs the Renko history.
This indicator should not be used to assume fills at ideal Renko box/brick prices.
Any strategy testing should use confirmed signals and actual market OHLC prices, with appropriate allowance for spread, slippage and execution delay.
The script provides analytical context. It does not provide financial advice or guarantee that any identified climax, test, no-supply condition, no-demand condition or Renko reversal will lead to a profitable trade.
CREDITS
Original Weis Wave Volume script and core calculation: modhelius
This version is an amended and extended fork incorporating:
Renko peak and trough statistics;
wave box counts;
dynamic wave comments;
effort-versus-result classifications;
climax and test sequencing;
no-supply and no-demand analysis;
projection-brick context;
configurable display, positioning and overlap-management controls.
DEVELOPMENT CONTEXT
The extended analytical concept implemented in this fork was developed following James Knox ’s presentation to the "To The Tick" trading group on 20/7/26 combining:
TradeGuider VSA observations;
Wyckoff concepts of effort versus result, climaxes, tests, springs, no supply and no demand;
Weis Wave volume;
Renko changes of direction and structural pivots.
The script’s classifications and dynamic comments were developed to make those relationships more easily visible directly on the Renko chart. Indicator

Wyckoff Architectural Range - erdensedatThe "Wyckoff Architectural Probability Range" is an advanced, non-overlapping consolidation detector and liquidity sweep identification system. Designed to keep charts clean, it dynamically adapts to market volatility and focuses solely on the current active trading range.
Key Features:
- Dynamic ATR-Based Range Width: The indicator automatically adjusts its maximum allowed range width based on the asset's current volatility, ensuring it works seamlessly across both major assets (BTC, ETH) and highly volatile altcoins.
- Non-Overlapping Architecture: Historical ranges are completely removed upon a confirmed breakout, leaving only the active, actionable consolidation zone on your chart.
- Premium & Discount Zones: The range is mathematically divided into Premium (Top 25%), Equilibrium (Middle 50%), and Discount (Bottom 25%) zones. Internal EQ levels (0.4 and 0.6) are also projected.
- Advanced Retest Signals:
> Buy Signal: Prints when price crosses below the Discount EQ and subsequently retests and closes above it.
> Sell Signal: Prints when price crosses above the Premium EQ and subsequently retests and closes below it.
- Smart Liquidity Detection (Spring & UTAD): Automatically identifies and labels wick-based liquidity sweeps outside the range.
- Mean Reversion Probability: A dynamic stats panel calculates the mean reversion probability based on the current deviation from the main Equilibrium level.
- Built-in Alert System: Provides any() alert conditions for Buy/Sell signals, Spring/UTAD sweeps, and Range Breakouts.
- Optional VWAP: Toggle a standard VWAP line on or off directly from the settings for additional confluence.
How to Use:
Use the statistical panel and structural boxes to identify institutional accumulation (Discount Zone) and distribution (Premium Zone). Wait for confirmed retest signals (Triangles) or liquidity sweeps (Spring/UTAD) for high-probability mean-reversion entries.
Disclaimer:
The information and scripts provided in this indicator are for educational and informational purposes only and do not constitute financial advice. Trading cryptocurrencies, forex, and other financial markets involves a high degree of risk and may not be suitable for all investors. Past performance is not indicative of future results. Always conduct your own research and consult with a certified financial advisor before making any trading decisions.
Indicator

Indicator

ShareScope Weiss Wave approximation v1ShareScope Weis Wave Approximation v1
Overview
This indicator is an attempt to reproduce the behaviour of the Weis Wave implementation available in ShareScope using PulseWire Pine Script.
The objective is not to recreate every interpretation of David H. Weis's work, but rather to approximate the wave-construction and cumulative volume behaviour observed in ShareScope's Volume Weis Wave indicator.
Methodology
The indicator organises market volume into directional price waves using a percentage-based ZigZag reversal threshold.
A wave remains active while price continues moving in the current direction. When price reverses by the specified percentage amount, the current wave is completed and a new wave begins. Volume is accumulated throughout the life of each wave and displayed as a cumulative histogram.
Available options include:
• ZigZag Value (%) – percentage reversal required to start a new wave.
• Use High/Low – uses candle extremes rather than closing prices when determining wave reversals.
• Symmetric Calculation – applies proportional reversal mathematics so that up and down reversals are geometrically symmetrical.
The calculation updates dynamically as new price data arrives and completed waves become fixed only after the reversal threshold has been reached.
What This Indicator Is Not
Please note - This is not an ATR-based Weis Wave model.
Some modern Weis Wave implementations use Average True Range (ATR), volatility measurements, adaptive thresholds or other dynamic methods to determine wave reversals. This indicator does not use ATR, volatility bands, adaptive filters, moving averages or volume-based reversal logic.
Wave changes are driven solely by the selected percentage reversal threshold, consistent with the behaviour described for ShareScope's Weis Wave implementation.
Notes
David H. Weis never published a single definitive formula for constructing Weis Waves and various software platforms implement the concept differently. As a result, indicators carrying the "Weis Wave" name may produce substantially different results depending on the wave-construction methodology used.
This script focuses specifically on approximating ShareScope's percentage-based wave model rather than ATR-based, volatility-based or proprietary alternatives.
For research and comparison purposes, several exportable data series are included:
• Wave Direction
• New Wave Trigger
• Active Wave Volume
• ZigZag Value
• Current Swing Extreme
These outputs can be accessed through PulseWire's Data Window and CSV export facilities.
Indicator

Wyckoff Pattern Indicator-AlmostPerfectWyckoff Pattern Indicator — Accumulation & Distribution Phase Tracker
Overview
This indicator automatically identifies **Wyckoff market phases** in real time and plots **BUY, SELL, and HOLD signals** directly on the chart. It works on all timeframes and all instruments (stocks, indices, crypto, forex, commodities).
The Wyckoff Method, developed by Richard Wyckoff in the early 1900s, is one of the most enduring frameworks in technical analysis. It describes how large institutional operators ("Composite Operator") accumulate or distribute positions within a trading range before the next major price move. This indicator brings that logic into a structured, automated form.
How It Works
#### Phase Detection
Every bar is scored across six independent factors:
| Factor | Favours Accumulation | Favours Distribution |
|---|---|---|
| Price position in range | Lower 35% | Upper 65% |
| Long-term trend (EMA 50 vs 200) | Below EMA 200 | Above EMA 200 |
| Consolidation (low realised volatility) | In range | In range |
| Volume dry-up inside range | Yes | Yes |
| RSI | Below 50 | Above 50 |
| MACD histogram slope | Rising | Falling |
A 3-bar consecutive confirmation is required before the phase is declared. This debounce prevents single-bar RSI or MACD wobbles from flipping the phase flag and causing false signals.
Wyckoff Schematic Events Detected
| Label | Event | What it means |
|---|---|---|
| **SC** | Selling Climax | Wide bearish bar on high volume at period low — panic selling exhausted |
| **BC** | Buying Climax | Wide bullish bar on high volume at period high — euphoric buying exhausted |
| **SP** | Spring | Price dips below support then snaps back — a trap for weak hands |
| **UTAD** | Upthrust After Distribution | Price pierces resistance then fails — a bull trap |
| **SOS** | Sign of Strength | Wide up-bar on rising volume breaking short-term resistance |
| **SOW** | Sign of Weakness | Wide down-bar on rising volume breaking short-term support |
| **LPS** | Last Point of Support | Low-volume pullback during mark-up — healthy retest |
| **LPSY** | Last Point of Supply | Low-volume rally during mark-down — weak bounce |
Phase Progression (A → E)
Accumulation Phases
- **Phase A** — Stopping the downtrend (SC, Preliminary Support)
- **Phase B** — Building a cause (secondary tests, range establishing)
- **Phase C** — The spring / shakeout test (potential final trap)
- **Phase D** — Mark-up begins (SOS, LPS sequence)
- **Phase E** — Trending higher out of the trading range
**Distribution Phases**
- **Phase A** — Stopping the uptrend (BC, Preliminary Supply)
- **Phase B** — Building a cause for decline (secondary tests)
- **Phase C** — UTAD / upthrust test (bull trap)
- **Phase D** — Mark-down begins (SOW, LPSY sequence)
- **Phase E** — Trending lower out of the trading range
A label appears **once on the chart at the exact bar the phase transitions** — not on every bar — so the chart stays clean.
Signals
Signals fire only on the **first bar of a new signal state**, not continuously. They will never contradict the phase:
- **▲ BUY** (green) — Fires during Accumulation Phase C or D, on a Spring, or on an LPS. **Completely suppressed during Distribution.**
- **▼ SELL** (red) — Fires during Distribution Phase C or D, on a UTAD, or on an LPSY. **Completely suppressed during Accumulation.**
- **◆ HOLD** (yellow) — Fires when entering Phase B consolidation on either side, or when the range is ambiguous. Means: wait for confirmation.
Supply & Demand Zones
Two shaded bands track the current phase's trading range in real time:
- **Red band (Supply Zone)** — upper boundary of the current phase range
- **Green band (Demand Zone)** — lower boundary of the current phase range
The bands use `plot()` + `fill()` (not static boxes) so they move correctly with any chart pan, zoom, or scroll on all scale modes.
Info Table (top-right)
A live dashboard shows:
- Current major phase (Accumulation / Distribution / Neutral)
- Sub-phase (A through E)
- Active signal
- Volume condition (Climax / Dry-Up / Normal)
- Long-term trend
- RSI reading
- Consolidation / Trending status
- Raw Accumulation and Distribution scores
Settings
| Setting | Default | Description |
|---|---|---|
| Lookback Period | 50 | Bars used to define the trading range high/low |
| Volume Climax Multiplier | 1.8× | How many times avg volume = climax |
| RSI Length | 14 | RSI period |
| Phase Background | On | Blue/red background shading per phase |
| Show Wyckoff Events | On | SC, BC, SP, UTAD, SOS, SOW markers |
| Show Buy/Sell Signals | On | BUY / SELL / HOLD labels |
| Show Phase Labels | On | Phase transition labels on candles |
| Show Supply/Demand Zones | On | Red/green zone bands |
| Show EMAs | On | EMA 20 / 50 / 200 |
Alerts
Nine alert conditions are built in:
- Wyckoff BUY / SELL / HOLD
- Spring detected
- UTAD detected
- Selling Climax / Buying Climax
- Sign of Strength / Sign of Weakness
Important Notes
- This indicator is based on **pattern recognition and scoring**, not exact Wyckoff schematic fitting. It is a decision-support tool, not a mechanical trading system.
- Always confirm signals with **volume context** and **broader market structure** before trading.
- On lower timeframes (1m–5m), increase the Lookback Period to reduce noise.
- On higher timeframes (Daily+), the phase transitions are more reliable and slower-moving.
---
*Based on the Wyckoff Market Cycle framework developed by Richard D. Wyckoff (1873–1934).*
Indicator

Effort vs Result Reaction Map [AGPro Series]Effort vs Result Reaction Map
⚖️ OVERVIEW
Effort vs Result Reaction Map is a premium volume-price reaction indicator built around one of the most practical ideas from Wyckoff and Volume Spread Analysis: effort only matters when it is compared with result.
Many volume tools stop at identifying high volume, relative volume spikes, wide candles or bullish/bearish pressure. This script goes further by asking a more selective question:
Is the market actually getting progress for the effort being spent?
The indicator compares normalized participation effort, ATR-adjusted price progress, close-location quality, directional efficiency and wick behavior. The output is a clean reaction map that highlights two specific event families:
• High effort + poor result
• Low effort + strong result
That makes the script different from a simple volume spike detector, a generic pressure map, a support/resistance drawer or a full Wyckoff phase tool. It is focused on the moment where participation and progress become meaningfully disconnected.
🔬 CORE IDEA
Effort is built from two dimensions:
• Relative volume versus a rolling participation baseline
• Candle spread normalized by ATR
Result is built from:
• Price progress over a configurable number of bars
• Close-location quality in the direction of progress
• ATR-normalized movement quality
Efficiency measures the relationship between those two sides. A bar can show strong volume, but if price does not achieve directional progress, the script treats that as a potential failed-progress reaction. A bar can also move cleanly with surprisingly low effort, which can reveal ease of movement and directional acceptance.
🧭 WHAT MAKES IT DIFFERENT
Most public volume indicators answer one of these questions:
• Is volume high?
• Is relative volume expanding?
• Is price near a volume shelf?
• Is pressure bullish or bearish?
• Is a Wyckoff phase forming?
Effort vs Result Reaction Map answers a narrower and more actionable chart-reading question:
Did the market receive enough result for the effort it spent?
This keeps the tool focused and prevents it from overlapping with broader volume profile, relative volume, delta, session reaction or support/resistance scripts. It does not try to label accumulation, distribution, spring, upthrust or phase structure. Instead, it turns effort/result imbalance into a compact reaction framework that can sit cleanly on any chart.
🎯 SIGNAL TYPES
High Effort + Poor Result
This event appears when participation and spread are unusually active but price progress remains weak. The script studies wick behavior and candle direction to estimate which side attempted progress and failed. The label then expresses the opposite reaction bias:
• Failed Bull Progress
• Failed Bear Progress
Low Effort + Strong Result
This event appears when price makes strong directional progress while effort remains unusually light. This can suggest ease of movement, cleaner directional travel or a lack of opposing participation in that moment:
• Low Effort Rise
• Low Effort Drop
Each event must pass a confidence threshold and a visual cooldown before it appears on the chart. This keeps the output selective and suitable for publication-quality screenshots.
🟦 REACTION BOXES
The script can draw rectangular reaction boxes around qualified events. These boxes are not generic support and resistance zones. They are event-native reaction ranges created only when the effort/result engine finds a meaningful imbalance.
Reaction boxes help the user track whether the market later respects, revisits or ignores the area where effort and result became disconnected. The box length, padding, transparency and minimum confidence are configurable.
This gives the chart more structure without turning the indicator into another broad zone tool.
📊 PANEL
The compact panel reports:
• Effort
• Result
• Efficiency
• Reaction Bias
• Confidence
The first panel row follows the AGPro standard format: one merged blue header row containing only the script name. Panel location, panel theme and panel font size are all configurable from the settings.
⚙️ KEY SETTINGS
Engine
• Effort Baseline Length controls the volume normalization baseline.
• ATR Normalization Length controls spread, progress and object spacing.
• Result Progress Bars defines how far back the result comparison looks.
• Volume Weight In Effort balances relative volume versus candle spread.
Reaction Thresholds
• High Effort Threshold defines unusual participation.
• Low Effort Threshold defines unusually light participation.
• Poor Result Threshold filters failed-progress events.
• Strong Result Threshold filters low-effort strong-result events.
• Minimum Event Confidence controls final event selectivity.
• Visual Cooldown Bars keeps labels and boxes from clustering.
Reaction Boxes
• Box Minimum Confidence keeps boxes more selective than labels if desired.
• Box Extend Right Bars controls how long reaction ranges remain visible.
• Box ATR Padding gives boxes a clean margin around the event candle.
• Box Transparency controls chart softness.
Labels And Markers
• Event labels can be enabled or disabled.
• Label confidence can be shown or hidden; it is hidden by default for cleaner screenshots.
• Label font size defaults to Normal.
• Label offset uses ATR so labels stay away from candle bodies.
• Directional markers provide a minimal visual cue for qualified reactions.
🧠 HOW TO USE
Apply the script to a liquid market and start with the default settings.
Watch for high-effort poor-result labels when volume and spread expand but the market fails to make clean progress. These areas can be useful for studying absorption, failed pushes and short-term reaction shifts.
Watch for low-effort strong-result labels when price moves cleanly without requiring heavy participation. These events can help identify easier directional travel and cleaner movement conditions.
Use the reaction boxes as context zones created by the event itself. They are best read together with structure, trend context, liquidity areas, session behavior or your own discretionary framework.
✅ BEST USE CASES
• Spotting failed directional progress after heavy participation
• Comparing volume effort with actual price result
• Identifying clean movement when result expands on lighter effort
• Studying short-term absorption and efficiency shifts
• Adding Wyckoff/VSA-inspired logic without using a full phase detector
• Keeping a premium chart layout with selective labels and contextual boxes
🧩 LIMITATIONS AND TRANSPARENCY
Effort vs Result Reaction Map is an analytical indicator, not a strategy.
It does not classify full Wyckoff phases, does not draw generic support/resistance, and does not attempt to forecast future price. Its purpose is to organize observed effort/result behavior into a clean visual framework.
Event quality depends on symbol behavior, timeframe, volume reliability and selected thresholds. Markets with unreliable volume data may need more conservative settings.
The script is designed to be selective by default, but users can tune thresholds, confidence, cooldown, label size, panel theme and reaction box visibility to match their preferred chart style.
Indicator

Volume Climax Detector [AGPro Series]Volume Climax Detector
Volume Climax Detector is an advanced volume analytics tool that identifies extreme institutional volume events using a three-filter VSA (Volume Spread Analysis) methodology. Rather than triggering on simple volume multiples, the script combines Volume Z-Score statistics, Spread analysis, and Close Location to isolate genuine climax bars — the kind of exhaustion moves Wyckoff and VSA traders look for at trend tops and bottoms.
🔹 OVERVIEW
Volume alone is a noisy signal. A "high volume bar" on one instrument is a quiet bar on another, and most volume-based indicators either miss real climaxes or fire on every uptick. This script takes a statistical approach: it measures how extreme each bar's volume is relative to its own recent history (Z-Score), confirms the bar structure makes sense (Spread and Close Location), and then classifies the event as a Buying Climax or Selling Climax using trend context — the Wyckoff way.
The result is a small number of high-conviction labels at exactly the places where large participants tend to exhaust themselves: panic buys at tops, panic sells at bottoms, and hidden absorption in between.
🔹 WHAT MAKES IT DIFFERENT
Most volume indicators apply a single threshold (e.g. volume > 2× average) and stop there. This script layers three independent VSA filters, each addressing a different failure mode:
• Volume Z-Score — adapts to the instrument's own volume distribution. A 3σ event on BTC is genuinely rare, regardless of session or timeframe.
• Spread filter — requires the bar's range to exceed its recent average. Eliminates the common false positive of a high-volume bar that barely moved (compression).
• Close Location — requires the close to sit in the upper or lower third of the bar. Separates conviction from indecision.
Beyond detection, two analytics layers set it apart from typical volume tools:
• Reversal Success Tracking — every climax is tracked forward for a configurable window, and the script records whether a meaningful counter-move actually materialised (measured in ATR). The panel shows a live Reversal Rate, so users get honest feedback on how well climaxes have worked on the current symbol and timeframe.
• Magnitude Scoring (1–10) — every climax receives a strength score derived from its Z-Score, making it easy to distinguish routine spikes from truly extreme events (marked with ★).
🔹 METHODOLOGY
1. Volume Statistics
The script computes a rolling mean and standard deviation of volume over a configurable lookback window (default 50 bars). The Z-Score tells how many standard deviations above the mean the current bar is. A reading of 3.0σ or higher (default threshold) corresponds to the top ~0.27% of bars — statistically rare, not just "above average."
2. Triple Filter Gate
A bar qualifies as a potential climax only when:
• Z-Score ≥ threshold (volume anomaly)
• Bar range ≥ spread multiplier × average range (wide spread)
• Close is in the upper 33% (strength) or lower 33% (weakness) of the bar range
3. Wyckoff Classification
• Buying Climax — qualifying bar during an established uptrend. Interpretation: buyers are exhausting themselves; potential topping action.
• Selling Climax — qualifying bar during an established downtrend. Interpretation: sellers are exhausting themselves; potential basing action.
• When no clear trend exists, classification falls back to close location plus bar direction so that sideways regimes still produce meaningful signals.
4. Confluence Grouping
When multiple same-direction climaxes occur close together in time or price, the script collapses them into a single label representing the strongest event in the cluster. This keeps charts readable without losing information — the panel still counts every individual climax.
5. Effort vs Result (optional)
A companion layer flags high-volume bars with unusually narrow spread — the classic VSA "No Demand" and "No Supply" conditions. These often signal hidden absorption ahead of a reversal and are shown as separate labels.
🔹 SIGNALS & ALERTS
Four built-in alert conditions:
• Buying Climax detected
• Selling Climax detected
• Extreme Climax (Z-Score above the extreme threshold, marked with ★)
• No Demand / No Supply divergence
Each alert payload includes the symbol, Z-Score, and magnitude score, ready for automation or review.
🔹 KEY INPUTS
• Volume Lookback (default 50) — rolling window for statistics.
• Z-Score Threshold (default 3.0σ) — minimum statistical extremity. Lower on intraday, higher for premium signals only.
• Extreme Threshold (default 4.0σ) — above this, climaxes are flagged with a ★.
• Spread and Close filters — each can be toggled independently for flexibility across asset classes.
• Trend EMA Length and Sensitivity — control how the script defines uptrend and downtrend, with an ATR-normalised slope check to avoid misclassifying sideways regimes.
• Reversal Window and Threshold — define what counts as a "successful" reversal for the panel statistic.
• Confluence controls — Time-first (default), Price-first, or Strict mode, plus bar and ATR tolerances.
• Climax Zones (optional, default off) — extends each climax bar's range forward as a reaction zone, similar to S/R.
🔹 HOW TO USE
• Start with defaults on any liquid instrument and timeframe. The script adapts to the local volume distribution automatically.
• On highly volatile intraday timeframes, consider raising the Z-Score Threshold to 3.5σ for fewer, cleaner signals. On slower timeframes, the default works well.
• Treat a ★ Extreme Climax as higher-conviction than a plain climax, and pay attention to the Magnitude Score for fine gradation.
• Use the Reversal Rate panel value as a feedback loop — if it is low on your chosen instrument and timeframe, either adjust thresholds or reconsider the setup.
• Combine with your own structural analysis (support/resistance, HTF trend, market structure) for confirmation. The script identifies the event, not the entry.
🔹 LIMITATIONS & TRANSPARENCY
• This is an indicator, not a strategy. It does not generate buy or sell orders and makes no assumption about position sizing or risk management.
• Climaxes are statistical events. They tend to mark inflection points, but no volume pattern resolves into a reversal every time. The built-in Reversal Rate panel value exists precisely to make this honest — users see the actual hit rate on their own chart.
• The script uses publicly available volume data from the chart's exchange. Volume quality varies by venue; results may differ on symbols with thin or unreliable volume reporting.
• Classification depends on trend context. In strongly sideways regimes, the fallback rules may label climaxes differently than a human analyst would; reviewing the Trend EMA and sensitivity inputs helps here.
• Labels are confirmed on bar close (no repaint). Panel counters and the Current Z-Score value update intrabar for live monitoring.
🔹 RISK DISCLOSURE
Trading involves substantial risk of loss. Past behaviour of any signal or statistic does not guarantee future performance. This script is a research and analysis tool — it is not investment advice, a recommendation, or a solicitation to trade. Users are responsible for their own decisions, risk management, and position sizing. Indicator

Wyckoff Accumulation Phase Map [AGPro Series]Wyckoff Accumulation Phase Map
🟢 OVERVIEW
Wyckoff Accumulation Phase Map is the bullish counterpart of the Wyckoff Distribution Phase Map and completes the AGPro Wyckoff structural cycle. It is a retrospective structural mapping tool that locates and labels the seven core accumulation events — Preliminary Support (PS), Selling Climax (SC), Automatic Rally (AR), Secondary Test (ST), Spring, Last Point of Support (LPS) and Sign of Strength (SOS) — only after a bullish Change of Character (CHoCH) confirms that the prior downtrend has structurally broken. The indicator frames the active trading range as a shaded zone, plots SC and AR horizontal references, tracks the current phase (A, B, C, D, E) in a dedicated info panel, and introduces three accumulation-specific layers absent from the distribution companion: a Spring Quality Score, a Cause-to-Effect markup projection and a rolling volume footprint classifier.
🟢 COMPANION TO THE DISTRIBUTION PHASE MAP
This indicator is intentionally designed as the symmetric counterpart of Wyckoff Distribution Phase Map . The two scripts share a unified AGPro visual language and a CHoCH-gated reveal philosophy, but they operate on opposite market regimes and different event sets:
- Distribution map works on uptrends and draws PSY, BC, AR, UT, SOW and LPSY after a bearish CHoCH.
- Accumulation map works on downtrends and draws PS, SC, AR, ST, Spring, LPS and SOS after a bullish CHoCH.
- Distribution projects a potential markdown line from LPSY.
- Accumulation projects a Cause-to-Effect markup target from SOS.
- Accumulation additionally provides a 0-100 Spring Quality Score, which has no structural equivalent in the distribution schematic.
Both tools are standalone. Users running the full AGPro Wyckoff workflow can apply them together for complete cycle coverage, but neither depends on the other.
🟢 WHAT MAKES IT DIFFERENT
Most Wyckoff scripts on PulseWire react to every elevated swing low during a downtrend and label PS / SC / Spring on every modest dip. The result is a noisy chart, often with contradictory events stacked on top of each other. This indicator takes the opposite approach. During a qualified downtrend, the chart remains completely clean. Rolling trackers silently maintain candidate values for SC, PS and AR in memory, while a live Watching row in the panel shows what the engine is currently monitoring. Events are only drawn on the chart after a bullish CHoCH locks the schematic, at which point PS, SC and AR appear together as a confirmed retrospective bundle. ST, Spring, LPS and SOS then populate as post-CHoCH structure unfolds. A multi-tier expiry system closes both incomplete and fully-played-out accumulations, ensuring the active schematic on screen always reflects current market structure and not stale history.
🟢 METHODOLOGY
The engine runs in three coordinated layers.
Layer one qualifies a prior downtrend. A valid Wyckoff accumulation precondition requires four concurrent factors: structural lower highs and lower lows, a minimum ATR-multiple depth from the lookback-window high, a duration sustained across the full lookback window, and price currently located in the lower portion of that window. All four conditions must hold before any candidate can form.
Layer two rolls candidate values during that qualified downtrend. SC candidate is the running lowest pivot low with elevated or climactic volume. PS candidate is the prior elevated swing low that predates the SC. AR candidate is the highest post-SC swing high that remains within a structurally reasonable distance from SC. Candidates are automatically invalidated if price drifts far above the SC without a structural break or if the candidate ages beyond a configurable maximum.
Layer three watches for a bullish Change of Character, defined as the first bar that closes above the qualified AR candidate. On CHoCH confirmation, PS, SC and AR are snapshotted as labeled events, the trading range is drawn, and the state machine advances to forward detection. ST, Spring, LPS and SOS are then detected in sequence using a combination of price-to-SC, price-to-AR and volume-to-average filters. Volume context is computed against a configurable moving-average baseline with separate climactic, elevated and weak thresholds.
The Spring Quality Score blends four components into a 0-100 rating: penetration depth below SC, volume dry-up on the sweep bar, recovery strength measured by close position within the candle range, and close location relative to SC. The Cause-to-Effect projection draws a symmetrical markup target from the SOS bar using the trading range height.
🟢 SIGNALS AND ALERTS
The indicator fires three categories of alerts, all reserved for confirmed structural events:
- CHoCH Confirmation alert triggers when the structural break locks in, including the resolved SC and AR levels.
- Spring alert fires when the Spring is detected, including the Spring Quality score.
- Sign of Strength alert fires when SOS confirms with climactic volume above AR.
No alerts are emitted during the forming phase. This keeps notification volume low and focused on decisive structural moments.
🟢 KEY INPUTS
Core Engine inputs control swing lookback sensitivity, candidate maximum age, post-CHoCH timeout, prior downtrend lookback, minimum downtrend depth in ATR multiples, and the near-lows threshold used in downtrend qualification. Volume Analysis exposes the moving-average length and three separate multipliers for climactic, elevated and weak volume classification. Visual inputs toggle the trading range zone, SC and AR horizontal levels, the CHoCH dashed break line, the Cause-to-Effect projection, the floating summary label and the keep-historical-events mode, with full control over font size and zone transparency. The info panel can be repositioned to six anchor points and switched between dark and light themes.
🟢 HOW TO USE
Apply the indicator to any liquid instrument and any timeframe. During downtrends, observe the Watching row in the panel to monitor the forming SC candidate. When CHoCH prints, the full PS, SC and AR bundle appears and the trading range is shaded. From that point, use the Next Expected row to track what the engine is waiting for. The Confidence score progresses from 70 at CHoCH to 97 at SOS. The Spring Quality Score becomes populated when a Spring is detected and quantifies the character of the sweep. The Volume Footprint row rolls through Range forming, Supply exhausting, Weak hands shaken, Supply absorbed and Demand in control as the schematic matures. The floating summary label on the right edge of the chart provides an at-a-glance status even when the primary event labels are scrolled off to the left. The indicator works standalone but is designed to complement any market structure, order flow or supply-and-demand workflow.
🟢 LIMITATIONS AND TRANSPARENCY
This tool is a pattern-recognition and labeling engine, not a strategy or a trading signal generator. All events are detected retrospectively after their confirming bar has closed plus the swing lookback period. This is by design to eliminate redrawing. The Wyckoff schematic is a framework, not a deterministic forecast. Not every accumulation completes the full seven-event sequence, and markets frequently fail schematics entirely and resume the prior downtrend. The volume analysis assumes reliable reported volume, so thin or fragmented markets may produce weaker classification. The Spring Quality Score and Confidence score are internal heuristics tied to event progression and are not statistical probabilities. The Cause-to-Effect projection is a classical Wyckoff reference line derived from range height, not a mechanical target guaranteed to be reached. Past schematic completions do not predict future market behavior.
🟢 RISK DISCLOSURE
This indicator is published for educational and analytical purposes only. It does not constitute financial advice, a trading recommendation or an investment solicitation. Trading any financial instrument involves substantial risk, including the potential loss of principal. Past performance does not guarantee future results. Users are solely responsible for their own trading decisions, risk management and independent research. Always backtest thoroughly and trade within a risk framework you understand. Indicator

Wyckoff Distribution Phase Map [AGPro Series]Wyckoff Distribution Phase Map
🔹 OVERVIEW
Wyckoff Distribution Phase Map is a retrospective structural mapping tool built on the classic Wyckoff distribution schematic. It locates and labels the six core distribution events — Preliminary Supply (PSY), Buying Climax (BC), Automatic Reaction (AR), Upthrust (UT), Sign of Weakness (SOW) and Last Point of Supply (LPSY) — only after a bearish Change of Character (CHoCH) confirms that the prior uptrend has structurally broken. The indicator frames the active trading range as a shaded zone, plots BC and AR horizontal references, and tracks the phase state (A, B, C, D, E) in a dedicated info panel with a forming-candidate watchlist before confirmation.
🔹 WHAT MAKES IT DIFFERENT
Most Wyckoff scripts on PulseWire label events reactively on every elevated swing, producing dense, often contradictory signals during ranging or trending markets. This indicator takes the opposite approach. During an uptrend, the chart remains completely clean. Rolling trackers silently maintain candidate values for BC, PSY and AR in memory, while a live watchlist row in the panel shows the forming distribution candidate in real time. Events are only drawn on the chart after CHoCH locks the schematic, at which point PSY, BC and AR appear together as a confirmed retrospective bundle. UT, SOW and LPSY then populate as the post-CHoCH structure unfolds. A two-tier expiry system closes both incomplete and fully-played-out distributions, ensuring the active schematic on screen always reflects current market structure — not stale history.
🔹 METHODOLOGY
The engine runs in two coordinated layers. The first layer tracks higher-high and higher-low sequences to qualify an uptrend and rolls candidate values for the Buying Climax (running maximum swing high), Preliminary Supply (last pre-BC elevated swing high) and Automatic Reaction (running minimum after BC). The second layer watches for a structural break below the last confirmed higher-low, which defines the CHoCH. On CHoCH confirmation, the candidate values are snapshotted as BC, PSY and AR labels, the trading range zone is drawn, and the state machine advances to the forward-detection phase. Upthrust, Sign of Weakness and Last Point of Supply are then detected in strict sequence using a combination of price-to-BC, price-to-AR and volume-to-average filters. Volume context is computed against a 20-period moving average baseline with separate climactic, elevated and weak thresholds tuned for crypto and equities alike.
🔹 SIGNALS AND ALERTS
The indicator fires two categories of alerts. The CHoCH Confirmation alert triggers the moment the structural break locks in, including the resolved BC and AR levels. Event alerts fire for each subsequent UT, SOW and LPSY detection. No alert is fired during the forming phase — alerts are reserved for confirmed structural events, keeping notification noise low. A projected markdown line is drawn forward from LPSY using the trading range height as a symmetrical target, purely as a visual reference point rather than a trade signal.
🔹 KEY INPUTS
Core Engine inputs control swing lookback sensitivity, candidate maximum age and the post-CHoCH timeout window. Volume Analysis exposes the moving average length and three multipliers for climactic, elevated and weak volume classification. Visual inputs toggle the trading range zone, BC and AR horizontal levels, the CHoCH dashed break line, the markdown projection, the confidence halo and the floating distribution summary label, with full control over font size, line widths and zone transparency. The info panel can be repositioned to six anchor points and switched between dark and light themes. A Keep Historical Events toggle allows old schematics to remain on the chart after reset, off by default for a clean view.
🔹 HOW TO USE
Apply the indicator to any liquid instrument and any timeframe. During uptrends, observe the Watching row in the panel to monitor the forming BC candidate. When CHoCH prints, the full PSY, BC, AR bundle appears with the trading range shaded. From that point, use the Next Expected row to track what the engine is waiting for. The confidence score progresses from 70 at CHoCH to 97 at LPSY. The floating summary label on the right edge of the chart provides an at-a-glance status even when the primary event labels are scrolled off to the left. The indicator works standalone but is designed to complement any market structure, order flow or supply-and-demand workflow.
🔹 LIMITATIONS AND TRANSPARENCY
This tool is a pattern-recognition and labeling engine, not a strategy or trading signal generator. All events are detected retrospectively after their confirming bar has closed plus the swing lookback period — this is by design to eliminate redrawing. The Wyckoff schematic is a framework, not a deterministic forecast; not every distribution completes the full six-event sequence, and markets frequently fail schematics entirely and resume the prior trend. The volume analysis assumes reliable reported volume, so thin or fragmented markets may produce weaker classification. Confidence scores are internal heuristics tied to event progression, not statistical probabilities. Past schematic completions do not predict future market behavior.
🔹 RISK DISCLOSURE
This indicator is published for educational and analytical purposes only. It does not constitute financial advice, a trading recommendation or an investment solicitation. Trading any financial instrument involves substantial risk, including the potential loss of principal. Past performance does not guarantee future results. Users are solely responsible for their own trading decisions, risk management and independent research. Always backtest thoroughly and trade within a risk framework you understand. Indicator

Market Cycle Projection EngineMarket Cycle Projection Engine
WHAT IT DOES
Market Cycle Projection Engine (MCPE) is a fully original indicator
built in Pine Script v6 that automatically identifies the current
market cycle phase, draws key structural levels, and projects the
next expected price movement all on a single overlay chart.
Unlike traditional indicators that react to price, MCPE analyzes
the internal structure of market behavior using a four-phase cycle
model inspired by Wyckoff methodology, combined with a linear
regression slope engine and volatility expansion/contraction logic.
WHAT MAKES IT ORIGINAL
Most cycle indicators either repaint, rely on subjective drawing,
or require manual input. MCPE does none of these.
The core innovation is a three-factor phase classification engine:
1. Linear Regression Slope measures the true directional
momentum of price over the cycle lookback period, normalized
by ATR to make it comparable across all assets and timeframes.
2. ATR Ratio (Volatility State) compares current ATR to its
own slow average to detect whether volatility is expanding
(trending phase) or contracting (consolidation phase).
3. Price Position in Cycle Range determines whether price
is in the lower 40% (potential accumulation) or upper 60%
(potential distribution) of the cycle's high/low range.
These three factors combine to produce a four-phase classification
that updates automatically on every bar without any repainting.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
THE FOUR CYCLE PHASES
🔵 ACCUMULATION
Slope is flat. Volatility is contracting. Price is in the
lower portion of the cycle range. This is where institutions
quietly build long positions before the markup phase.
Candles colored cyan.
🟢 MARKUP
Slope is rising. Volatility is expanding. This is the
trending upward phase the reward for accumulation patience.
Candles colored green.
🟠 DISTRIBUTION
Slope is flat again. Volatility is contracting. Price is now
in the upper portion of the cycle range. Smart money is
offloading positions to retail buyers.
Candles colored orange.
🔴 MARKDOWN
Slope is falling. Volatility is expanding downward. The
cycle completes its rotation back toward accumulation.
Candles colored red.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
HOW TO USE
Step 1 Read the Phase
Look at the current candle color and the Dashboard panel
(top-right). The Cycle Phase row tells you exactly where the
market is in its current rotation.
Step 2 Check Cycle Position %
The Cycle Position metric shows where price sits within the
current cycle range (0% = bottom, 100% = top).
Below 30% = potential accumulation opportunity.
Above 70% = potential distribution / caution zone.
Step 3 Use the Projection Arrow
When a phase transition occurs, MCPE draws a directional
projection line showing the expected next move. The arrow
length is calculated from the average of the previous two
cycle swing ranges and expressed as a percentage of current
price. This is NOT a price prediction it is a probabilistic
projection based on historical cycle amplitude.
Step 4 Respect the Key Levels
Three horizontal levels are always visible:
Cycle High upper boundary of the current cycle range.
Cycle Low lower boundary of the current cycle range.
Mid the equilibrium level between the two.
Price returning to Mid after an extreme move is a common
mean-reversion setup.
Step 5 Confirm with Volatility and Volume
The Dashboard shows Volatility Status and Volume reading.
Strong signals occur when phase transitions align with
expanding volatility and elevated volume simultaneously.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
CALCULATION LOGIC
Phase Classification:
lr_slope = linreg(close, cycle_len, 0) - linreg(close, cycle_len, 1)
lr_slope_norm = lr_slope / ATR(14)
atr_ratio = ATR(14) / ATR(cycle_len)
price_pos = (close - cycle_low) / cycle_range
Markup : lr_slope_norm > 0.1 AND atr_ratio > 1.1
Markdown : lr_slope_norm < -0.1 AND atr_ratio > 1.1
Accumulation: slope flat AND price_pos < 0.4
Distribution: slope flat AND price_pos >= 0.4
Projection Amplitude (Last Cycle method):
avg_range = (|meso_high - meso_low| + |prev_high - prev_low|) / 2
target = last_pivot + avg_range (bull) or - avg_range (bear)
Volatility Status:
High when ATR(14) > SMA(ATR(14), 20) * 1.3
Cycle Strength (0-100):
Measures how far price deviates from the cycle midpoint,
expressed as a percentage of the total cycle range.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
SETTINGS
Cycle lookback (bars)
Controls how many bars define one full cycle. Increase for
macro analysis, decrease for shorter-term cycles.
Recommended: 50 for daily, 30 for 4H, 20 for 1H.
S/R pivot lookback
Controls how far back the indicator looks for key support
and resistance pivot points.
Projection bars
How many bars into the future the projection line extends.
Projection basis
Three methods available:
Cycle Average uses average of last two swing ranges.
Last Cycle uses 75% of the most recent cycle range.
ATR Multiple uses ATR × 30 as a fixed projection size.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
COMPATIBILITY
Works on all assets Crypto, Forex, Stocks, Indices, Futures.
Works on all timeframes.
Best results on Daily and 4H charts for swing trading.
For intraday use, reduce cycle_len to 20-30.
No repainting. All signals calculated on bar close.
No lookahead bias. No request.security() with lookahead.
No Heikin Ashi or non-standard chart dependency.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
ALERTS INCLUDED
Phase: Accumulation detected
Phase: Markup detected
Phase: Distribution detected
Phase: Markdown detected
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
DISCLAIMER
This indicator is provided for educational and informational
purposes only. It does not constitute financial advice or a
recommendation to buy or sell any asset. Past cycle patterns
do not guarantee future results. Markets are inherently
unpredictable. Always apply your own analysis and use proper
risk management before placing any trade. The author is not
responsible for any trading losses incurred from use of this
indicator.
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ Indicator

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

Indicator

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

Indicator

Absorption ReversalAbsorption Reversal detects institutional absorption patterns at the extremes of a trading range. When price reaches a range boundary, large limit orders from institutional players can "absorb" aggressive market orders — this creates a characteristic candle with high volume and a long rejection wick. The indicator identifies these setups and waits for confirmation before signaling a reversal.
Free & Open Source — no invite-only access, no paywall. Full source code, fully transparent.
## The Concept: What Is Absorption?
In order flow terms, absorption occurs when resting limit orders at a price level absorb incoming market orders without allowing price to break through. This is a core concept in Wyckoff analysis (Effort vs. Result) and institutional trading:
- High volume (Effort) + small price movement / long wick (no Result) = absorption
- The wick shows that price was pushed to the extreme but immediately rejected
- This typically happens at range boundaries where institutional players defend levels
The indicator automates this detection process with quantifiable rules.
## How It Works
The signal generation follows a strict 6-step process:
Step 1 — Range Detection: A Donchian Channel (highest high / lowest low) defines the current trading range boundaries.
Step 2 — Range Width Filter: The channel width must be below its own average — confirming the market is sideways/contracting, not expanding into a trend.
Step 3 — ADX Trend Filter: Wilder's ADX must be below the threshold (default 25) — no strong trend active. Absorption setups work best in range-bound markets.
Step 4 — Proximity Check: Price must be in the upper or lower proximity zone of the range (default: outer 15%). Absorption in the middle of a range is meaningless.
Step 5 — Absorption Bar: A candle that shows:
- Volume spike (default 1.5x average — significant participation)
- Long rejection wick (default 66% of candle range — strong rejection)
- Located at the range extreme (within proximity zone)
Step 6 — Confirmation: Within the next N bars (default 3), a follow-up candle must close back inside the range in the expected reversal direction. No confirmation = no signal.
## Chart Elements
- Range Lines — Donchian Channel upper (red) and lower (green) boundaries
- Proximity Zones — Optional shaded areas showing where absorption signals can trigger
- Orange Diamonds — Absorption bars detected (before confirmation)
- Green/Red Triangles + BUY/SELL Labels — Confirmed reversal signals only
## Dashboard
The real-time dashboard displays:
- Market Regime — Range or Trending (based on ADX + channel width)
- ADX Value — Current trend strength with classification
- Range Width — Contracting or Expanding
- Position — Where price sits in the range (Near High / Near Low / Middle)
- Volume — Current volume relative to average + spike detection
- Pending — Active absorption bars awaiting confirmation (with countdown)
## Settings
Range Detection: Donchian Channel Length (default 20), Proximity Zone % (default 15%)
Trend Filter: ADX Filter ON/OFF (default ON), Range Width Filter ON/OFF (default ON)
Absorption Criteria: Min Wick/Range Ratio (default 0.66), Volume SMA Length (default 20), Volume Spike Multiplier (default 1.5x)
Confirmation: Max Confirmation Bars (default 3)
## Alerts
4 alert conditions:
- Absorption Buy Signal — confirmed bullish reversal at range low
- Absorption Sell Signal — confirmed bearish reversal at range high
- Bullish Absorption Detected — absorption bar found, awaiting confirmation
- Bearish Absorption Detected — absorption bar found, awaiting confirmation
## Best Used For
- Identifying high-probability reversal setups at range boundaries
- Spotting institutional absorption activity via volume + wick analysis
- Range-trading strategies with clear entry signals
- Confluence tool alongside other indicators
- Works on all instruments: stocks, forex, crypto, futures, indices
## Technical Notes
- Pine Script v6 (latest version)
- Signals on confirmed bars only — no repainting
- State-based confirmation logic
- Open source, no external dependencies
- All inputs have tooltips
## Disclaimer
This indicator is for educational and informational purposes only. It does not constitute financial advice. No signals should be interpreted as buy or sell recommendations. Past performance is not indicative of future results. Always implement proper risk management. Trade at your own risk. Indicator

Spring & Upthrust Trap (Zeiierman)█ Overview
Spring & Upthrust Trap (Zeiierman) is a Wyckoff-style “range sweep” indicator that highlights liquidity traps using a simple ZigZag pivot structure. It’s designed to catch the moment price briefly breaks a range boundary to trigger stops, then quickly snaps back into the range (rejection).
⚪ What It Detects
A Spring (Bull) is a downside fakeout. Price sweeps below the range boundary (taking liquidity), then rejects and returns back above the opposite boundary. In other words, it looks bearish for a moment, then flips bullish as the sweep fails.
An Upthrust (Bear) is the upside version. Price sweeps above the range boundary, then rejects and falls back through the opposite boundary. It looks bullish briefly, then flips bearish when that breakout fails.
█ How It Works
⚪ 1) Pivot Extraction (ZigZag Structure)
The script first compresses price into a small set of swing pivots using a ZigZag-style method driven by ZigZag Length. A bar becomes a pivot when it is the highest/lowest point inside the lookback window.
⚪ 2) Pattern Framing (X → A → B → C)
When there are at least four pivots available, the script maps the most recent pivot sequence into four labeled points:
X and A define the range boundaries (the box height is based on |A − X|)
B is the sweep pivot (the “fakeout” that breaks a boundary)
C is the rejection/snapback pivot that confirms the sweep failed
This is the minimum structure needed to define a trap without overfitting.
⚪ 3) Sweep Sizing (Filtering Noise vs Real Sweeps)
Not all boundary breaks are meaningful. The script measures sweep magnitude relative to the range size:
Sweep Fraction: |B − X| / |A − X|
This does two things:
Filters tiny pokes through a boundary (often random noise)
Filters extremely large breaks that are more likely to be true trend continuation rather than a trap
This is controlled by:
Min Sweep (minimum required violation)
Max Sweep (maximum allowed violation)
⚪ 4) Spring vs Upthrust Logic (Directional Trap Detection)
The script then decides which trap is forming:
Spring (Bull)
A downside sweep that fails: price breaks below the boundary, then returns strongly back through the opposite side.
Upthrust (Bear)
An upside sweep that fails: price breaks above the boundary, then returns strongly back through the opposite side.
█ How to Use
⚪ Interpreting a Spring (Bull)
A Spring is best treated as a failed breakdown. The sweep suggests stops were taken under the range, but the snapback implies that the market rejected lower prices.
Common behaviors after a good Spring:
fast reclaim back into the range
retest of the boundary from above (acceptance test)
continuation away from the sweep area if buyers remain in control
⚪ Interpreting an Upthrust (Bear)
An Upthrust is a failed breakout. Stops get taken above the range, but the price cannot hold outside and collapses back into/through the structure.
Common behaviors after a good Upthrust:
rejection wick and rapid return
retest of the boundary from below
continuation downward if sellers remain in control
█ Settings
ZigZag Length – pivot sensitivity. Higher = smoother, fewer signals. Lower = more pivots, more traps.
Show Patterns – detect Springs only, Upthrusts only, or both.
Min Sweep – minimum sweep size relative to range height (filters micro sweeps).
Max Sweep – maximum sweep size relative to range height (filters “real breaks”).
Confirm Pad – extra snapback requirement beyond the boundary (adds confirmation).
-----------------
Disclaimer
The content provided in my scripts, indicators, ideas, algorithms, and systems is for educational and informational purposes only. It does not constitute financial advice, investment recommendations, or a solicitation to buy or sell any financial instruments. I will not accept liability for any loss or damage, including without limitation any loss of profit, which may arise directly or indirectly from the use of or reliance on such information.
All investments involve risk, and the past performance of a security, industry, sector, market, financial product, trading strategy, backtest, or individual's trading does not guarantee future results or returns. Investors are fully responsible for any investment decisions they make. Such decisions should be based solely on an evaluation of their financial circumstances, investment objectives, risk tolerance, and liquidity needs.
Indicator

Kalman Absorption/Distribution Tracker 3-State EKFQuant-Grade Institutional Flow: 3-State EKF Absorption Tracker
SUMMARY
An advanced, open-source implementation of a 3-State Extended Kalman Filter (EKF) designed to track institutional Order Flow. By analyzing 1-second intrabar microstructure data, this script estimates the true Position, Velocity, and Volatility of the Cumulative Volume Delta (CVD), revealing hidden Absorption and Distribution events in real-time.
INTRODUCTION: THE SIGNAL AMIDST THE NOISE
In the world of technical analysis, noise is the enemy. Traditional indicators rely on Moving Averages (SMA, EMA) to smooth out price and volume data. The problem is the "Lag vs. Noise" paradox: to get a smooth signal, you must accept lag; to get a fast signal, you must accept noise.
This indicator solves that paradox by introducing aerospace-grade mathematics to the PulseWire community: The 3-State Extended Kalman Filter (EKF).
Unlike moving averages that blindly average past data, a Kalman Filter is a probabilistic state-space model. It constantly predicts where the order flow "should" be, compares it to the actual measurement, and updates its internal model based on the calculated uncertainty of the market.
This script is not just another volume oscillator. It is a full microstructure analysis engine that digests intrabar data (down to 1-second resolution) to track the true intent of "Smart Money" while filtering out the noise of retail chop.
THE INNOVATION: WHY 3 STATES?
Most Kalman Filters found in public libraries are "1-State" (tracking price only) or occasionally "2-State" (tracking price and velocity). This script introduces a highly advanced 3-State EKF.
The filter tracks three distinct variables simultaneously in a feedback loop:
State 1: Position (The True CVD)
This is the noise-filtered estimate of the Cumulative Volume Delta. It represents the actual inventory accumulation of aggressive buyers versus sellers, stripped of random noise.
State 2: Velocity (The Momentum)
This tracks the rate of change of the order flow. Is buying accelerating? Is selling pressure fading even as price drops? This provides a leading signal before the cumulative value even turns.
State 3: Volatility (The Adaptive Regime)
This is the game-changer. The filter estimates the current volatility of the order flow (Log-Volatility). In high-volatility environments (like news events), the filter automatically widens its uncertainty bands (Covariance) and reacts faster. In low-volatility environments (chop), it tightens up and ignores minor fluctuations.
THE LOGIC: DETECTING ABSORPTION AND DISTRIBUTION
The core philosophy of this indicator is based on Wyckoff Logic: Effort vs. Result.
-- Effort: Represented by the CVD (Buying/Selling pressure).
-- Result: Represented by Price Movement.
When these two diverge, we have an actionable signal. The script uses the EKF Velocity state to detect these moments:
Absorption (Bullish)
This occurs when the EKF detects high negative Velocity (aggressive selling), but Price refuses to drop. The "Smart Money" is absorbing the sell orders via limit buys. The indicator highlights this as a Blue Event in the dashboard.
Distribution (Bearish)
This occurs when the EKF detects high positive Velocity (aggressive buying), but Price refuses to rise. Limit sellers are capping the market. The indicator highlights this as an Orange Event.
TECHNICAL DEEP DIVE: UNDER THE HOOD
For the developers and quants, here is how the Pine Script is architected using the "type" and "method" features of Pine Script v5.
1. Data Ingestion (Microstructure)
The script uses "request.security_lower_tf" to pull intrabar data regardless of your chart timeframe. This allows the script to see "inside" the bar. A 5-minute candle might look green, but the microstructure might reveal that 80% of the volume was selling absorption at the wick. This script sees that.
2. Tick Classification
Standard CVD assumes that if Price Close is greater than Price Open, all volume is buying. This is often flawed. This script offers three modes of tick handling, including a "High-Low Distribution" method that statistically apportions volume based on where the tick closed relative to its high and low.
3. The EKF Mathematics
The script implements the standard Extended Kalman Filter equations manually. It calculates the Jacobian matrix to handle the non-linear relationship between volatility and price. The "Process Noise Matrix" (Q) is dynamically scaled by the Volatility State. This means the mathematics of the indicator literally "breathe" with the market conditions—expanding during expansion and contracting during consolidation.
THE DASHBOARD & VISUALS:
The indicator features a professional-grade HUD (Heads Up Display) located on the chart table.
-- EKF State Vector: Displays the real-time Position, Velocity, and Volatility values derived from the matrix.
-- Ease of Movement (Wyckoff): Calculates how much price moves per 1,000 contracts of CVD. For example, if Price moves +5 points per 1k Buy CVD, but only -2 points per 1k Sell CVD, the "Path of Least Resistance" is clearly UP.
-- Session State: Tracks cumulative confirmed Bullish vs. Bearish events for Today, Yesterday, and the Day Before (3-Day Profile).
-- Bias Summary: An algorithmic conclusion telling you if the day is "Confirmed Bullish," "Accumulating," or "Neutral."
HOW TO TRADE THIS INDICATOR
Strategy A: The Reversal (Absorption Play)
Look for price making a Lower Low.
Look for the EKF Velocity (Histogram) to be Deep Red (High Selling Pressure).
Watch the Dashboard "Absorption" count increase.
SIGNAL: When EKF Velocity crosses back toward zero and turns grey/green, the absorption is complete. This indicates sellers are exhausted and limit buyers have control.
Strategy B: The Trend Continuation (Ease of Movement)
Check the Dashboard "Ease of Movement" section.
If "Price per +1K CVD" is significantly higher than "Price per -1K CVD", buyers are efficient.
Wait for a pullback where EKF Velocity hits the "Neutral Zone" (Gray).
SIGNAL: Enter Long when Velocity ticks positive again, aligning with the dominant Ease of Movement stats.
CONFIGURATION GUIDE:
Because this is a quant-grade tool, the settings allow for fine-tuning the physics of the filter.
-- Velocity Decay: Controls how fast momentum resets to zero. Set high (0.98) for trending markets, or lower (0.85) for mean-reverting chop.
-- Volatility Persistence: Controls how "sticky" volatility regimes are.
-- Process Noise: Increase this if the filter feels too laggy; decrease it if the filter feels too jittery (noisy).
-- Measurement Noise: Increase this to trust the Mathematical Model more than the Price Data (smoother output).
WHY OPEN SOURCE?
Complex statistical filtering is often sold behind closed doors in expensive "Black Box" algorithms. By releasing this 3-State EKF open source, the goal is to raise the standard of development on PulseWire.
I encourage the community to inspect the code, specifically the "ekf_update_3state" function, to understand how matrix operations can be simulated in Pine Script to create adaptive, self-correcting indicators. And also update me for improvements.
DISCLAIMER:
This tool analyzes microstructure volume data. It requires a subscription plan that supports Intrabar inspection (Premium/Pro recommended for best results). Past performance of the Kalman Filter logic does not guarantee future results. Volume analysis is subjective and should be used as part of a comprehensive strategy.
SUGGESTED SETTINGS
-- Timeframe: Works best on 1m, 3m, or 5m charts (Intrabar data is fetched from 1S).
-- Asset Class: Highly effective on Futures (ES, NQ, BTC) and high-volume Forex/Crypto pairs where volume data is reliable.
-- Background: Dark mode recommended for Dashboard visibility.
WHAT IS A KALMAN FILTER?
Imagine driving a car into a tunnel where your GPS signal is lost.
Prediction: Your car knows its last speed (Velocity) and position. It predicts where you are every second inside the tunnel.
Update: When you exit the tunnel, the GPS connects again. The system compares where it thought you were versus where the satellite says you are.
Correction: It corrects your position and updates its estimate of your speed.
Now apply this to trading:
-- The Tunnel: Market Noise, wicks, and Fake-outs.
-- The Car: The True Market Trend.
-- This Indicator: The navigation system that tells you where the market actually is, ignoring the noise of the tunnel.
Enjoy the indicator and trade safe!
Dr. Jay Desai
(Investment Management & Derivatives Area, Gujarat University)
Indicator

WYCKOFF_SHARED_LIBLibrary "WYCKOFF_SHARED_LIB"
EPS()
nz0(x)
Parameters:
x (float)
safe_div(num, den)
Parameters:
num (float)
den (float)
safe_div_eps(num, den)
Parameters:
num (float)
den (float)
safe_ratio(a, b)
Parameters:
a (float)
b (float)
clamp(x, lo, hi)
Parameters:
x (float)
lo (float)
hi (float)
wave_dir(startPx, endPx)
Parameters:
startPx (float)
endPx (float)
wave_amp(startPx, endPx)
Parameters:
startPx (float)
endPx (float)
wave_amp_atr(amp, atr)
Parameters:
amp (float)
atr (float)
wave_speed(ampATR, lenBars)
Parameters:
ampATR (float)
lenBars (int)
wave_eff(amp, path)
Parameters:
amp (float)
path (float)
build_wave_metrics(dir, lenBars, startPx, endPx, ampATR, speed, eff, volRel, epr)
Parameters:
dir (int)
lenBars (int)
startPx (float)
endPx (float)
ampATR (float)
speed (float)
eff (float)
volRel (float)
epr (float)
compare_waves(w0, w1)
Parameters:
w0 (WaveMetrics)
w1 (WaveMetrics)
strengthening_same_dir(c)
Parameters:
c (WaveCompare)
weakening_same_dir(c)
Parameters:
c (WaveCompare)
evr_by_waves(volSum0, ampATR0, volSum1, ampATR1)
Parameters:
volSum0 (float)
ampATR0 (float)
volSum1 (float)
ampATR1 (float)
WaveMetrics
Fields:
dir (series int)
lenBars (series int)
startPx (series float)
endPx (series float)
amp (series float)
ampATR (series float)
speed (series float)
eff (series float)
volRel (series float)
effortPerResult (series float)
WaveCompare
Fields:
amp_ratio (series float)
speed_ratio (series float)
eff_ratio (series float)
volRel_ratio (series float)
epr_ratio (series float)
EVR
Fields:
state (series int) Library

Wyckoff v1.3: Effort vs ResultThis script helps a trader know the actions of smart money - clearly differentiating between valid and in-valid price moves. It is a not script that'll give you buy/sell signals, but in a very Wyckoff way give you the essentials of tape reading of the current chart.
Code Algo: From current candle to previous N candles (N is variable), it calculates a parameter called R = (high-low)/volume; for each candle, hence forming a distribution of R's. Hence, parameter R takes into account the price-volume relationship together, combined which is paramount for Wyckoff reading. Then it calculates mean (M) and standard deviation (sigma) of all those R's. Hence, M denotes the regular price movements expected from a given volume, which will also be a 'valid' move. Then we calculate ranges M-x*sigma and M+x*sigma (where x is a constant) for 3 values of x: 0.5, 1.5 and 2.2. These ranges give us deviations from M, split into 3 different levels. 1st range (E1) is closer to M, 2nd range (E2) is slightly more deviated from M, 3rd range (E3) includes large deviations and 4th range (E4) gives us largest deviations (highest Wyckoff invalidation). Henceforth, we can assess the current candles R value and check which range does it fall into. This gives us the validation degree of this current candle's move in perspective of how the market behaved previously. We assign symbol '+' for this current candle if R>M (hence showing exhaustion) or '-' if R Indicator

Effort-Result Divergence [Interakktive]The Effort-Result Divergence (ERD) measures whether volume effort is producing proportional price result. It quantifies the classic Wyckoff principle: when price moves easily, momentum is real; when price struggles despite heavy volume, absorption is occurring.
Think of ERD as "energy efficiency" for price movement — green means price is gliding, red means price is grinding.
█ WHAT IT DOES
• Measures volume EFFORT relative to average volume
• Measures price RESULT relative to ATR-normalized movement
• Computes ERD = Result minus Effort (each scaled 0-100)
• Flags statistical divergences via Z-score analysis
• Absorption events: high effort, low result (negative ERD)
• Vacuum events: low effort, high result (positive ERD)
█ WHAT IT DOES NOT DO
• NO buy/sell signals
• NO entry/exit recommendations
• NO alerts (v1 is educational only)
• NO performance claims or guarantees
This is a context tool for understanding market participation quality.
█ HOW IT WORKS
The ERD analyzes two dimensions of market activity and compares them.
EFFORT (Volume Intensity)
Compares current volume to a moving average baseline:
Effort Ratio = Volume ÷ SMA(Volume, Length)
Effort Score = clamp(100 × Effort Ratio ÷ Effort Cap)
High effort means above-average volume participation.
Low effort means below-average volume participation.
RESULT (Price Efficiency)
Measures how much price moved relative to expected volatility:
Result Ratio = |Close − Previous Close| ÷ ATR
Result Score = clamp(100 × Result Ratio ÷ Result Cap)
High result means price moved significantly for the volatility regime.
Low result means price barely moved despite market activity.
ERD SCORE
ERD = Result − Effort
• Positive ERD: Result exceeds effort → price moved easily (vacuum/thin liquidity)
• Negative ERD: Effort exceeds result → price struggled (absorption/accumulation)
• Near zero: Balanced effort-to-result relationship
STATISTICAL DIVERGENCE DETECTION
Z-score analysis identifies statistically significant extremes:
Z = (ERD − Mean) ÷ StdDev
• Absorption Event: Z ≤ −threshold (extreme negative ERD)
• Vacuum Event: Z ≥ +threshold (extreme positive ERD)
█ INTERPRETATION
GREEN BARS (Positive ERD)
Price moved with relatively little volume effort. This suggests:
• Thin liquidity / low resistance
• Strong directional interest
• Momentum is "real" — not forced
RED BARS (Negative ERD)
Heavy volume was used but price barely moved. This suggests:
• Absorption / accumulation occurring
• Large players opposing the move
• Inefficiency — someone is working hard for little result
THE KEY INSIGHT
When you see:
• Down moves = high effort (red spikes)
• Up moves = low effort (green bars)
This means: It's easier for price to go up than down.
That is asymmetric strength — classic bullish pressure.
The reverse (red on up moves, green on down moves) signals bearish pressure.
PRACTICAL RULES
Without any other indicators:
• Avoid shorting when ERD is mostly green and red spikes appear only on down candles
• Be cautious buying when ERD turns red on up candles (signals absorption of buying pressure)
• Vacuum events (extreme green) often precede continuation or pause — not violent reversal
• Absorption events (extreme red) often precede reversals or range formation
█ VOLUME DATA NOTE
This indicator uses the volume variable which represents:
• Exchange volume on stocks and futures
• Tick volume on Forex and CFD instruments
Tick volume is a proxy for activity, not actual exchange volume. The indicator remains useful on Forex as relative volume comparisons are still meaningful, but interpretation should account for this limitation.
█ INPUTS
Core Settings
• Volume Average Length: Baseline period for effort calculation (default: 20)
• ATR Length: Volatility normalization period (default: 14)
• Effort Cap: Volume ratio that maps to 100% effort (default: 3.0)
• Result Cap: ATR multiple that maps to 100% result (default: 1.0)
Divergence Detection
• Z-Score Lookback: Statistical analysis window (default: 100)
• Z-Score Threshold: Standard deviations for event flags (default: 2.0)
Visual Settings
• Show ERD Histogram: Toggle main display
• Show Zero Line: Toggle reference line
• Show Divergence Markers: Toggle event circles
• Show Effort/Result Lines: Display component breakdown
█ ORIGINALITY
While Wyckoff's effort-versus-result principle is well-established, existing implementations are typically:
• Purely visual with no quantification
• Pattern-based requiring subjective interpretation
• Not statistically normalized for comparison across instruments
ERD is original because it:
1. Normalizes both effort and result to 0-100 scales for direct comparison
2. Uses ATR for result normalization (adapts to volatility regime)
3. Applies statistical Z-score for objective divergence detection
4. Provides quantified output suitable for systematic analysis
█ DATA WINDOW EXPORTS
When enabled, the following values are exported:
• Effort (0-100)
• Result (0-100)
• ERD Score
• Z-Score
• Absorption Event (1/0)
• Vacuum Event (1/0)
█ SUITABLE MARKETS
Works on: Stocks, Futures, Forex, Crypto
Best on: Instruments with reliable volume data (stocks, futures, crypto)
Timeframes: All timeframes — interpretation adapts accordingly
█ RELATED
• Market Efficiency Ratio — measures price path efficiency
• Wyckoff Volume Spread Analysis — conceptual foundation
█ DISCLAIMER
This indicator is for educational purposes only. It does not constitute financial advice. Past performance does not guarantee future results. Always conduct your own analysis before making trading decisions. Indicator

PRICE ACTION TRAKKERThis indicator isolates the core price-phase engine from the full Price Action Tracker (PAT) system.
It identifies and visualises structural phases of price, including:
Upper phase boundary (dynamic resistance)
Lower phase boundary (dynamic support)
Phase average (mean-reversion anchor)
Pivot markers (LPH, LPL, oLPH, oLPL)
The phase engine dynamically adapts to evolving market structure using pivot behaviour and structural breaks. This creates a real-time visual map of how price is organising itself — independent of time-based indicators and without the lag associated with classical moving averages.
This version focuses exclusively on price action structure, making it clean, fast, and ideal as a core tool on its own.
However, it is also designed as a foundation for more advanced analysis and will expand over time as additional modules are released.
This phase engine works exceptionally well in combination with my other indicators, such as moving-average structure tools, volume-weighted frameworks, and trend-strength models. Together, they provide a layered view of market behaviour:
phase structure → trend bias → volume confirmation → entry logic.
This makes the indicator valuable for:
Intra-day and swing traders
Wyckoff and liquidity-based traders
Mean-reversion and range-trading strategies
Understanding where accumulation/distribution behaviour is forming
Identifying when a phase is likely ending or breaking
Future updates will add modular expansion paths (trend scoring, VWAP phase weighting, multi-phase confluence, and signal logic), while maintaining the simplicity and reliability of this core engine.
Works Best With:
This indicator is part of a broader toolkit designed to analyse structure, trend, and behaviour.
When used alongside my other published tools — such as trend-strength MAs, VWMA frameworks, and higher-timeframe bias indicators — it provides a complete, multi-layered view of market conditions. Indicator
