How Far Can a Stock Stray From Its 200-Day Average? Introducing the Deviation Watch.

Open any chart of a large US stock, draw a 200-day moving average across it, and a single visual idea jumps out: the line acts like gravity. Prices wander above and below it, sometimes for months, but they rarely wander very far. When they do, something interesting is usually going on — a real secular trend, an earnings catastrophe, a sector rotation, or just a bad data feed.

We wanted a daily list of those outliers. Not as a buy or sell signal, but as a starting point for "what is unusual today, and is it unusual for a good reason or a stupid one?" That list is now live at pattern-vista.com/deviation, and this post is the methodology behind it.

TL;DR. Every night we compute (close − MA200) / MA200 for every stock in our S&P 500 + Nasdaq 100 + major-ETF universe, filter out splits and corrupt rows, and rank both ends — the most overextended and the most depressed. On May 27, 2026, the top five overextended names were all AI-semiconductor stocks (MU, INTC, STX, WDC, AMD), every one of them more than +110% above its 200-day. The top depressed list was a different story entirely: two of the five are leveraged inverse ETFs whose deviation is a structural decay artifact, not a "cheap stock." Reading the list well means knowing the difference.


What does "deviation from the 200-day moving average" actually mean?

It is the percent gap between a stock's current closing price and the average of its closing prices over the last 200 trading days. We compute it as:

deviation = ( closetMA200t ) / MA200t

A stock at +18% deviation is trading 18% above its 200-day average. A stock at −30% deviation is trading 30% below. The sign tells you which side of the long-term trend the price is on; the magnitude tells you how far away.

Two hundred trading days is roughly nine and a half calendar months. The MA200 therefore averages across two earnings cycles, several macro headlines, and at least one full sector rotation. By construction it lags the spot price — which is the point. It is supposed to be a slow, boring number that says "this is where this stock has been living lately." When the current price is far from it, something has changed.

Why the 200-day specifically, and not the 50-day?

Both are useful. They answer different questions.

The 50-day is a swing-trader's anchor. It reacts to a recent rally or selloff inside a few weeks, and a 10% gap from the 50-day is normal mid-trend. Using it for a mean-reversion screen produces a lot of false positives — most stocks are 10% away from their 50-day most of the time.

The 200-day is the long-term mean. Institutional benchmarks (the trend-following CTAs, the volatility-targeted books, every algo with a "regime filter") are built around it. When a price is far above its 200-day, the stock has outrun the long-term trend that most quantitative money respects. When it is far below, the long-term trend has been broken. Those are the two states where the largest pools of money typically rethink their position size — which is why prices tend to reconnect with the MA200 eventually, even when they take a long time getting there.

We picked the 200-day for the deviation watch because it filters out exactly the kind of noise the 50-day is full of, and surfaces the names where a multi-month story has built up enough pressure to be worth a human's attention.

Why we publish both directions

Our pattern win-rate audit found that, in our 2025 sample, the alpha was concentrated on the downside: bearish trend calls and divergence-against-uptrend signals beat SPY more reliably than bullish trend calls did. Looking for stocks that have lagged the market trend was, on average, the more profitable inefficiency to mine.

But "more profitable on average" is not "the only side worth watching." The overextended list is where risk lives. If you already own a name and it shows up at the top of the +deviation list, you are sitting on a position that has run far ahead of its long-term mean — that is the moment to ask whether your thesis still justifies the size you have on. Both lists exist on the same page so you can use them in the same sitting.

Reading today's snapshot

Here is what the live ranking looked like at the close on May 27, 2026 (latest snapshot at the time of writing).

Top 5 overextended (close well above MA200)

| # | Ticker | Close | MA200 | Deviation | |---|--------|-------|-------|-----------| | 1 | MU | 928.41 | 330.45 | +180.96% | | 2 | INTC | 121.77 | 48.20 | +152.63% | | 3 | STX | 870.66 | 359.41 | +142.25% | | 4 | WDC | 530.60 | 225.80 | +134.98% | | 5 | AMD | 495.54 | 234.15 | +111.64% |

