All indicators

Balance of Power (BOP)

Measures where each bar closed relative to its open, as a share of its range, and smooths it with a warmup-corrected exponential average.

BTCUSD1h
Fixed data to Oct 6, 2026, UTC
Loading the chart

Balance of Power reads each bar as a contest between buyers and sellers. The raw value is (close - open) / (high - low): +1 when the bar opened at its low and closed at its high, -1 for the reverse, and 0 for a bar that closed where it opened. A bar with no range at all reads 0.

The raw value is then smoothed with an exponential average of weight 2 / (length + 1), seeded with the first bar's raw value. While the average is young it is multiplied by a warmup factor 1 / (1 - e), where e is the product of 1 - weight over the bars so far. The factor is large on the first bars and shrinks toward 1 as history builds, and once e falls below 1e-10 it is no longer applied.

A Smoothing Length of 0 turns the smoothing off and plots the raw value of each bar.

How to read Balance of Power (BOP)

Values above zero mean closes have tended to finish above their opens, a sign buyers controlled the bars; values below zero mean sellers did. The further from zero, the more one-sided the bars. Many traders watch for the smoothed line crossing zero, or for it fading while price keeps rising, as a sign the move is losing support.

The raw reading is noisy from bar to bar, which is why it is smoothed by default. It ignores gaps between bars and volume, so it describes the shape of the bars, not the size of the trade behind them.

Settings

Smoothing Length
The length of the exponential average applied to the raw value. 0 plots the raw value with no smoothing.

Frequently asked questions

What range can it take?

The raw value lies between -1 and +1, and the smoothed line normally stays inside that range too. On the first few bars the warmup factor is large and can push the line beyond it.

Why does the line move a lot on the first bars?

The early average has few bars behind it and is multiplied by a warmup factor that starts large. The factor shrinks as bars accumulate, and the line settles.

How is a bar with the same high and low handled?

It has no range, so its raw value is 0 rather than a division by zero.

Write your own in OpenScript

Every study here is plain OpenScript. Change a setting, combine two, or turn one into a strategy, then backtest it in /trading and run it in sandbox trading (analyzer mode in OpenAlgo) before going further.