Back to Research
112 long

S&P 500: Price Action Review (5-Minute Bar by Bar)

A detailed bar-by-bar walkthrough of 5-minute price action on the S&P 500, covering how to read individual bars, identify micro-structure patterns, and build a real-time session narrative for intraday trading.

Published March 14, 2022 Updated February 25, 2026
785-Min Bars Per RTH Session
65%Bars That Overlap Prior Bar Range
6Bars in the Opening Range (30 Min)
3:1Avg Wick-to-Body Ratio on Reversals

Every 5-minute bar on the S&P 500 tells a story. A small body with long wicks says indecision. A wide body with no wicks says conviction. Reading these bars one at a time, in sequence, is how professional intraday traders build a real-time narrative of who controls the auction. This is not about indicators layered on top of price. This is about price itself.

The ES (E-mini S&P 500 futures) prints 78 five-minute bars during regular trading hours (9:30 AM to 4:00 PM ET). Each bar encodes four data points: open, high, low, close. From those four numbers, you extract body size, upper wick length, lower wick length, and bar range. Compare each bar to the one before it, and you get overlap, expansion, or contraction. That comparison is the foundation of bar-by-bar reading.

Anatomy of a Single 5-Minute Bar

A single 5-minute bar on the S&P 500 carries four structural measurements.

Body size is the distance between open and close. On SPX, a body of 3 to 5 points on a 5-minute bar is moderate. Above 7 points signals strong conviction. Below 1.5 points signals indecision.

Upper wick length measures how far price traveled above the body before sellers pushed it back. A long upper wick (more than 2x the body) means buyers tried and failed.

Lower wick length measures how far price fell below the body before buyers stepped in. A long lower wick (more than 2x the body) means sellers tried and failed.

Bar range is the total high-to-low distance. Average 5-minute bar range on ES during regular hours is 3 to 6 points in normal volatility. During FOMC or CPI days, that range can expand to 15 to 25 points per bar.

Info: The average 5-minute bar range on ES varies by regime. In a VIX 12 to 15 environment, expect 3 to 5 point bars. In a VIX 25+ environment, expect 8 to 15 point bars. Calibrate your reading to the current volatility regime. The Volatility Box measures these regime shifts in real time.

Body-to-Wick Ratios and What They Signal

The ratio between body size and wick length is the most informative structural feature of any bar.

Bar TypeBody-to-Range RatioWick CharacterSignal
Momentum BarGreater than 70%Minimal wicksStrong directional conviction
Rejection Bar20% to 35%One wick is 3x+ the bodyFailed auction in wick direction
DojiLess than 10%Equal upper and lower wicksBalanced auction, indecision
Spinning Top15% to 30%Both wicks exceed bodyIndecision with volatility
MarubozuGreater than 90%Nearly zero wicksMaximum conviction
Hammer25% to 35%One-sided wick 2.5x+ bodyPotential reversal signal

When a momentum bar follows another momentum bar in the same direction, that is continuation. A momentum bar followed by a doji means the move is stalling. A momentum bar followed by a rejection bar in the opposite direction is a reversal worth watching.

Key Takeaway: A single bar means nothing in isolation. Its meaning comes from the prior bar and the next bar. Always read bars as triplets: setup bar, signal bar, confirmation bar.

Micro-Structure Patterns on the 5-Minute Chart

Certain two-bar and three-bar combinations appear repeatedly on the S&P 500 five-minute chart. These structural price patterns reflect real order flow.

Inside Bar: A bar whose entire range fits inside the prior bar. This is compression. On ES, inside bars on the 5-minute chart often precede breakout moves.

Outside Bar: A bar that engulfs the prior bar entirely. This signals a shift in control. The close location within the outside bar is critical.

Two-Bar Reversal: Two consecutive bars of similar range but opposite direction, where the second bar's close is beyond the first bar's open. This marks a clean hand-off between buyers and sellers.

Three-Bar Pullback: In a trending move, price pulls back for exactly three bars with smaller ranges, then resumes the trend. This is the most common continuation pattern on the 5-minute ES chart.

Key Intraday Levels for 5-Minute Analysis

Bar-by-bar reading does not happen in a vacuum. Every bar interacts with structural levels that provide context.

