Session Summary
SP500's Friday session never delivered the modest gap-up that late-Thursday premarket commentary implied, and instead round-tripped violently through both of the prep's own confirmed-close invalidation levels — wicking below the 7,406.56 support pivot and then above the entire 7,467-7,490 resistance zone — before settling back to close inside that zone, up 0.49% on the day. The prep's Range/digestion day-type call and Neutral/Wait lean did not anticipate a session this two-sided; the key-level map and its confirmed-close discipline did their job regardless.
Session: SP500 Month-End Session Review — ECI/Chicago PMI/Michigan Sentiment Cluster and the Amazon/Apple Earnings Split (July 31, 2026)
Symbol: SP500
Window: 00:00 – 23:59 UTC
Day type called: Range (digestion)
Day type actual: Whipsaw
Lean outcome: Incorrect (neutral-incorrect)
Regime: Whipsaw — both invalidations wicked through intraday, neither confirmed; closed inside the resistance zone, +0.49%
Preparation: Partially accurate
Surprises: High
Grade Card
| Prep element | Called | Actual | Verdict |
|---|
| Day-type call | Range (digestion) — no tier-1 event, the day after a near-2x-ATR trend day that had already tagged its resistance target | A two-sided whipsaw: price wicked below the 7,406.56 support invalidation (low 7,396.94) and above the 7,490.60 resistance invalidation (high 7,510.19) intraday, inside a ~113-point (~1.28x ATR) session — wider and far more violent than a typical digestion day | Incorrect |
| Lean | Neutral/Wait — no scenario cleared the 55% combined-weight bar | Session closed at 7,486.89, +36.70 (+0.49%) above the anchor and parked inside the resistance zone, after round-tripping through both invalidations — a directional (bullish) resolution once the whipsaw settled | Incorrect (neutral-incorrect) |
| Lead scenario — gap partially fades into the 7,406-7,467 corridor (42%) | Trigger: opening hour fails to clear 7,490 convincingly. Path: gap gives back toward 7,406-7,467, range oscillation into the afternoon | No gap existed to fade — the open (7,439.89) was essentially flat to the 7,450.19 anchor. Price never settled into the 7,406-7,467 corridor; it round-tripped well outside both edges and closed inside the resistance zone instead | Incorrect |
| Key level 7,589.26 (resistance, 20-day high) | Distant; only in play on a clean, sustained break of 7,490 | Untouched all session (day high 7,510.19) | Correct |
| Key level 7,509.20 (resistance, July 21 breakout close) | Next objective only after 7,490 clears on a confirmed basis | Briefly exceeded intraday (high 7,510.19 at 22:00 UTC) without 7,490 ever confirming first — the prep's own sequencing didn't hold, though the level was also never confirmed reached on a close basis (close 7,486.89) | Partial |
| Key level 7,467.56-7,490.60 (resistance zone) | The session's decisive test — a further rejection strengthens the supply case; a clean confirmed break argues genuine follow-through | Neither: price wicked above the zone's ceiling intraday (7,510.19) without confirming a close beyond it, then settled back to close inside the zone (7,486.89) — an inconclusive draw rather than a clean rejection or a clean breakout | Partial |
| Key level 7,406.56 (support, flip pivot) | First level that needs to hold for the digestion read to stay intact | Wicked below intraday (low 7,396.94 at 17:00 UTC, within the same hour that opened at 7,439.06 and closed back at 7,446.19) but no H1 candle closed beneath it — held on the confirmed-close basis the prep itself required | Correct (held on close, wicked intraday) |
| Key levels 7,382.60-7,384.44 (support, flip zone) | Secondary defense inside the reclaimed corridor | Never reached (session low 7,396.94 stayed above this zone) | Correct |
| Key level 7,375.13 (support, flip) | A loss here would be the first sign of a meaningful unwind of Thursday's gains | Never reached | Correct |
| Key level 7,292.00-7,306.56 (support zone, cycle floor) | The cycle's defining downside test | Never reached (session low 7,396.94, well above the zone) | Correct |
| Driver stack — mega-cap leadership vs. prior-day structure | Partial disagreement: Amazon's AWS beat argues for continuation into the resistance zone; Apple's miss and Thursday's already-large range argue for digestion | A genuine tug-of-war exactly as flagged — prior-day structure and the confirmed-close discipline held the level map together, while mega-cap leadership eventually pushed price to retest and briefly clear the top of the resistance zone late in the session | Correct (the disagreement itself was the story) |
Overall, the prep's structural work — the key-level table and its confirmed-close invalidation discipline — held up almost perfectly through a genuinely violent session: nothing broke on a closing basis that wasn't supposed to. The framing calls did not hold up nearly as well: Range/digestion and Neutral/Wait both described a far calmer session than the one that actually traded.
The Tape
Open (00:00-07:00 UTC): SP500 opened at 7,439.89 — essentially flat to, and if anything slightly below, Thursday's 7,450.19 close, not the modest gap-up (implied cash-equivalent roughly 7,466-7,492) that late-Thursday public futures commentary had suggested. The overnight book ground quietly higher through the first six hours, reclaiming the mid-7,450s and mid-7,460s without any single decisive push.
Mid-session (07:00-17:00 UTC): The European morning carried price into the lower edge of the 7,467-7,490 resistance zone by 07:00-09:00 UTC (touching 7,478-7,480), where it stalled through the Employment Cost Index (12:30 UTC), Chicago PMI (13:45 UTC) and Michigan Sentiment (14:00 UTC) cluster — the 12:00-14:00 UTC hours held a tight 7,471-7,487 band, a muted reaction consistent with tier-2 data. The 14:00-15:00 UTC "opening hour" the prep flagged as the session's highest-information window did not deliver a decisive breakout in either direction — it closed down 7.25 points, well under the 0.8x-ATR trigger the lead breakout scenario needed. At 16:00 UTC price spiked to 7,484.45, a direct tag of the resistance zone, then reversed hard: the 16:00-17:00 UTC window broke 87.5 points, printing a session low of 7,396.94 at 17:00 UTC — a clean intra-hour breach of the 7,406.56 support pivot the prep had flagged as the level that needed to hold. No H1 candle closed below it; the 17:00 UTC hour itself closed back at 7,446.19.
Late / close (18:00-23:59 UTC): From 18:00 UTC the session reversed into a steady climb through the New York afternoon and power hour, reclaiming the 7,450s by 19:00 UTC and pushing through the 7,470s and 7,480s by 21:00 UTC. The 22:00 UTC hour delivered the session's decisive spike — from 7,481.94 to a high of 7,510.19, clearing the entire 7,467-7,490 resistance zone and briefly trading above the 7,509.20 next-objective level named in the prep — before fading back to close the hour at 7,486.94. The final hour held that ground, closing the session at 7,486.89 (+36.70 / +0.49% versus Thursday's anchor), inside the resistance zone but short of a confirmed H1 close above its 7,490.60 ceiling.
What We Learned
The prep's structural map — every graded key level and both directional invalidations — held up on a confirmed-close basis through a session that tested it about as hard as a single day can. The framing calls that sit above that map are where the real gap sits.
- Surprise: the assumed gap never existed. The prep was explicit that its ~7,466-7,492 implied open came from stale, unconfirmed public futures commentary, not a live print — and that caveat turned out to matter. The actual open (7,439.89) was essentially flat to Thursday's close. This was flagged honestly as a risk rather than presented as fact, so it is a data-availability gap rather than a systematic misread; no routing action needed beyond continuing to caveat premarket reads this explicitly when live candles are unreachable.
- Systematic issue: the day-type call landed on Range despite the driver stack meeting this framework's own whipsaw precondition almost word for word. The session-analysis framework defines WHIPSAW preconditions as "genuinely contradictory drivers (e.g., bearish structure + fresh bullish catalyst)" — and the prep's own driver stack described exactly that (Amazon's beat versus Apple's miss within the same mega-cap complex) while still calling Range as the day type and folding whipsaw into a 25%-weighted third scenario. Routing: driver-stack mis-ordering. When the driver stack's own "partial disagreement" verdict cites a genuine single-complex earnings bifurcation as its evidence, that should trigger explicit whipsaw weighting per the framework's Section 1 preconditions rather than defaulting to Range as the base case.
- Confirmation, not a miss: the confirmed-H1-close invalidation discipline worked exactly as designed. Both the 7,406.56 support and the 7,490.60 resistance were breached on an intra-hour wick basis (7,396.94 and 7,510.19 respectively) without a single H1 candle closing beyond either. The map never generated a false signal despite the whipsaw. No action needed — continue grading confirmed closes, not touches, and continue treating that discipline as this instrument's most reliable structural tool.
- Right scenario, wrong scope: the whipsaw branch existed but was scoped too narrowly. The 25%-weighted whipsaw scenario described oscillation strictly inside the 7,406-7,467 corridor with "neither edge holding a confirmed break" — directionally the closest description of what happened, but its stated bounds were breached by roughly 10 points on the downside and over 40 points on the upside. Routing: driver-stack mis-ordering. When a whipsaw scenario follows a session that already ran near 2x its ATR, its bounds should be set at the invalidation levels themselves (7,406.56 / 7,490.60) rather than at the tighter reclaimed corridor, since an already-stretched prior session raises the odds the whipsaw tests the wider levels, not the inner ones.
Reviewed prep: 2026-07-31-sp500-session-preparation.