πŸ‚ SPY Bull / Bear Tracker 🐻

Which side is winning today β€” bulls or bears β€” and how strong. Simple version up top, every number sourced below.
BULL Β· 0 OF 5 BARS BEAR Β· 3 OF 5 BARS
BEARISH
-2.75 on a βˆ’5 (max bear) to +5 (max bull) scale Β· bear meter: 3 of 5 bars

Bears are in control today. An oil shock β€” Brent above $113 after strikes on Saudi energy sites β€” and heavy selling after Meta's and Tesla's earnings pushed SPY down 1.17% to 764.02. Price closed between the two lines that matter: bears own it below 762, bulls above 770. One thing did not confirm the selloff: credit stayed calm, with HYG finishing higher on the day.

⚠ Shock override ON β€” Energy & geopolitics scored βˆ’2 (oil shock: WTI ~$99, Brent >$110 on Gulf supply risk). Shock weights are in force: energy weight rises 15 β†’ 30 until the factor comes off Β±2.
Edition: Thu, Oct 22, 2026 Β· 11:10 PM ET Β· Post-close Β· Hourly on weekdays Β· next run β‰ˆ 12:10 AM ET Β· Scoring ruleset v1

πŸ—ΊοΈ The map β€” two lines that matter

762 770 SPY close 764.02 bear zone contested bull zone

Bears own it below 762 Β· Bulls own it above 770 Β· in between (762–770) is contested. Bulls must reclaim the rejected 769–770 ceiling; the prior close at 773.09 is the next gate above. Bears own the tape only on a sustained break of the 762 floor β€” today's 761.16 probe did not close through it, and SPY closed the session inside the contested zone at 764.02. Levels unchanged for Friday: the floor was defended on closes all day, the ceiling was never retested.

πŸ“Š Today's numbers

SPY close
764.02 (-1.17%)
Day low 761.16 Β· prior close 773.09
50-day / 200-day
768.29 / 726.29
Price is under the 50-day, well above the 200-day
VIX
~19.1
close range 19.03–19.14 across closing sources β€” flagged, headline ~19.1
10-year yield
4.953%
close 4.953%, βˆ’19.3bp (post-close brief; WSJ corroborates sub-5% close)
WTI crude
$99.47
Dec settle $99.47, +2.39% (DTN; high $100.17)
Brent crude
$113.17
Dec settle $113.17, +4.00% (DTN 3:00 PM CDT; high $113.47)
Dollar (DXY)
101.43
101.43 at 2:30 PM EDT (DTN, single-source) β€” slid on the day; supersedes the 101.79 9:31 AM pulse
Jobless claims
194K (consensus ~200K)
Continuing claims 1.728M

πŸ“Ό The tape β€” momentum & reversals