Opening Range (OR): The high and low of the first 30 minutes. Roughly 60% of trending days see the session extreme set within the opening range. A confirmed breakout (two consecutive closes beyond OR) signals a potential trend day.

VWAP: The volume-weighted average price acts as a magnet during range days and a launchpad during trend days. Bars that test VWAP and produce long wicks away from it are high-probability signals.

Prior Day High/Low (PDH/PDL): These levels carry overnight orders. Rejection bars at PDH/PDL often mark the session turning point. Many traders build thinkorswim scanners to alert when price approaches these levels with specific bar structures.

Initial Balance (IB): The first hour's range. If the IB is less than 33% of the average daily range, expect range extension. If the IB covers 60%+ of ADR, expect a range-bound session.

Info: Experienced traders using thinkorswim indicators plot the opening range, VWAP, and prior day levels automatically. Having these levels pre-drawn lets you focus on bar structure when price approaches them.

How Volume Confirms or Denies Bar Signals

A momentum bar on high volume is real. A momentum bar on declining volume is suspect. Volume is the confirmation layer that separates genuine moves from traps.

On the 5-minute ES chart, volume follows a predictable pattern. The first 30 minutes produce 25% to 30% of total session volume. Midday volume (11:30 AM to 2:00 PM ET) drops 40% to 60%. The final hour sees volume reach 80% to 90% of opening levels.

Breakout bars with volume 1.5x or higher than the 20-bar average confirm the breakout. Breakout bars on below-average volume are suspect. Climax volume bars (3x+ above average) often mark exhaustion, not continuation.

5-Minute Volume Confirmation ScannerthinkScript
# Volume Confirmation for 5-Min Bar Signals
# One of many thinkorswim scripts for day trading

def avgVol = Average(volume, 20);
def volRatio = volume / avgVol;
def barBody = AbsValue(close - open);
def barRange = high - low;
def bodyRatio = if barRange > 0 then barBody / barRange else 0;

# Momentum bar with volume confirmation
def bullMomentum = close > open and bodyRatio >= 0.70 and volRatio >= 1.5;
def bearMomentum = close < open and bodyRatio >= 0.70 and volRatio >= 1.5;

# Climax volume warning
def climaxBar = volRatio >= 3.0;

AddLabel(bullMomentum, "BULL MOMENTUM + VOL", Color.GREEN);
AddLabel(bearMomentum, "BEAR MOMENTUM + VOL", Color.RED);
AddLabel(climaxBar, "CLIMAX VOL WARNING", Color.MAGENTA);

This thinkScript code is a practical example of thinkorswim scripts for day trading that quantify what your eyes should already be reading on the chart.

The First 30 Minutes: Setting the Day's Tone

The opening range is the most important period of the trading day. The bar structure here reveals the day type.

Trend Day Setup: The first two bars are large-bodied, same direction, minimal overlap. Bar 3 pulls back slightly. Bars 4 through 6 resume direction and close beyond bars 1 and 2. Volume on bars 1 and 2 is 1.5x+ the prior day's opening volume.

Range Day Setup: Bar 1 is wide-range but closes near its open. Bar 2 reverses and retraces more than 50% of bar 1. Bars 3 through 6 oscillate, producing dojis and spinning tops. Volume declines after bar 1.

Chop Setup: The first three bars alternate direction with similar-sized bodies. Wicks are prominent. Volume is average or below.

Caution: Trading the first 5-minute bar of the session is one of the lowest-probability entries. The spread is widest, noise is highest, and algorithms are absorbing overnight order imbalance. Wait for three bars before forming any directional thesis.

Here is a bar-by-bar reading of a typical trend day on the ES 5-minute chart.

Bar 1 (9:30 to 9:35): Opens at 5,420. Closes at 5,427. Body: 7 points. Minimal wicks. Volume: 85,000 contracts. Strong bullish bar, body is 70%+ of range.

Bar 2 (9:35 to 9:40): Opens at 5,427. Closes at 5,433. Body: 6 points. Volume: 72,000. Continuation. Close near high, overlaps only bar 1's upper portion.

Bar 3 (9:40 to 9:45): Opens at 5,433. Closes at 5,431. Body: 2 points (bearish). Volume: 48,000. Inside bar. Volume dropped 33%. Pause, not reversal.

