Price tells you where the market went. Also, volume tells you how hard each side pushed. Buy Sell Pressure Oscillator is a buying and selling pressure indicator TradingView traders can add to any chart. Indeed, it splits each bar’s volume into estimated buy and sell halves using where the close sits inside the range. Then it smooths the difference and normalises it against average volume, on a scale near -100 to 100.
It is free and open source. Still, you can add it to any chart from the Buy Sell Pressure Oscillator script page on TradingView, and the full Pine source is published there for you to read.
What Buy Sell Pressure Oscillator plots on the price chart
Despite the name, this script draws on the price chart rather than a separate pane. Thus, it plots the 9-bar reclaim EMA, tinted teal under buy pressure and red under sell pressure. Arrow shapes mark entries in three stacked layers for a glow effect, each tagged BSP. Hence, bars paint whenever pressure passes the strong threshold, and a faint background tint shows the live regime. An eight-row dashboard sits top right. Next, it prints the pressure state, the BSP value, buy volume percentage, the strong flag, ATR, position and bars since the last signal.

How Buy Sell Pressure Oscillator is built
Splitting volume into buy and sell
Each bar starts with one ratio. Then, the script takes close minus low, then divides by the bar’s range. A close on the high scores 1.0. Yet, a close on the low scores 0.0. A doji with no range defaults to 0.5, which keeps the math safe on flat bars.
That ratio splits the bar’s volume. Truly, buy volume equals volume times the ratio. Sell volume takes the rest. Plainly, so a bar closing in the top quarter of its range assigns most of its volume to buyers. This is the classic close-location estimate, not tape data.
The script then subtracts sell volume from buy volume and smooths the result with a 14-bar EMA, adjustable from 2 to 60. Finally it divides by the 20-bar volume average and multiplies by 100. That normalisation is what makes the reading comparable across sessions and symbols.
Regimes, entries and gates
The sign of the oscillator sets the regime. Positive means buy pressure. Negative means sell pressure. Also, absolute readings at or above the Strong Pressure input, 25 by default with a 5 to 90 range, flag a strong regime and paint the bar.
Two entry modes ship in the box. Indeed, the default mode waits for the close to cross the 9-bar reclaim EMA in the direction the pressure regime already set. Switch on Zero-Cross-Only and the script fires on the oscillator crossing zero instead. Still, that mode gives fewer and later signals. A separate Require Strong Pressure switch blocks everything under the 25 threshold.
Four gates then filter what remains. Thus, an optional session window, off by default at 0000-2400, restricts trading hours. A position state stops repeat signals in the same direction. Hence, a 5-bar cooldown, adjustable to 40, spaces entries out. And every signal waits for barstate.isconfirmed, so arrows print after the close and never repaint.
How to read the signals
Read the BSP number first. It answers one question: over the last 14 bars, how much net buying pressure has built up relative to normal volume? A value of 30 means net buy volume runs at roughly 30 percent of the 20-bar average volume. Next, near zero, both sides trade in balance.
Use the arrow as a timing tool, not a bias tool. Then, the bias comes from the oscillator sign. The arrow only marks the moment price reclaimed the 9-bar EMA in that same direction. Yet, those two jobs are deliberately separate, which is why the default mode produces more entries than zero-cross mode.
Check the Buy Vol row for the current bar. Truly, it shows the close position as a percentage, so 80 percent means the bar closed in the top fifth of its range. One strong bar does not move the smoothed line much. Plainly, a run of them does, and that run is what turns the regime.