β–² REVERSAL WATCH β€” UP
As of the 3:55 PM ET bar (the session's final bar) Β· key level: the 762 floor Β· probe: low 761.16 at 3:00 PM
Price 764.02VWAP 763.7114 EMA 762.7050 SMA 763.11200 SMA 768.18RSI-14 62.4
Signal β€” REVERSAL WATCH Β· UP, fired 3:15 PM and re-fired 3:50 PM at the 762 floor on the 3:00 PM probe (low 761.16): session βˆ’1.55% at the probe, no close through the level, EMA + VWAP reclaimed, volume dried into the probe and expanded on the turn. Its 2-hour grading window runs past the close, so it is ungraded here and left for the post-close backfill (best travel so far +0.38% from the probe). Replay on revised bars this edition: the morning watches at 11:20 AM and 11:50 AM (same 10:35 AM probe, 762.10) both grade HIT (+0.50% by 12:00 PM); the 1:30 PM / 1:40 PM watches on the 1:10 PM probe (762.16) grade MISS (+0.24% / +0.21%); the 2:15 PM watch (2:00 PM probe, 761.41) is ungraded (best +0.35%, window incomplete). Correction (from the 5:10 PM edition): the 4:10 PM edition listed the early-afternoon fire at 1:25 PM on a 12:50 probe β€” on Twelve Data's revised bars it fired at 1:30 PM on a 1:10 PM probe; verdict unchanged (MISS). Bar revisions also nudged the close (764.03 β†’ 764.02) and probe (761.17 β†’ 761.16). 11:10 PM re-run: engine current + replay returned identical state, signals, fires and grades β€” no new fire since the 10:10 PM edition.
Market is closed; the 15:55 ET bar is the session's final bar, re-fetched and re-computed this run at 23:10 ET β€” identical values to the 22:10 run, not a carried-forward intraday read.
Technical momentum + reversal module β€” separate from the factor composite above. Computed by the momentum engine from verified Twelve Data 5-min bars (VWAP Β· 14 EMA / 50 / 200 SMA Β· structure Β· RSI-14 Β· volume at the levels). Refreshed hourly, not a live stream. If the bars go stale, this panel shows STALE / NO CALL rather than a guess. Rules: MOMENTUM-RULES v1 in RULES.md; every state is archived in spy-bias-history.jsonl and reversal calls are graded after the close.
Source: momentum_engine.py current + replay on verified Twelve Data 5-min bars (final bar 15:55 ET, market closed; engine re-run at 23:10 ET β€” state, signals, fires and grades all identical to the 22:10 edition); hourly refresh, not streaming; STALE / NO CALL if bars stale

Why β€” the seven factors

Each factor is scored βˆ’2 to +2 from evidence. The full evidence, sources, and checks are kept β€” nothing is trimmed.

Technical structure

-1 Β· Mildly bearishweight 20 of 100

SPY closed at 764.02 (βˆ’1.17% on the day; S&P 500 βˆ’1.21%, Nasdaq βˆ’2.6% β€” its worst day since June), under the 50-day (768.29) but well above the 200-day (726.29). The session's last act was absorption: a 3:00 PM probe printed 761.16 β€” 0.11% through the 762 floor β€” with no 5-min close through it, and price reclaimed VWAP (763.71) and the 14 EMA into the close, finishing +0.27% above the floor. The 769–770 ceiling was never retested. A violent session inside a still-intact long-term uptrend caps at βˆ’1, not βˆ’2.

Source: Twelve Data 5-min bars via momentum_engine.py (15:55 ET final bar, close 764.02, market closed); WSJ market wrap, Oct 22, 2026 (S&P βˆ’1.2%, Nasdaq βˆ’2.6%); MarketBeat SPY snapshot (50-day); TrendEdge (200-day) β†—

No change since the 22:10 edition β€” market closed, final bars unchanged on this run's engine re-fetch at 23:10 ET (close 764.02, VWAP 763.71, RSI 62.4 all identical). βœ“ βˆ’1.17% day change; S&P 500 βˆ’1.21% close corroborates Β· βœ“ Floor held on closes (probe through 762, no close through) Β· ⚠ 200-day single-source (TrendEdge)

Earnings

-1 Β· Mildly bearishweight 15 of 100

Final after-hours update β€” WDC's slide deepened into the extended-hours close: StockAnalysis put the final after-hours print at $331.19, βˆ’6.49% as of 7:59 PM ET (single-source late print), below the $335–$337 evening band (a later Investing.com snapshot via ABC Money put it at $337.01, βˆ’4.85%) β€” the beat was sold all evening, and the earnings call added a capex flag: CNBC reported WDC fell ~6% in early after-hours trading after management flagged higher capital spending (4–6% of sales for five years, higher in the first two) and rising input costs, despite strong internals (revenue $4.38B vs ~$4.14B consensus, adj. EPS $4.64 vs $4.11, Q2 guide $5.0–5.2B / $5.60–6.00 well above consensus, adj. gross margin 58.1% vs 54.4% last quarter, dividend +17%, $1.0B buyback) and after closing βˆ’6.43% at 354.19. Evening snapshots of the same slide: Barron's βˆ’4.4% to $338.66, MarketBeat $335.28 (βˆ’5.34% extended at 7:07 PM ET), Morningstar/Dow Jones (7:12 PM ET) βˆ’5% to $336.50 β€” even a clean beat is being sold in this tape, which keeps WDC from offsetting the day. The day's index-weight internals story is unchanged: META closed βˆ’6.98% (648.85) on its $34.9B Q3 capex / βˆ’$2.1B FCF deficit / ~$825B commitments / new nonvoting share class despite the +26% revenue beat; TSLA closed βˆ’3.08% (374.58) on weak internals (net income βˆ’43%, operating income βˆ’56%, capex guide cut to ~$20B). Chips were the epicenter (chip index βˆ’6.7%; INTC βˆ’8.04% in-session β€” INTC reports Oct 29, not tonight). PG (this morning) beat on core EPS ($2.00 vs $1.89) with organic sales +4% and closed +5.58%, though gross margin fell ~150bp. Other after-hours movers tonight β€” Deckers βˆ’7% on a cut outlook, Sallie Mae βˆ’5%, Bloom Energy βˆ’5% (Morningstar/Dow Jones) β€” are not index-weight names. The +29.0% blended Q3 backdrop (FactSet) caps this at βˆ’1. Tomorrow pre-market: AXP and SLB β€” neither is a mega-cap tech weight.

Source: CNBC via SourceFirst, Oct 22, 2026 (WDC fell ~6% in early after-hours; capex 4–6% of sales flagged, rising input costs; revenue $4.38B, adj. EPS $4.64 vs $4.09 LSEG); Morningstar / Dow Jones Stocks to Watch, Oct 22, 2026 19:12 ET (WDC βˆ’5% to $336.50 after hours; Deckers βˆ’7%, Sallie Mae βˆ’5%, Bloom Energy βˆ’5%); Barron's, Oct 22, 2026 (WDC βˆ’4.4% after hours to $338.66); MarketBeat WDC earnings page, Oct 22, 2026 (extended trading $335.28, βˆ’5.34% as of 7:07 PM ET); Finnhub (WDC regular close 354.19, βˆ’6.43%; META βˆ’6.98%, TSLA βˆ’3.08%, PG +5.58%); Morningstar / Dow Jones, Oct 22, 16:30 ET (WDC internals); FactSet Earnings Insight, Oct 16, 2026; StockAnalysis WDC statistics page, Oct 22, 2026 (after-hours $331.19, βˆ’6.49% as of 7:59 PM ET) β†—

Cross-checked: WDC's after-hours slide is now confirmed across four evening sources β€” Barron's (βˆ’4.4% to $338.66), MarketBeat ($335.28, βˆ’5.34% at 7:07 PM ET), Morningstar/Dow Jones (βˆ’5% to $336.50 at 7:12 PM ET) and CNBC (~βˆ’6% in early after-hours) and a later Investing.com snapshot ($337.01, βˆ’4.85%) β€” a $335–$337 evening band; the snapshots differ by time and venue, not direction, so they are flagged as a band rather than asserted as one exact price. The capex/input-cost flag is CNBC single-source reporting of the call β€” noted, scored mildly. WDC internals cross-checked Morningstar-Dow Jones vs Shacknews vs 8-K summary and Barron's (58.1% adj. gross margin, Q2 revenue guide $5.0–5.2B). META/TSLA/PG closes are Finnhub regular-session closes carried from the 17:10 edition. No score change at 23:10: the late slide to $331.19 at 7:59 PM ET (StockAnalysis, single-source) extends the evening band down to $331–$337; the sustained negative reaction and capex flag reinforce, but do not deepen, the βˆ’1 (FactSet backdrop cap). No new index-weight earnings verified since the 22:10 edition (23:10 scan of Reuters/AP/CNBC/MarketWatch headlines found no new index-weight earnings).

Macro & the Fed

-1 Β· Mildly bearishweight 10 of 100

No new macro prints since the 22:10 edition. Initial claims 194K vs ~200K consensus β€” a genuine beat the market ignored all day. LEI unchanged in September. Friday brings flash PMIs and consumer sentiment (the next test). FOMC lands Wed Oct 28 with the Fed in blackout: markets price ~89% hold next week with December hike odds ~76% (TradingView) β€” no dovish relief in the path while the oil shock feeds inflation.

Source: Verified session tape (main-chat market log); Federal Reserve FOMC calendar; Friday data calendar via post-close market briefs

Cross-checked: claims Reuters + DOL via TheStreet; LEI via CAMS (Reuters-sourced); rate pricing single-source (TradingView) β€” flagged, scored mildly. No fresh print this hour β€” carried from the verified midday record; Friday's PMI/sentiment are scheduled, not yet printed.

Rates / dollar / liquidity

-1 Β· Mildly bearishweight 10 of 100

Closing prints replace the 1:08 PM carries: the 10-year settled at 4.953% (βˆ’19.3bp on the day) β€” the WSJ notes it dropped below 5% for the first time in nearly a month, with the sharpest one-day fall in more than three years, on a flight-to-safety bid that did NOT support equities. The level (~4.95%) is still restrictive, which keeps this factor negative, but the direction cushions multiples instead of tightening them. DXY slid to 101.43 by 2:30 PM EDT (DTN, single-source) β€” softer dollar, consistent with UUP's βˆ’0.10% close at 28.89.

Source: Post-close market brief, Oct 22, 2026 (10Y 4.953%, βˆ’19.3bp); WSJ market wrap, Oct 22, 2026; DTN Oil Update, Oct 22, 2026 (DXY 101.430 at 2:30 PM EDT); Twelve Data (UUP close)

10Y close cross-checked: 4.953% (post-close brief) vs WSJ ('below 5%, ~0.2pp fall, sharpest in >3 years') vs the 1:08 PM 4.97% print β€” a consistent progression, not a conflict. DXY 101.43 is SINGLE-SOURCE (DTN) this edition β€” flagged; it supersedes the stale 101.79 9:31 AM pulse. The superseded 5.15% tape value from the 13:05 edition remains logged in the archive.

Energy & geopolitics β€” OVERRIDE

-2 Β· Strongly bearishweight 30 of 100

Settlements still confirm the shock β€” and evening futures are holding it: WTI (Dec) settled $99.47, +2.39% (session high $100.17 β€” third straight touch of triple digits) and Brent (Dec) settled $113.17, +4.00% (high $113.47, a peak since late April), after Houthi strikes on Saudi energy infrastructure (Shaybah field, Dammam airport), IRGC claims of tanker strikes near Hormuz, a U.S. diplomatic drawdown from Saudi Arabia, and reported U.S./Israeli planning for post-midterm strikes on Iran. Post-close futures reads are essentially flat vs the settlements (After Market Brief: WTI 99.29, Brent 112.99 β€” a slight easing, flagged, not a reversal). Reuters' early-Asia Friday read (00:30 GMT) has Brent at $112.96, βˆ’0.2% β€” flat against the settle; its WTI figure ($98.12 on a stated βˆ’0.3% move) does not reconcile with the $99.47 settle and is flagged in the data notes, not used. An oil shock at these levels is simultaneously an inflation impulse and a consumer tax β€” still the dominant driver, override stays on.

Source: DTN Oil Update, Oct 22, 2026, 3:00 PM CDT (settlements: WTI $99.47 +2.39%, Brent $113.17 +4.00%); Bloomberg via RigZone, Oct 22, 2026 (Brent settled ~$113, +4%; WTI closed above $99); NY Post market wrap (Brent $113.17, WTI $99.47) β†—

Cross-checked settlements: DTN ($99.47 / $113.17) = NY Post ($99.47 / $113.17) exactly, Bloomberg/RigZone consistent (~$113 / above $99). Evening futures (After Market Brief, Oct 22: WTI 99.29 / Brent 112.99) sit slightly below settlements β€” flagged as a post-close futures wiggle, settlements remain the headline values. No new geopolitical headline verified since the 22:10 edition (23:10 scan of Reuters/AP/CNBC/MarketWatch headlines found no new escalation or de-escalation; Reuters' early-Asia Friday oil piece is the same 00:30 GMT piece already flagged, and CNBC TV18's early-Friday note has Brent above $113 / WTI near $99, consistent with the settlements). Flagged conflict: that Reuters piece prints WTI at $98.12 while describing a βˆ’0.3% move β€” off the cross-checked $99.47 settle, βˆ’0.3% implies ~$99.20, and $98.12 matches Thursday's early-session level; treated as an apparent reporting error in that source, settlements remain the headline values.

Positioning & sentiment

-1 Β· Mildly bearishweight 5 of 100

No change post-close: VIX closed ~19.1 (19.03–19.14 across closing sources; +14–15% on the day from a 16.64 prior close) β€” high-teens and elevated, hedges paid for, but not capitulation pricing (mid-20s). VIX futures products confirm the bid (VIXY +6.31% at the close). The day's tape was violent in both directions (probe through the floor, then a VWAP reclaim into the close) β€” size for the range.

Source: Closing VIX prints: post-close market brief (19.08, +14.39%), Sigmanomics Cboe close summary (19.14, +15.02% from 16.64), Portfolio Terminal Cboe close (19.05); Finnhub (VIXY close +6.31%)

VIX close cross-checked as a range with a small flagged conflict: 19.03–19.14 across four closing sources (brief 19.08, Sigmanomics 19.14, Portfolio Terminal 19.05, futures dashboard 19.03) β€” headline uses ~19.1; no single value is asserted as exact. This replaces the 13:08 latest-print carry (19.1) β€” same level, now a verified close. Put/call UNVERIFIED β€” recorded as missing and not scored.

Credit & breadth (lie detectors)

+1 Β· Mildly bullishweight 10 of 100

Non-confirmation of the bear case held at the close and is unchanged this edition: HYG closed at 77.09, +0.14% (Twelve Data closing print) while SPY fell 1.17%, so credit never broke. The index-level picture agrees: the Dow finished flat (+0.02–0.03%) while the Nasdaq fell 2.6% and the chip index 6.7% β€” damage concentrated in mega-cap growth/tech, defensives bid (PG +5.58% after its beat; staples led at midday). Breadth's last full sector read remains 1:08 PM (6 of 11 sectors higher) β€” not refreshed post-close and labeled as such.

Source: Twelve Data (HYG close 77.09, +0.14%); WSJ + NY Post closing wraps, Oct 22, 2026 (Dow flat, Nasdaq βˆ’2.6%, chips βˆ’6.7%); CAMS Midday Market Check, Oct 22, 2026 (sector breadth) β†—

HYG closing print carried from the 16:10 edition's fresh Twelve Data quote, re-confirmed unchanged at 23:10 β€” unchanged because it is the close itself. Index-divergence cross-checked WSJ vs NY Post vs post-close briefs (Dow +0.02–0.03%, S&P βˆ’1.21%, Nasdaq βˆ’2.59/βˆ’2.6%). Breadth sector detail NOT refreshed post-close (13:08 read carried and labeled); RSP close not verified this run β€” recorded missing, not filled in.

✏️ Corrections & data notes