SP500 July 31 Review: A Whipsaw Through Both Invalidations Undersold by the
Digestion Call, but the Level Map Held
SP500 opened Friday essentially flat to Thursday's 7,450.19 close (7,439.89) rather than the modest gap-up implied by stale premarket commentary, then round-tripped through both of the prep's confirmed invalidation levels intraday — a wick down to 7,396.94 that breached the 7,406.56 support pivot, then a reversal spike to 7,510.19 that cleared the entire 7,467-7,490 resistance zone and the 7,509.20 objective beyond it — before settling back to close at 7,486.89 (+0.49%), just inside the resistance zone and short of a confirmed H1 close beyond either level. The prep's Range/digestion day-type call and Neutral/Wait lean badly undersold the session's volatility, and its 42%-weighted lead scenario (a gap that never existed, fading into the 7,406-7,467 corridor) never happened, but the underlying key-level map and its confirmed-close invalidation discipline held up cleanly through the whipsaw.
Every prep call is graded like this. See the full track record →
Graded against live session data from Cortiq
Every call in this review is checked against the session data captured in Cortiq — the AI trading workspace that powers our daily preparation, review, and calibration loop.
- 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
6 of 11 correct- Day-type callIncorrect
- Called
- Range (digestion) — no tier-1 event, the day after a near-2x-ATR trend day that had already tagged its resistance target
- Actual
- 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
- LeanIncorrect · neutral-incorrect
- Called
- Neutral/Wait — no scenario cleared the 55% combined-weight bar
- Actual
- 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
- Lead scenario — gap partially fades into the 7,406-7,467 corridor (42%)Incorrect
- Called
- Trigger: opening hour fails to clear 7,490 convincingly. Path: gap gives back toward 7,406-7,467, range oscillation into the afternoon
- Actual
- 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
- Key level 7,589.26 (resistance, 20-day high)Correct
- Called
- Distant; only in play on a clean, sustained break of 7,490
- Actual
- Untouched all session (day high 7,510.19)
- Key level 7,509.20 (resistance, July 21 breakout close)Partial
- Called
- Next objective only after 7,490 clears on a confirmed basis
- Actual
- 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)
- Key level 7,467.56-7,490.60 (resistance zone)Partial
- Called
- The session's decisive test — a further rejection strengthens the supply case; a clean confirmed break argues genuine follow-through
- Actual
- 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
- Key level 7,406.56 (support, flip pivot)Correct · held on close, wicked intraday
- Called
- First level that needs to hold for the digestion read to stay intact
- Actual
- 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
- Key levels 7,382.60-7,384.44 (support, flip zone)Correct
- Called
- Secondary defense inside the reclaimed corridor
- Actual
- Never reached (session low 7,396.94 stayed above this zone)
- Key level 7,375.13 (support, flip)Correct
- Called
- A loss here would be the first sign of a meaningful unwind of Thursday's gains
- Actual
- Never reached
- Key level 7,292.00-7,306.56 (support zone, cycle floor)Correct
- Called
- The cycle's defining downside test
- Actual
- Never reached (session low 7,396.94, well above the zone)
- Driver stack — mega-cap leadership vs. prior-day structureCorrect · the disagreement itself was the story
- Called
- 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
- Actual
- 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
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.
