Williams %R: The Raw Momentum Oscillator That Tells You Where Price Closed in the Range
Overview #
Every oscillator on your chart is trying to answer the same question: is the market stretched too far in one direction? Williams %R answers it more directly than almost any other indicator. No smoothing, no lag from signal lines — just a raw measurement of where today's close sits within the recent trading range.
Larry Williams developed it in the 1970s for short-term trading. The math is simple: measure the distance between the highest high of your lookback period and the current close, then divide by the full range (highest high minus lowest low). Multiply by -100. That inverted scale — from 0 at the top to -100 at the bottom — is intentional. When price closes at the top of its recent range, %R reads near 0. When it closes at the bottom, %R reads near -100.
What makes this useful is what it tells you about momentum quality. Not just whether price went up or down, but how strongly buyers or sellers pushed price into the extremes of the recent range. A market closing consistently near its highs isn't just bullish — it's showing buyers willing to own at the top. When that stops happening, you know before price structure tells you.
The catch is that Williams %R is one of the most misused indicators in technical analysis. Traders see a reading of -5 and think "overbought, time to short." In a trending market, that logic loses money systematically. The indicator doesn't predict reversals — it measures exhaustion. Understanding that distinction is the difference between using %R as a professional tool and using it as a random trade generator.
The Formula: What It Actually Calculates #
Williams %R uses one formula applied to every bar:
%R = [(Highest High − Close) / (Highest High − Lowest Low)] × −100
%R = [(Highest High − Close) / (Highest High − Lowest Low)] × −100
Range: 0 (close at range high) to −100 (close at range low). Overbought: 0 to −20. Oversold: −80 to −100. Default lookback: 14 periods.
Where:
- Highest High = the highest high over the last N periods
- Lowest Low = the lowest low over the last N periods
- Close = the current bar's closing price
- N = your lookback period (default is 14)
Walk through it step by step on the ES. Say the last 14 bars had a highest high of 5,450 and a lowest low of 5,410. Today's close is 5,445.
%R = [(5,450 − 5,445) / (5,450 − 5,410)] × −100 %R = [5 / 40] × −100 %R = −12.5
The close at 5,445 is just 5 points below the range high of 5,450, so %R reads −12.5. That's in the overbought zone (0 to −20). Price is closing near the top of its recent 14-bar range.
Now say the close drops to 5,415: %R = [(5,450 − 5,415) / (5,450 − 5,410)] × −100 %R = [35 / 40] × −100 %R = −87.5
Deep in oversold territory. Price is closing near the bottom of the recent range.
The key thing to notice: %R measures the close's position within the range, not direction. A closing price near yesterday's range top reads the same regardless of whether the day was up or down. What matters is where the bar closed relative to the recent extremes.
@SodyTexas pushed this concept further in the Discussion of SodyR thread by inverting the formula algebraically to identify the exact price that would push %R across a specific threshold: "what if you wanted to know what price would cause the %R to cross the overbought or oversold threshold? I change the formula to solve for X... what you end up with is a indicator that looks at a smoothed %R drawn on price, add the overbought and oversold percents and it becomes a cool little indicator." That's a legitimate quantitative extension — calculating threshold prices rather than just reading the oscillator after the fact.
Williams %R vs. Stochastic: The Mathematical Truth #
Here's something most traders don't know: Williams %R and the Stochastic %K line are mathematically identical. Different scale, same information.
The Stochastic %K formula: [(Close − Lowest Low) / (Highest High − Lowest Low)] × 100
Williams %R: [(Highest High − Close) / (Highest High − Lowest Low)] × −100
These are the same calculation with the close and high swapped and the sign flipped. The relationship is exact: %R = %K − 100
If Stochastic %K reads 85, Williams %R reads −15. If %K reads 20, %R reads −80. The thresholds shift so — Stochastic's overbought level of 80 maps to %R's −20, and Stochastic's oversold level of 20 maps to %R's −80.
The practical difference is smoothing. Stochastic gives you a %K line plus a %D line (a moving average of %K). That smoothing reduces whipsaws at the cost of lag. Williams %R gives you the raw reading with no smoothing — faster signals, but more noise.
RedK went further and tested smoothing variations, finding that a 3-period WMA of %R provided cleaner signals while preserving responsiveness.
The choice between the two comes down to what your strategy prioritizes. Scalping entries where you need fast signals? %R's raw output responds immediately to price changes. Trend confirmation where you need fewer whipsaws? Stochastic's smoothed %D line is the better tool. For purely systematic applications, the signals are close enough that the choice between them rarely determines performance — execution quality and filter design matter more.
Reading the Zones: What Overbought and Oversold Actually Mean #
The standard zones:
- 0 to −20: Overbought
- −80 to −100: Oversold
- −20 to −80: No man's land
Every beginner reads −5 and thinks "too high, it'll fall." That's wrong. The zones tell you about the quality of recent price movement, not about imminent direction.
When %R is reading −5 to −10 and staying there, price is consistently closing near the top of its recent range. Buyers are controlling the close — pushing price up, then not letting it fade. That's strong momentum, not a sell signal.
The correct interpretation: overbought means buyers are in control. Oversold means sellers are in control. Neither predicts a reversal. They identify the current state of price pressure.
The distinction that matters is how long %R stays in a zone. A single candle pushing into −5 and immediately reversing is different from %R holding between −5 and −15 for twelve consecutive bars. The sustained reading tells you about trend health. The quick spike tells you about short-term momentum exhaustion.
For intraday ES traders, the practical implication: when %R is in the overbought zone during a bullish trend, you're looking for pullback entries long, not reversal shorts. The pullbacks that bring %R back to −40 or −50 are where you buy, not where you wait for −90 to go long.
The "no man's land" zone (−20 to −80) is often ignored, but it's actually where %R spends most of its time during healthy trends. Strong uptrends regularly see %R bounce between −10 and −50 without ever reaching oversold territory. If %R can't sustain below −30 during a supposed downtrend, the downtrend is probably weak.
The Walk the Band Problem #
The single most dangerous pattern for Williams %R beginners: a trending market that keeps %R pinned at an extreme for an extended period.
During a strong uptrend, %R will stay in the 0 to −20 zone for session after session. Price makes a new high, %R reads −5. Price consolidates slightly, %R drops to −25. Then another new high, %R is back at −8. The trader who keeps trying to short the "overbought" readings loses on every trade.
This is called "walking the band" — %R walks along the extreme zone, never giving the oversold reading that would "confirm" a trend continuation, while the trend continues regardless.
The system passed on certain pairs and failed on others precisely because of regime differences — mean-reversion %R signals work in rotational markets and get destroyed in trending ones.
The solution isn't a different indicator — it's a regime filter. Most professional %R traders use a moving average (typically 40-50 period SMA or 20-period EMA) to establish trend direction and only take %R signals in the direction of the trend. Overbought readings in uptrends → look for long entries on pullbacks. Oversold readings in downtrends → look for short entries on bounces.
Divergence: The Professional Signal #
If there's one application where Williams %R outperforms most oscillators, it's divergence. The raw, unsmoothed nature of %R makes divergences cleaner and more visually obvious than on smoothed indicators.
Bearish divergence: Price makes a higher high, but %R makes a lower high (fails to reach its previous peak near 0). The market is putting in new price highs, but the quality of those highs is degrading — buyers can't close price as strongly at the top of the range as they did at the previous high. Momentum is fading even as price advances.
Bullish divergence: Price makes a lower low, but %R makes a higher low (can't get as close to −100 as before). Sellers are pushing price to new lows, but they're losing the ability to close price near the range bottom. Each new low is being bought harder.
The most important rule for trading divergences: they're only valid when %R has first reached an extreme zone. Divergence in the middle of the range (say, %R moving from −45 to −55 while price makes a new low) is noise. You need %R to have touched −80 or below on the first leg, then fail to reach that level while price makes its second new low.
Divergences signal momentum exhaustion, not immediate reversal. The reversal still needs confirmation — typically a break of the swing high between the two %R readings, or a candlestick pattern at the divergence point, or a volume shift. In futures, order flow confirmation (absorption at the low, delta flipping positive) makes divergence signals much more reliable than price-only analysis.
Divergence failures are common in strong trends. If you see bearish divergence but price structure is still intact (higher highs and higher lows), treat it as a caution flag, not a trade signal. Wait for price structure to break before acting on the divergence.
Failure Swings: The Professional Entry Signal #
Failure swings add a layer of confirmation beyond basic divergence. They're the professional entry pattern for %R-based trading.
Bullish failure swing:
- %R drops into oversold territory (below −80)
- %R bounces back up, reaching some level between −80 and −20
- %R pulls back again toward oversold — but fails to reach the previous oversold extreme
- %R then turns back up and crosses above the bounce high from step 2
The failure on step 3 — not reaching the prior oversold extreme — is the key. It tells you sellers made another push, but they couldn't push price to the same extreme they reached before. Step 4 (crossing the bounce high) is the entry trigger.
Bearish failure swing: Mirror pattern. %R reaches overbought, pulls back, makes another overbought push that fails to match the prior peak, then breaks the prior pullback low.
The failure swing matters because it eliminates the timing problem with simple divergence. You're not trying to call the exact turn — you're waiting for %R to demonstrate it can't reach the prior extreme, then entering on a momentum break in the new direction.
For ES day trading, failure swings on a 5-minute chart with a 14-period %R appear most cleanly at session transition points — when the RTH open reshapes the overnight range, or when the market reverses at the IB high/low. The range recalculation after a range expansion creates natural conditions for failure swings.
Settings for Different Markets and Timeframes #
The default 14-period %R works well as a starting point, but matching the lookback to your trading context much improves signal quality.
Intraday index futures (ES, NQ, RTY):
- Scalping (1-3 minute charts): 8-10 period
- Day trading (5-minute charts): 10-14 period
- Swing setups (15-30 minute charts): 14-21 period
Shorter lookbacks react faster and produce more signals — useful for scalping mean-reversion in liquid markets. Longer lookbacks filter noise but may miss intraday turns.
Commodity futures (CL, GC, NG):
- Day trading: 14-21 period
- Swing: 21-28 period
Commodities have higher volatility than index futures, so longer lookbacks prevent the indicator from becoming hypersensitive to individual bar extremes. A 14-period %R on crude can hit −100 and snap back to −10 in two bars — not actionable. A 21-period version shows the same move as a moderate oversold reading.
Forex pairs:
- High-vol pairs (GBP/JPY, EUR/AUD): 9-10 period for quick exhaustion swings
- Steady pairs (EUR/USD, USD/CHF): 14-21 period
- Daily timeframe swing trading: 20-28 period
@vmodus tested both timeframes explicitly in Attack of the Robots - An Algo Journal: "Before moving on to my next idea, I wanted to look at the Williams %R forex system I've posted here, but applying a weekly timeframe. The results were, uh, very surprising... On an account size of about US$12.5k, the annual return comes in at 36.9% (includes spread, slippage, and borrowing costs). This is something that I would add to my portfolio today, if I were able to trade forex." The weekly timeframe outperformed the daily precisely because the longer lookback filtered regime noise.
The practical approach: start with the default 14 periods and study how often %R reaches extremes on your instrument. If it hits −100 or 0 multiple times per session, lengthen the lookback. If it rarely touches −80 or −20, shorten it. The indicator is most useful when extremes occur roughly once every 3-5 bars in ranging markets and when walking the band in strong trends.
Trend Filters: The Non-Negotiable Requirement #
Williams %R without a trend filter generates signals in both directions indiscriminately. In a trend, that means half your signals are counter-trend. Using %R professionally requires a filter that establishes directional bias before looking at the oscillator.
Simple moving average filter: The cleanest approach. Calculate a 40 or 50-period SMA (or 20-period EMA) of price. If price is above the SMA, only take oversold (%R below −80) signals for long entries. If price is below the SMA, only take overbought (%R above −20) signals for short entries.
@vmodus implemented exactly this in Attack of the Robots - An Algo Journal: "Using a simple moving average as a trend filter, I take trades only in the direction of the prevailing trend... for a long position, if I hit 2.15 %R on a scale of 0 - 100, then I will take a larger position than I would with 9.5 %R." This captures two important points: the SMA filter eliminates counter-trend signals, and depth into the oversold zone calibrates position size.
Volume profile integration: More sophisticated. Use the Value Area as your directional bias. Price above VAH (Value Area High) on a reclaiming move suggests bullish bias — look for oversold %R as a long entry trigger. Price below VAL (Value Area Low) — look for overbought %R as a short entry trigger.
Higher timeframe bias: Use a 15-minute chart to establish directional bias, then execute %R signals on a 5-minute chart. If the 15-minute trend is bullish (price above 15-min 20-period SMA), only take 5-minute oversold readings for long entries.
The key insight from the council: this isn't a minor optimization — it's the fundamental difference between profitable and unprofitable %R applications. The indicator's mean-reversion nature makes it naturally counter-trend in its raw signals. The trend filter transforms it from a reversal tool into a pullback entry tool, which is where the edge lives.
Position Sizing With %R Depth #
One of the most interesting applications @vmodus documented is using %R depth to calibrate position size. The premise: the further %R pushes into an extreme zone, the stronger the mean-reversion signal, so scale position size with depth.
The implementation: define tiers within the oversold zone. %R between −80 and −90 = standard size. %R between −90 and −95 = 2x size. %R at −95 to −100 = 3x size. Inverse for overbought entries.
The logic is sound in mean-reverting markets: a market that closes at −100 (right at the range low) is more stretched than one at −85. The extreme close represents maximum effort by sellers, which often precedes a sharp reversion as buying pressure returns.
The position sizing more than doubled returns on the same signal set. Though as his subsequent testing showed, the system was regime-dependent — position sizing amplified losses in trending regimes just as it amplified gains in mean-reverting ones.
This approach requires the same trend filter discipline. Without it, you're scaling into counter-trend positions in trending markets — a reliable way to take maximum-sized losses on the worst trades.
NinjaTrader and Practical Implementation #
Williams %R is available natively in NinjaTrader 8 under the standard indicators library. Default settings use 14 periods with −20 and −80 as the overbought/oversold lines.
Configuration for intraday ES trading:
- Period: 14 (default works well on 5-minute charts)
- Overbought line: −20
- Oversold line: −80
- Apply to: Close (standard)
- Panel: separate lower panel
Add a 40-period SMA on the main price panel as your trend filter. Combine with VWAP as a secondary reference — when price is above VWAP and above the 40 SMA, %R oversold signals are higher probability than when only one filter is met.
@RedK's smoothing modification is worth implementing: "Smooth it a little bit to make it easier to follow, while not causing signal lag. best was to use a WMA(3) of the closing... mathematically the same as a WMA Smoothing of 3 for the final Wm's %R." In NinjaTrader, you can apply a 3-period WMA to the %R output by wrapping it in a WMA indicator or using an EMA(3) in a custom indicator. This reduces the choppy appearance without materially delaying signals.
Alert setup for key levels: Configure visual alerts when %R crosses below −80 (oversold entry zone) or above −20 (overbought zone) while the trend filter condition is met. This prevents you from staring at the indicator waiting for signals — let the platform notify you when conditions are met, then evaluate the trade.
When %R Signals Mislead #
Trading extreme readings as automatic reversal signals: The most common and most costly mistake. %R at −5 doesn't mean "sell immediately" any more than a stock at a 52-week high means "it can't go higher." Overbought conditions in strong uptrends are buying opportunities on pullbacks, not short signals.
Using %R without context: The indicator doesn't know whether the recent 14-bar range happened during an earnings gap, a Fed announcement, or a quiet range day. A range-defining event in one of those bars can make %R readings misleading for the next 14 bars until that bar drops out of the lookback window.
Treating all divergences equally: Divergence validity depends on whether %R reached an extreme on the first leg. A "divergence" where %R goes from −30 to −35 while price makes a lower low isn't a real divergence — it's two non-extreme readings. Real divergence requires at least one extreme reading (below −80 for bullish, above −20 for bearish).
Ignoring the lookback period's fit: A 14-period %R on a 1-minute chart of the ES produces a reading based on 14 minutes of data. That might include one coherent market structure or three different microstructure regimes. If your 14-minute window spans a news spike and a subsequent squeeze, the extreme readings aren't comparable. Match the lookback to the swing frequency of your timeframe.
Over-smoothing to eliminate noise: Applying a long moving average to %R output destroys the speed advantage that makes the indicator worth using over Stochastic. If you need smooth signals, use Stochastic %D instead. A light smoothing (3-period WMA as @RedK suggested) is fine. A 10-period EMA of %R just recreates a lagged version of something you already have.
How Professional Traders Use Williams %R #
The consensus from both the community research and professional application: Williams %R works best as a pullback timing tool within a defined trend, not as a standalone reversal indicator.
The professional workflow:
- Establish directional bias from a higher timeframe or moving average
- Wait for %R to reach an extreme in the counter-direction of the established trend (oversold in uptrend, overbought in downtrend)
- Look for a turn signal — failure swing, divergence, or candlestick confirmation
- Enter with a stop beyond the swing extreme that created the %R reading
- Scale position based on depth into the zone
What you're doing is using %R to identify the points in a trending market where short-term sellers (in an uptrend) have temporarily pushed price below its recent equilibrium. When %R reaches −85 in an uptrend and then starts turning back up, you're catching the moment when those temporary sellers are exhausted and trend buyers are re-entering.
Applied to the key reference levels framework: when the ES pulls back to test a prior day's high or POC and %R simultaneously reaches oversold territory, that's a confluence setup. The reference level provides structural support; %R confirms the short-term selling pressure is exhausting. Neither alone is as strong as both together.
The raw speed of Williams %R — reacting to each bar's close position without delay — makes it especially useful in combination with order flow analysis. When %R reaches oversold and footprint charts simultaneously show delta turning positive (aggressive buyers coming in at the bid), that combination is much more reliable than either signal in isolation.
Williams %R works as a pullback timing tool within a defined trend, not a standalone reversal signal. Establish directional bias first. Wait for %R to reach an extreme counter to that bias. Confirm with a failure swing or delta shift. Enter with a defined stop. That sequence is the entire professional application.
What Williams %R Doesn't Do #
Worth stating directly: Williams %R cannot tell you where a move will stop, how far a reversal will travel, or whether a trend is about to reverse. It tells you about the current quality of price movement within the recent range.
A reading of −100 means price closed at the exact range low — nothing more. It doesn't guarantee a bounce. In a strong downtrend, price can close at the range low for multiple consecutive bars while the trend continues.
The indicator also doesn't adjust for volatility. A 14-period %R on the ES during a 10-point average daily range treats the range the same as during a 30-point average daily range. The indicator value might be the same, but the actual price movement required to generate that reading is three times larger. Pairs with ATR give you the volatility context that %R alone lacks.
Williams %R is one piece of a trading framework, not a complete system. Its value is in providing a fast, raw, bounded measure of momentum exhaustion. Combined with trend analysis, volume profile, order flow, and risk management, it's a useful timing tool. Used alone as a signal generator, it underperforms over any meaningful sample.
The professional %R setup sounds deceptively simple: trend filter plus pullback entry. The hard part is the discipline it requires. A 14-period %R generates 8-12 signals per RTH session on the ES — after applying a trend filter and waiting for pullbacks to overbought/oversold zones, you're left with 1-3 high-quality setups per day. That reduction isn't a limitation. It's the edge.
Knowledge Map
Prerequisites
Understand these firstGo Deeper
Build on this knowledgeReferences This Article
Articles that build on this topicCitations
- — Discussion of SodyR (2015) 👍 16“Inverting Williams %R algebraically to calculate the exact price that pushes %R across a specific overbought/oversold threshold -- a quantitative extension for systematic traders”
- — Attack of the Robots - An Algo Journal (2022) 👍 4“Mean-reversion Williams %R system using 40-day SMA trend filter and position sizing scaled to depth into overbought/oversold zone -- annual return doubled from 41% to 89% with sizing”
- — Attack of the Robots - An Algo Journal (2022) 👍 2“Walk-forward test of Williams %R system across forex pairs: results regime-dependent, working in mean-reverting markets but failing in trending regimes”
- — Attack of the Robots - An Algo Journal (2022) 👍 5“Weekly timeframe Williams %R on four currency pairs: 36.9% annual return with 11% time-in-market; outperformed daily timeframe significantly”
- — The Learning Journal of RedK Trading Options... (2012) 👍 4“Williams %R smoothing methodology: WMA(3) of closing price provides cleaner signals without lag; zone analysis and scaling adjustments for trend vs counter-trend applications”
- — $$$uper indicator for TOS (2018) 👍 4“ThinkOrSwim multi-timeframe Williams %R implementation with Fisher Transform confirmation -- color-coded alert labels for overbought/oversold entry signals”
- — Salao's Journal (2023) 👍 4“Regime filtering for oscillator-based reversion setups: oversold readings only reliable in range-bound regimes; trending markets destroy reversion systems without directional filters”
- StockCharts.com — Williams %R -- StockCharts Chart School
- Investopedia — Williams %R: Definition and How It Works