Every name on that list is a memory, storage, or compute supplier into the AI build-out. The signal here is not "these stocks are overpriced and will mean-revert next week." It is "these prices reflect a multi-quarter secular thesis the market has fully committed to." A stock can stay 150% above its MA200 for the entire length of a sector cycle. Trying to short MU at +180% deviation in May 2026 because "it has to come back to the average" is the kind of trade that funds a generation of momentum-strategy returns.

This is where the watchlist earns its keep as a contextual tool rather than a mechanical signal. It tells you these names are in a regime where ordinary mean-reversion intuitions do not apply. Position-sizing, hedging, and stop placement should be calibrated to that.

Top 5 depressed (close well below MA200)

| # | Ticker | Close | MA200 | Deviation | |---|--------|-------|-------|-----------| | 1 | SCO | 6.87 | 14.78 | −53.52% | | 2 | CSGP | 32.32 | 61.38 | −47.34% | | 3 | INTU | 307.73 | 553.68 | −44.42% | | 4 | BSX | 50.46 | 85.76 | −41.16% | | 5 | UVXY | 30.39 | 46.84 | −35.12% |

This list looks similar at a glance but is structurally different.

  • SCO and UVXY are leveraged ETFs — SCO is 2× inverse crude oil; UVXY is 1.5× short-term VIX futures. Both products decay structurally in any market that is not in a sustained move in their target direction, because of the daily-rebalance + contango math. Their deviation from MA200 is not a measure of cheapness; it is a measure of how much volatility-drag they have eaten. These belong on the "don't touch as a mean-reversion candidate" list, full stop.
  • CSGP, INTU, BSX are real-business names that have had multi-quarter declines from prior highs. Each is a candidate for the kind of "find a wounded leader" thesis the alpha audit hinted at — but they are exactly that: candidates for further work, not entries.

If you read the depressed list and only learn one habit from this watchlist, let it be: always check whether the name is a leveraged or inverse product before reading "extreme negative deviation" as bullish. Our list does not pre-filter them out, because some users intentionally want to see them; you should pre-filter them in your head.

How we keep the data clean

The deviation calculation is arithmetic. The hard part is keeping the inputs honest.

Our historical price data comes from a daily-bar provider that does not retroactively adjust for stock splits. The "adj close" column it exposes is a misleading alias for close, despite the name. We discovered this the hard way during the first live run, when BKNG showed up with a +1,000%+ deviation because its September-2025 prices were sitting in the cache at ~$5,475 alongside a May-2026 close of $156 — a ~30:1 split that the data feed had silently ignored.

That gave us a sharper problem statement: the deviation watch must reject any series that contains an un-adjusted corporate action, because the MA200 will be silently wrong by a factor of 30 (or 2, or 3) and the deviation will be a fiction.

We use a two-layer defense:

  1. Day-over-day jump filter. For every ticker, we walk the last 200 closes and check the largest single-day absolute return. Anything above 25% is treated as a likely un-adjusted split or a corrupt print; the series is excluded from that day's ranking entirely. This is conservative — a real one-day +25% earnings move on a single-name stock does exist — but the false-exclusion cost is low and the false-inclusion cost (a poisoned MA200) is enormous.
  2. Sanity cap on the result. After the MA is computed, we cap |deviation| at 200%. Anything beyond that is treated as still-corrupt and dropped. The cap was originally 100%, but a real AI-semi run in May 2026 pushed five legitimate names (ARM, INTC, MU, STX, WDC) past +100% deviation, and we did not want to silently exclude them. Raising the cap to 200% admitted the real signal while still rejecting the absurd split-distorted rows.

The result on a typical evening: we compute ~270 valid rows out of ~290 tickers in the universe, with about ten excluded for split-like jumps (BKNG, CHTR, DDOG, MSTR, NXPI on the most recent run) and a handful for the sanity cap. The remaining set is ranked.

