INDICATOR · Index / Divergence
Oyamori S&P Pulse
A divergence engine for the S&P 500 — it reports whether the index is moving with the names that would have to be carrying it, or without them.
SPY 10m, lower pane. The read is CONFIRMED BEAR — the index is down and participation agrees, with MAG7 at 0 up / 6 down, QQQ confirming and breadth negative. The orange x-crosses on the pulse line mark where index and participation previously disagreed. Scope reads chart matches, so the score is about the symbol on screen.
A divergence engine for the S&P 500 ecosystem. It answers one question a price chart cannot: is the index moving with the names that would have to be carrying it, or without them?
Why not just a score
The obvious version of this indicator sums SPY + QQQ + the MAG7 into one −100…+100 number and prints it big. That version is close to useless, and it is worth saying why out loud.
SPY and QQQ run roughly 0.9 correlated. The MAG7 are 30–35% of the S&P 500 by weight and the dominant driver of both. A composite of those three is not three facts — it is one fact, where the S&P is going, counted three times. The score would be green whenever SPY is green, and a reading of +75 would tell you nothing the chart already showed you for free.
So the level is not the headline here. The divergence is.
The three reads
| Read | Meaning |
|---|---|
✓ CONFIRMED |
Index direction and participation agree — the move has a floor under it |
UNCONFIRMED |
The index has a direction, participation is flat — nobody is behind it |
⚠ DIVERGENT |
Index and participation point opposite ways — the warning |
SPY grinding to a new high on 3-of-7 MAG7 green and negative breadth is a genuinely different tape from the same high on 6-of-7 and positive breadth.
Those two are identical on a price chart. That disagreement is the entire product.
The two halves
Direction is the index talking about itself — VWAP side, EMA 8/21, 5-bar momentum.
Participation is everything else — QQQ, cap-weighted MAG7, market breadth.
The index is deliberately excluded from the participation half. If both halves contained SPY they could never disagree, and disagreement is the only thing here worth printing.
Breadth
Advance/decline counts every listed name equally, so a mega-cap-led melt-up with 300 decliners reads negative — a reading the other inputs are structurally unable to produce. It carries 15% weight by default and it is the most valuable 15% in the script.
| Mode | Reads | Use with |
|---|---|---|
| Net | sign of the value | USI:ADVDEC.NY, USI:ADVDEC.NQ |
| Percent | distance from 50 | S5TW, S5FI |
Picking the wrong mode for the symbol inverts or flattens the reading. Not cosmetic.
Missing ≠ neutral
If a component is unavailable on your plan, its weight is removed from the denominator — never scored as zero. The dashboard says so explicitly.
A missing input scored as neutral would drag the composite toward zero and read as "no signal" when the truth is "no data". Those are two different states and they must not share a number. Every component in this script obeys that rule.
Scope is enforced
Every input is a fixed ticker. The script does not read your chart symbol at all.
Open it on gold and it still reports the S&P's pulse, correctly, and tells you the chart does not match. There is no way to make the score "about" whatever symbol you happen to have open, so there is nothing to misread.
This also means it works on an SPX chart. SPX has no volume and therefore no VWAP — anchoring to SPY regardless of chart solves that.
Repainting
Confirmed bars by default. On a realtime bar the score shown is the last closed bar's. One bar of latency, zero intrabar flicker, and the history matches what the script actually said at the time.
The live-tick reading is a toggle. It repaints, and the tooltip says so.
Velocity
+82 → +76 → +68 → +55 matters more than +55. A level says where participation is; velocity says whether it is arriving or leaving.
EMA-smoothed, because raw bar-to-bar change on a nine-symbol composite is close to pure noise. Reads as building, steady or decaying, with the per-bar figure beside it.
MAG7 weights drift
Equal-weighting NVDA against TSLA is wrong — their impact on the index differs several times over. The defaults are approximate S&P 500 index weights as of 2026-08.
They will go stale. Pine has no access to live index weights, so they cannot self-update. They are inputs, the tooltip carries the as-of date, and they should be treated as a rough shape rather than a figure to trust to two decimals. Set them all equal if you would rather not carry a stale number.
Alerts
| Alert | Fires |
|---|---|
| Divergence opened | Index and participation start disagreeing |
| Divergence closed | They agree again |
| Move confirmed | Participation catches up to the index |
| Move unconfirmed | The index has a direction and nothing is behind it |
There is deliberately no "strong bull pulse" alert. It would fire when SPY is trending up, which the chart already told you.
What this is not
Every threshold in this script is a guess. It ships with no hit-rate column and nothing in it has been measured against history — the direction and participation thresholds are round numbers, not findings.
Divergence is also not a timing signal. An index can diverge from its participation for a long time before anything happens, and sometimes nothing happens at all. This is context for a decision, not the decision.
Data used
Index proxy AMEX:SPY Direction weight 30%
Confirmation NASDAQ:QQQ QQQ weight 15%
Participation MAG7, cap-weighted MAG7 weight 35%
Breadth USI:ADVDEC.NY Breadth weight 15%
Relative QQQ vs SPY ROC Relative weight 5%
Ten data requests of a possible forty, 44 inputs. Every weight and every symbol is adjustable.
This is an analysis tool, not financial advice. It does not place trades and it does not predict price. Test it on your own charts before you let it inform a decision.
Author: Toni Maxx — Oyamori.com