Bar 4 (9:45 to 9:50): Opens at 5,431. Closes at 5,439. Body: 8 points. Volume: 91,000. Breakout bar. Closes above bar 2's high on highest volume yet. Trend confirmed.

Bars 5 and 6 (9:50 to 10:00): Both close higher. Bodies are 4 to 5 points. Volume: 60,000 to 70,000. Opening range set: high 5,447, low 5,418.

On this trending day, buy every three-bar pullback to VWAP or to the rising 20-period EMA. The first pullback after the opening range is the highest-probability trade of the day. Thinkorswim scanners set to flag inside bars near VWAP during trend days can automate this identification process.

Key Takeaway: On a trend day, avoid counter-trend trades. The bar structure is clear: large bodies in the trend direction, small bodies on pullbacks, volume expanding on impulse and contracting on pullbacks. Trade with it, not against it.

Sample Walkthrough: A Range Day on ES

Bar 1 (9:30 to 9:35): Opens at 5,420. High 5,432, low 5,415. Closes at 5,419. Body: 1 point. Upper wick: 12 points. Volume: 95,000. Wide range, tiny body. Rejection bar. First sign of a range day.

Bar 2 (9:35 to 9:40): Opens at 5,419. Closes at 5,424. Body: 5 points (bullish). Volume: 68,000. Reversed direction but could not challenge bar 1's high. Rotation confirmed.

Bars 3 to 6: Price oscillates between 5,414 and 5,432. Inside bars, dojis. Volume declines to 42,000. Opening range: 18 points (40% of 45-point ADR). Range day.

On a range day, fade the extremes. At the OR high, look for rejection bars. At the OR low, look for bullish rejection bars. VWAP is the mean-reversion target.

Session ElementTrend DayRange Day
Opening Range BodiesLarge, same directionMixed, dojis, spinning tops
Volume First 30 MinHigh and sustainedHigh bar 1, declining after
VWAP BehaviorPrice stays one sidePrice crosses repeatedly
Pullback CharacterShallow, 1 to 3 barsDeep, back to VWAP
OR High/Low TestsBroken within first hourTested and rejected
Ideal StrategyPullbacks with trendFade OR boundaries

The Midday Chop Zone: 11:30 AM to 2:00 PM ET

The midday period is where most retail traders lose money. Volume drops. Bars become small and erratic. False breakouts multiply.

Bar ranges contract by 30% to 50% compared to the morning. Bodies shrink relative to wicks, with body-to-range ratios dropping below 40%. Overlap increases dramatically, with three to five consecutive overlapping bars being normal.

The practical response: reduce position size or stop trading between 11:30 AM and 2:00 PM. If you trade, tighten targets to the range boundary. The Futures Volatility Box shows this contraction clearly through narrowing expected move levels.

Caution: Midday breakouts on the 5-minute chart fail at 60% to 70% in normal volatility. Wait for volume to return after 2:00 PM before trusting directional signals.

Power Hour: 3:00 PM to 4:00 PM ET

The final hour produces the second-highest volume of the session. Institutional rebalancing and MOC orders create genuine directional moves.

The 3:00 PM breakout: Two consecutive momentum bars with rising volume after midday consolidation confirm the afternoon direction.

The 3:30 PM reversal: On range days, MOC imbalances become visible. A rejection bar at 3:30 PM with a volume surge can trigger a fade back toward VWAP.

The 3:50 PM acceleration: The final two bars carry MOC flow and can push price 5 to 10 points. Close or reduce positions before 3:50 PM to avoid this noise.

Opening Range and Session Level PlotterthinkScript
# Opening Range, PDH/PDL, and VWAP Reference Levels
# Apply to 5-minute ES chart

input orMinutes = 30;
input showPDHL = yes;

def RTH = GetTime() >= RegularTradingStart(GetYYYYMMDD()) and
          GetTime() <= RegularTradingEnd(GetYYYYMMDD());
def firstBar = RTH and !RTH[1];
def orActive = RTH and GetTime() <= RegularTradingStart(GetYYYYMMDD()) + orMinutes * 60 * 1000;

rec orHigh = if firstBar then high else if orActive then Max(orHigh[1], high) else orHigh[1];
rec orLow = if firstBar then low else if orActive then Min(orLow[1], low) else orLow[1];