How to use the deviation watch

Three ways, depending on what you are: a human reader, a CLI user, or an AI agent.

From the web

The full daily ranking lives at pattern-vista.com/deviation. Free accounts see the top 2 of each direction; paid accounts unlock the full top 20 plus historical pattern win-rates on the rest of the site.

From the command line

For agents and analysts who want the data in a script, the Pattern Vista CLI is published on PyPI:

pip install pattern-vista                    # or: uvx pattern-vista
pv config set-key pv_live_xxxxxxxxxxxxxxxx
pv deviation --under --limit 20              # JSON for agents
pv deviation --under --limit 20 --table      # human-readable
pv ticker NVDA                               # current deviation + recent patterns

The CLI hits the same Supabase backend as the website, with the same tier gating enforced server-side. API keys are managed at /patterns/api-keys. Output is JSON by default — the format an LLM agent can drop straight into a tool-use response without any parsing scaffolding.

Caveats and limitations

The deviation watch is a screen, not a signal. Three honest limits to keep in mind:

  • Mean reversion is a tendency, not a guarantee. Strong trends can persist far longer than seems reasonable. The May-2026 AI-semi block at +110%+ deviation has, at the time of writing, sat there for two months without reverting.
  • Sector context matters. A single chip name at +150% deviation while the whole semi index is at +80% is a different story than the same name in isolation. Our list does not normalize for sector beta; that work is left to the reader.
  • The universe is finite. We cover S&P 500 + Nasdaq 100 + a curated set of major US ETFs (about 290 names on a typical day after filters). Small-caps, foreign listings, and crypto are not in this watch.

If you want a sense of which kinds of technical signals have actually paid off in our sample, that lives in the pattern alpha audit. Combining the deviation screen with the win-rate audit is how we read the dashboard internally.

Frequently asked questions

What does it mean when a stock is 30% above its 200-day moving average?

It means the current closing price is 30% higher than the average of the last 200 daily closes. In a trending stock this is fairly common; in a range-bound stock it is a sign of an unusual rally and a candidate for either a continuation breakout or a mean-reversion pullback, depending on what the underlying news flow says.

Is a high MA200 deviation a buy or a sell signal?

Neither by itself. High positive deviation marks names where the price has outrun its long-term mean — useful for risk management on existing longs, but historically a poor short-entry signal because momentum can persist. High negative deviation marks names where the long-term trend has broken — useful for accumulation research, but not without checking that the deviation is not a structural artifact (leveraged ETF, un-adjusted split, going-concern issues).

How often is the ranking updated?

Once per US market trading day, after the close. The cron job runs at 21:00 PT and publishes the new snapshot before the next morning's open.

Why use the 200-day instead of the 50-day for mean-reversion screening?

The 50-day is too sensitive to recent moves to be useful as a mean-reversion anchor — most names sit 5–10% away from their 50-day most of the time, so a 10% gap is not informative. The 200-day filters that noise out and surfaces only the names where a multi-month story has built up.

Can I access the deviation data programmatically?

Yes. The Pattern Vista CLI on PyPI exposes the rankings as JSON. Generate an API key at /patterns/api-keys, then run pv deviation --under or pv ticker SYMBOL. AI agents using tool-use protocols can call the CLI directly without any custom integration.

What stocks are in the universe?

The S&P 500 components, the Nasdaq 100 components (with a small overlap), and a curated list of major US ETFs (SPY, QQQ, IWM, sector SPDRs, and a few popular volatility / inverse products). Roughly 290 names appear in the ranking on a typical day after our split and sanity filters.


The deviation watch will not tell you what to buy. It will tell you which names the market is currently treating as unusual, separated by direction, every trading day. The rest — sector context, fundamental story, position sizing — is still your job. We just wanted the list itself to stop being something every analyst rebuilds from scratch in a spreadsheet every Sunday night.