All indicators

Efficiency Ratio (ER)

The net price move over N bars divided by the sum of every bar-to-bar move, from 0 for pure chop to 1 for a straight trend.

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

The Efficiency Ratio (ER) compares how far price has travelled in a straight line with how far it moved in total. The net move is the absolute difference between the source now and N bars ago (10 by default). The total, or noise, is the sum of the absolute bar-to-bar changes over the same N bars. The ratio of the two lies between 0 and 1.

The noise total is kept running from the first bar, while the net move is zero until N bars exist, so the line starts at zero. A missing source value reads as zero, and the result is held between 0 and 1.

How to read Efficiency Ratio (ER)

A reading near 1 means almost every bar moved in the same direction, so the market is trending efficiently. A reading near 0 means price went back and forth and ended near where it started, which is a choppy, range-bound market. The 0.5 line is a rough divider between the two.

It says nothing about direction, only about how clean the move was. Many traders use it to decide when a trend-following method is likely to work and when to stand aside.

Settings

Source
The price series the calculation reads, such as the close or the bar midpoint.
Period
How many bars the net move and the noise are measured over. A longer period gives a slower, steadier reading.

Frequently asked questions

Does a high reading mean price is rising?

No. It means the move was efficient in either direction. A steady fall also reads close to 1.

Why is it zero at the start?

The net move is only measured once N bars exist, so until then the ratio is zero.

Where is it used besides on its own?

The same ratio is the building block of adaptive moving averages, which speed up when it is high and slow down when it is low.

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.