plot ORH = if RTH and !orActive then orHigh else Double.NaN;
plot ORL = if RTH and !orActive then orLow else Double.NaN;
ORH.SetDefaultColor(Color.CYAN);
ORL.SetDefaultColor(Color.CYAN);

plot PDH = if showPDHL and RTH then high(period = AggregationPeriod.DAY)[1] else Double.NaN;
plot PDL = if showPDHL and RTH then low(period = AggregationPeriod.DAY)[1] else Double.NaN;
PDH.SetDefaultColor(Color.ORANGE);
PDL.SetDefaultColor(Color.ORANGE);

This script gives you the structural levels for bar-by-bar context. Pair it with Volatility Box expected move levels and thinkorswim scanners for a complete reference framework.

Using the TTM Squeeze with 5-Minute Bar Reading

The ttm squeeze thinkorswim indicator signals volatility compression. When Bollinger Bands move inside Keltner Channels, the squeeze fires. On the 5-minute ES chart, squeezes fire 3 to 5 times per session.

High-probability squeeze: Fires at a key level (VWAP, OR high/low, PDH/PDL). Bars during compression are inside bars or dojis. The release produces a momentum bar with above-average volume.

Low-probability squeeze: Fires in the midday chop zone with no nearby levels. Bars are spinning tops. The release bar is a doji. This squeeze will produce a choppy, non-directional move.

The Squeeze Pro Course covers advanced ttm squeeze thinkorswim applications, including combining squeeze signals with the Volatility Box for intraday targets.

Bar Character ClassifierthinkScript
# Bar Character Classifier - 5 Min Chart
# Color-codes bars by structure type

def barBody = AbsValue(close - open);
def barRange = high - low;
def bodyRatio = if barRange > 0 then barBody / barRange else 0;
def upperWick = if close > open then high - close else high - open;
def lowerWick = if close > open then open - low else close - low;

def insideBar = high < high[1] and low > low[1];
def outsideBar = high > high[1] and low < low[1];
def momentumBar = bodyRatio >= 0.70;
def dojiBar = bodyRatio < 0.10 and barRange > 0;

AssignPriceColor(
  if insideBar then Color.YELLOW
  else if outsideBar then Color.MAGENTA
  else if momentumBar and close > open then Color.GREEN
  else if momentumBar and close < open then Color.RED
  else if dojiBar then Color.GRAY
  else Color.CURRENT
);

This classifier is one of many thinkorswim scripts for day trading that turn your chart into a real-time narrative tool. Each bar gets color-coded by structural type. Combined with other thinkorswim indicators, this creates a systematic approach to reading the 5-minute tape.

Complete Session Framework

Pre-market: Mark levels. PDH, PDL, overnight high/low, prior VWAP close. Check VIX for volatility regime.

9:30 to 9:35 (Bar 1): Observe only. Note range, body, volume. Do not trade.

9:35 to 10:00 (Bars 2 to 6): Build narrative. Classify day type after six bars.

10:00 to 11:30: Execute strategy. Trend days: buy pullbacks. Range days: fade extremes. Chop days: stand aside.

11:30 to 2:00: Reduce activity. Tighten targets. Expect false signals.

2:00 to 3:00: Volume returns. Watch for new directional bias with a momentum bar breaking the midday range.

3:00 to 3:50: Execute the afternoon move. Bar structure is most reliable outside of the opening range.

3:50 to 4:00: Close positions. MOC flow distorts the final bars.

Key Takeaway: The 5-minute bar-by-bar method is a reading method, not a trading strategy. You still need a strategy (trend following, mean reversion, breakout) for entries and exits. Bar-by-bar reading tells you which strategy to deploy at each moment. That awareness is the edge.
Info: Pair this bar reading framework with thinkorswim indicators like the Volatility Box to get real-time expected move levels. The combination of structural bar reading and statistical expected move boundaries gives you both the qualitative and quantitative edge for intraday S&P 500 trading.

What is the best time frame for bar-by-bar price action reading on the S&P 500?