Every Buy Sell Pressure Oscillator setting explained
The script exposes 16 inputs, grouped in the settings panel exactly as shown below. Defaults are the published values.
Pressure
| Setting | What it does | Default | Range |
|---|---|---|---|
| Pressure Smoothing | EMA length applied to net buy-minus-sell volume. | 14 | 2 to 60 |
| Volume Norm Length | Average volume the pressure is normalised by. | 20 | 5 to 100 |
| Strong Pressure | |oscillator| above this = strong-pressure regime. | 25.0 | 5.0 to 90.0 |
| ATR Length | Sets the atr length used in the calculation. | 14 | 5 to 50 |
Signal Logic
| Setting | What it does | Default | Range |
|---|---|---|---|
| Entry Reclaim EMA | After pressure sets a bias, a close-cross of this EMA in that direction times the entry. | 9 | 2 to 50 |
| Zero-Cross-Only Mode | On = fire on the pressure zero-line cross. Off = EMA reclaim inside the active pressure bias (more signals). | off | on / off |
| Require Strong Pressure | On = only trade when |oscillator| exceeds the strong threshold. | off | on / off |
| Cooldown Bars | Sets the cooldown bars used in the calculation. | 5 | 1 to 40 |
Filters
| Setting | What it does | Default | Range |
|---|---|---|---|
| Restrict to Session | Toggles restrict to session on the chart. | off | on / off |
| Session Window | Controls session window. | 0000-2400 |
Visual
| Setting | What it does | Default | Range |
|---|---|---|---|
| Show Dashboard | Toggles show dashboard on the chart. | on | on / off |
| Show 3-Layer Glow | Toggles show 3-layer glow on the chart. | on | on / off |
| Show Reclaim EMA | Toggles show reclaim ema on the chart. | on | on / off |
| Buy Color | Colour used for buy color. | #2ec4b6 | |
| Sell Color | Colour used for sell color. | #ff5a5f | |
| Dashboard BG | Colour used for dashboard bg. | color.new(#06161a, 14) |

Alerts built into Buy Sell Pressure Oscillator
The script ships 15 alert conditions. Also, open the alert dialog on the chart, pick the indicator as the condition source, then choose the event you want. Alerts fire on the close of the bar, so they follow the same confirmed-bar rule the on-chart signals use.
- BSP Buy
- BSP Sell
- BSP Any Signal
- BSP Zero Up
- BSP Zero Down
- BSP Strong Buy
- BSP Strong Sell
- BSP EMA Up
- BSP EMA Down
- BSP Bull Regime
- BSP Bear Regime
- BSP Any Zero Cross
Other markets and timeframes
Every threshold here stays relative, since the oscillator divides by the instrument’s own 20-bar average volume. Indeed, the default 25 setting therefore transfers to crypto, indices, futures and equities without retuning. Volume quality is the real variable. Still, spot forex has no central exchange, so TradingView reports broker tick volume, meaning a count of price updates rather than traded size. It correlates with real activity but is not the same thing. On symbols with no volume feed at all, the oscillator flatlines at zero.

Limitations worth knowing
The buy and sell split is an estimate from the close position, not real order flow. Thus, it cannot see the tape, the bid, the ask or aggressor side. A bar that closes high after heavy selling absorption still scores as buy volume.
The tool sets bias and timing only. Hence, it ships no stops, no targets and no sizing. It never calls request.security either, so there is no higher-timeframe confirmation. Next, everything you see comes from your current chart timeframe.
The 14-bar EMA lags by design, so the regime flips late after sharp reversals. In quiet ranges the oscillator can hover near zero and flip sign often. Raising Strong Pressure or switching on Require Strong Pressure cuts that noise, but it also removes valid early entries.
Get Buy Sell Pressure Oscillator on TradingView
Open Buy Sell Pressure Oscillator on TradingView
If you also trade MetaTrader, the MT4 and MT5 indicator library is available below.
Get the complete indicator library
One email unlocks the full MT4 and MT5 indicator library. Then, this TradingView script stays free on TradingView – the button above adds it to your chart.
Using it alongside MetaTrader
Adding a script on TradingView takes one click, so there is no install step here. Yet, if you want the same idea on MetaTrader, the MT4 and MT5 indicator installation guide walks through copying files into the data folder and attaching them to a chart. You can also browse the full MetaTrader indicator library, the MT4 indicators section, or the other free TradingView scripts published on this profile. For related chart tools see the MT5 indicators section and the forex trading strategies guides.
External references
- Money flow index on Wikipedia
- Stochastic Oscillator at Investopedia
- CandleVolume at StockCharts ChartSchool
Frequently asked questions
Does the Buy Sell Pressure Oscillator repaint?
No. Truly, signals gate on barstate.isconfirmed, so an arrow prints only once the bar has closed. The dashboard values update live inside the forming bar, which is expected. Plainly, printed arrows stay where they are.
Why is it drawn on the price chart and not a sub-pane?
The script declares overlay true on purpose. Also, the oscillator value drives the bar colors, the background tint, the EMA color and the dashboard readout instead of a separate pane plot. That keeps price and pressure in one view, so you read the reclaim cross against the same candles.
Does it work on forex where volume is not real?
It runs, with a caveat. Indeed, spot forex feeds report broker tick volume, which counts price updates rather than contracts. That proxy tracks activity well enough for relative comparisons on one symbol. Still, treat readings across different brokers or symbols with more care.
What is the difference between the two signal modes?
Default mode needs the pressure sign to set a bias, then waits for a close cross of the 9-bar EMA in that direction. Thus, zero-Cross-Only mode ignores the EMA and fires when the oscillator itself crosses zero. The first mode gives more and earlier entries. Hence, the second gives fewer and slower ones.
How much should I rely on this indicator?
Treat it as one input, not a decision. Next, it is a chart analysis tool, not trading advice. Test it on your own markets and timeframes before relying on it. Results are not guaranteed; past performance is not indicative of future results.