The 5-minute time frame offers the best balance between signal quality and frequency. On shorter time frames (1-minute), noise increases dramatically and most bar patterns become unreliable. On longer time frames (15-minute), you lose the granularity needed to identify intraday turning points. The 5-minute chart produces 78 bars per session, providing enough data to identify patterns while filtering tick-level noise.

How do you identify a trend day vs. a range day using 5-minute bars?

The first 30 minutes provide the strongest signal. On trend days, opening bars show large bodies in the same direction with sustained volume, and price stays on one side of VWAP. On range days, the opening bar is wide-ranged but closes near its open, subsequent bars reverse frequently, and price crosses VWAP four or more times. Compare the first hour's range to the average daily range for a quantitative check.

What role does volume play in confirming 5-minute bar signals?

Volume is the primary confirmation tool. A momentum bar on volume 1.5x above the 20-bar average is genuine. The same bar on below-average volume is suspect. Climax volume (3x+ above average) marks exhaustion rather than continuation. Morning volume produces the most reliable signals, midday volume drops 40% to 60%, and power hour volume restores signal reliability.

Should you trade during the midday chop zone on ES?

Most professional traders reduce activity between 11:30 AM and 2:00 PM ET. Bar ranges contract 30% to 50%, bodies shrink relative to wicks, and consecutive bars overlap heavily. False breakouts run at 60% to 70%. If you trade, cut position size in half, tighten targets, and expect mean-reversion behavior rather than trends.

How do thinkorswim indicators and scripts enhance 5-minute bar reading?

Thinkorswim scripts automate structural analysis. A bar classifier color-codes each bar by type (momentum, rejection, inside, outside, doji). Volume confirmation scripts flag when volume exceeds the 20-bar average. Level plotting scripts draw OR high/low, PDH/PDL, and VWAP automatically. The ttm squeeze thinkorswim indicator adds a volatility compression layer for breakout identification.

What are the most reliable 5-minute bar patterns for day trading the S&P 500?

Four patterns produce the most consistent results. First, the inside bar breakout at a key level confirmed by momentum and volume. Second, the two-bar reversal at VWAP during range days. Third, the three-bar pullback in trending sessions. Fourth, the rejection bar at OR boundaries signaling a failed breakout. All four require volume confirmation and lose reliability during midday chop.

The 5-minute time frame offers the best balance between signal quality and frequency. On shorter time frames (1-minute), noise increases dramatically and most bar patterns become unreliable. On longer time frames (15-minute), you lose the granularity needed to identify intraday turning points. The 5-minute chart produces 78 bars per session, providing enough data to identify patterns while filtering tick-level noise.
The first 30 minutes provide the strongest signal. On trend days, opening bars show large bodies in the same direction with sustained volume, and price stays on one side of VWAP. On range days, the opening bar is wide-ranged but closes near its open, subsequent bars reverse frequently, and price crosses VWAP four or more times. Compare the first hour's range to the average daily range for a quantitative check.
Volume is the primary confirmation tool. A momentum bar on volume 1.5x above the 20-bar average is genuine. The same bar on below-average volume is suspect. Climax volume (3x+ above average) marks exhaustion rather than continuation. Morning volume produces the most reliable signals, midday volume drops 40% to 60%, and power hour volume restores signal reliability.
Most professional traders reduce activity between 11:30 AM and 2:00 PM ET. Bar ranges contract 30% to 50%, bodies shrink relative to wicks, and consecutive bars overlap heavily. False breakouts run at 60% to 70%. If you trade, cut position size in half, tighten targets, and expect mean-reversion behavior rather than trends.
Thinkorswim scripts automate structural analysis. A bar classifier color-codes each bar by type (momentum, rejection, inside, outside, doji). Volume confirmation scripts flag when volume exceeds the 20-bar average. Level plotting scripts draw OR high/low, PDH/PDL, and VWAP automatically. The TTM Squeeze indicator adds a volatility compression layer for breakout identification.
Four patterns produce the most consistent results. First, the inside bar breakout at a key level confirmed by momentum and volume. Second, the two-bar reversal at VWAP during range days. Third, the three-bar pullback in trending sessions. Fourth, the rejection bar at OR boundaries signaling a failed breakout. All four require volume confirmation and lose reliability during midday chop.

Ready to Trade With an Edge?

Join 40,000+ traders using institutional-grade tools for ThinkOrSwim.

Get the Bundle