What Is the Efficient Market Hypothesis?
The efficient market hypothesis says prices already carry known information. See its three forms, and the weak form measured on five years of US stock data.
The efficient market hypothesis is the claim that a security's price already carries the information available about it, which leaves any remaining pattern too small and too short-lived to trade profitably after costs. Eugene Fama organized the idea into three forms in a 1970 review paper: weak, semi-strong, and strong. Each form names a different body of information that is already inside the price, and each one rules out a different way of making money. This page states what the three forms forbid, then measures the weakest of them against five years of daily prices in household names.
What are the three forms of market efficiency?
The forms nest inside one another. Everything the weak form claims, the semi-strong form claims as well, plus more.
- Weak form: past prices and past volume are already in the price. Chart shapes, trend rules, and momentum filters built only out of price history carry no dependable edge under this version.
- Semi-strong form: every piece of public information is already in the price, including filings, guidance, analyst notes, and economic releases. Reading a public document after its publication carries no edge under this version, since the price adjusted while everyone else was reading the same document.
- Strong form: all information sits in the price, private material included. Almost nobody defends this version. Insider trading law exists on the premise that non-public information is worth real money.
The hypothesis is a statement about dependability, not about perfection. Nobody claims prices are always right. The claim is that the errors are hard to identify in advance and hard to harvest once trading costs come out.
Weak form: does yesterday's move predict today's?
The cleanest test of the weak form is the correlation between one day's return and the next. A strongly positive figure would mark trends that persist. A strongly negative figure would mark reliable snap-backs. Either one would be tradable. The panel below measures lag-one autocorrelation of daily returns for twelve household names over the five years from July 2021 through June 2026.
The exact SQL behind every number
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), window_start) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY','AAPL','MSFT','KO','JNJ','XOM','JPM','WMT','NVDA','TSLA','PG','HD')
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2021-07-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker, dt
),
returns AS (
SELECT ticker, dt,
close_px / lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY dt) - 1 AS ret
FROM daily
),
paired AS (
SELECT ticker, ret,
lagInFrame(ret) OVER (PARTITION BY ticker ORDER BY dt) AS prev_ret
FROM returns
WHERE ret IS NOT NULL AND ret > -0.5 AND ret < 0.5
)
SELECT ticker,
count() AS trading_days,
round(corr(ret, prev_ret), 3) AS lag1_autocorrelation,
round(abs(corr(ret, prev_ret)), 3) AS abs_autocorrelation
FROM paired
WHERE prev_ret IS NOT NULL
GROUP BY ticker
ORDER BY abs_autocorrelation DESCThe largest reading in absolute terms belongs to WMT at 0.057, and the smallest belongs to KO at -0.005. Every name in the set lands within a few hundredths of zero across roughly 1252 trading days each. A correlation of that size accounts for well under one percent of the variation in the next day's return. Signs alternate across the twelve names with no pattern that survives inspection, which is the weak form doing exactly what it says it will do.
What follows a large single-day move?
A correlation is an average over every session, and an average can hide behaviour at the edges. Sorting each day in the same sample by the previous day's move, then measuring what the next day did, checks whether extreme sessions behave differently from ordinary ones.
The exact SQL behind every number
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), window_start) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY','AAPL','MSFT','KO','JNJ','XOM','JPM','WMT','NVDA','TSLA','PG','HD')
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2021-07-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker, dt
),
returns AS (
SELECT ticker, dt,
close_px / lagInFrame(close_px) OVER (PARTITION BY ticker ORDER BY dt) - 1 AS ret
FROM daily
),
paired AS (
SELECT ticker, ret * 100 AS ret_pct,
lagInFrame(ret) OVER (PARTITION BY ticker ORDER BY dt) * 100 AS prev_pct
FROM returns
WHERE ret IS NOT NULL AND ret > -0.5 AND ret < 0.5
)
SELECT multiIf(prev_pct <= -3, '1. down 3% or more',
prev_pct <= -1, '2. down 1 to 3%',
prev_pct < 1, '3. flat, within 1%',
prev_pct < 3, '4. up 1 to 3%',
'5. up 3% or more') AS prior_day_move,
count() AS observations,
round(median(ret_pct), 3) AS next_day_median_pct,
round(100 * countIf(ret_pct > 0) / count(), 1) AS next_day_up_share_pct
FROM paired
WHERE prev_pct IS NOT NULL
GROUP BY prior_day_move
ORDER BY prior_day_moveThe bottom bucket, sessions that came after a move of 1. down 3% or more, was followed by a rising day 52.9% of the time across 664 observations. The top bucket, following a move of 5. up 3% or more, was followed by a rising day 53.9% of the time. The ordinary middle bucket, 3. flat, within 1%, came in at 53.1%. All five buckets sit within a few points of a coin flip, and the median next-day return in every bucket is a fraction of one percent: 0.175% after the sharpest declines, 0.186% after the sharpest advances.
A rule that bought after a 3% drop and a rule that bought after a 3% jump would have met almost the same distribution of next days. The gap between the buckets is smaller than a typical bid-ask spread plus commission on a retail-sized order, which is the practical form the weak form takes: the pattern has to be bigger than the cost of trading it before it is an edge at all.
Semi-strong form: what the picking record shows
The evidence most often cited for the semi-strong form is not a correlation. It is the long-running finding that the majority of active portfolios lag a plain index over multi-year windows. A simple version of that arithmetic sits inside a basket of large, heavily covered US companies measured year by year against the S&P 500 tracker.
The exact SQL behind every number
WITH daily AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), window_start) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY','AAPL','MSFT','NVDA','AMZN','GOOGL','META','TSLA','JPM','XOM','JNJ','WMT','PG','KO','PEP','HD','MRK','LLY','COST','CVX','ORCL','CSCO','INTC','VZ','MCD','NKE','DIS','CAT','HON','TXN','AMD','NFLX','MO','LMT','UNH')
AND toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2021-01-01')
AND toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2025-12-31')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker, dt
),
per_year AS (
SELECT ticker, toYear(dt) AS yr,
argMin(close_px, dt) AS first_px,
argMax(close_px, dt) AS last_px
FROM daily
GROUP BY ticker, yr
),
perf AS (
SELECT yr, ticker, (last_px / first_px - 1) * 100 AS ret_pct FROM per_year
),
bench AS (
SELECT yr, ret_pct AS index_pct FROM perf WHERE ticker = 'SPY'
)
SELECT toString(perf.yr) AS year,
round(any(bench.index_pct), 1) AS index_return_pct,
round(median(perf.ret_pct), 1) AS median_stock_return_pct,
countIf(perf.ticker != 'SPY') AS stocks_measured,
round(100 * countIf(perf.ticker != 'SPY' AND perf.ret_pct > bench.index_pct)
/ countIf(perf.ticker != 'SPY'), 1) AS pct_beating_index
FROM perf
INNER JOIN bench ON perf.yr = bench.yr
GROUP BY perf.yr
ORDER BY perf.yrAcross the 5 calendar years measured, fewer than half of the 34 names beat the index in four of them. The share ran from 32.4% in 2024 up to 58.8% in 2022, the one down year in the window, when the index returned -20% against a median name at -13.3%. In 2024 the index returned 24% while the median name in the basket returned 12.7%.
None of this proves the semi-strong form. A basket of large caps is not the whole market, one tracker is not every benchmark, and five years is a short sample. What it does show is the arithmetic that makes the hypothesis hard to wave away. An index is a weighted average of its own members, which makes beating it a minority outcome by construction, and the research and trading costs of trying come out of the minority's share. A related view of how uneven those member returns are appears in the year-by-year spread between the index column and the median column above.
The paradox at the center
Sanford Grossman and Joseph Stiglitz published the sharpest objection in 1980, and it is an objection worth stating honestly. Information is expensive to gather. If prices already held all of it, nobody would pay to gather any, and that gathering is the very mechanism that puts information into prices. A perfectly efficient market cannot sit in equilibrium. What can exist is a market efficient enough that the profit from research roughly covers what the research costs.
That weaker version is the one most practitioners work with, and it fits the data above better than the absolute version does. It describes a market where edges exist, stay small, and get competed away at the speed of the money hunting them.
Documented anomalies sit alongside the hypothesis rather than demolishing it. The low-volatility anomaly is among the best measured: calmer stocks have historically kept pace with wilder ones at a fraction of the risk, a pattern the standard risk-and-return model does not accommodate. Momentum, value, and small-company effects have similar histories. Each is measured over decades, each has long stretches where it vanishes, and several narrow after publication.
What the hypothesis means for a reader
The practical reading is narrow, and it is not a forecast about any market. Under any version of the hypothesis, the inputs an investor actually controls are costs, taxes, diversification, and behaviour, and none of those four require predicting anything. A fee compounds against a portfolio in the same arithmetic that a return compounds for it.
Two habits fit this framing without asking anyone to forecast. Dollar-cost averaging is a scheduling rule rather than a prediction, which is part of why it survives in a market where prediction is hard. And the temperament behind buying when others are fearful is a rule about the investor's own conduct, not a claim about where prices go next.
The hypothesis also gives a standard for judging strategy claims. Any pattern that looks profitable on paper has to clear trading costs, taxes, and the survivorship built into the backtest before it counts as an edge. Most do not clear that bar. The ones that do tend to be small, and they tend to shrink as more capital arrives.
FAQ
What are the three forms of the efficient market hypothesis?
Weak form holds that past prices and volume are already in the price, which rules out edges from chart history alone. Semi-strong form holds that all public information is already in the price. Strong form holds that private information is in the price too, and it is the version almost nobody defends.
Does the efficient market hypothesis mean stock prices are always right?
No. It claims that mispricings are hard to identify in advance and hard to capture after costs, not that they never occur. Bubbles and crashes are compatible with the hypothesis as long as an investor could not have reliably exploited them at the time.
Who came up with the efficient market hypothesis?
Eugene Fama set out the three-form framework in a 1970 review paper and shared the 2013 Nobel Memorial Prize in Economic Sciences. The mathematical roots go back further, to Louis Bachelier's 1900 work on price randomness and Paul Samuelson's 1965 paper on properly anticipated prices.
What is the strongest criticism of the efficient market hypothesis?
The Grossman-Stiglitz paradox of 1980: if prices already contained every piece of information, no one would be paid to collect information, and collection is what puts information into prices. Behavioural research adds a second line of criticism about documented, persistent investor errors.
Can anyone beat the market?
Some investors and funds have posted long records above their benchmarks. The hypothesis does not forbid that outcome; it argues that separating skill from luck takes far more data than most track records contain, and that the average dollar in active management still lags after fees.
Every panel above is a stored query with its SQL attached. Open one to check the arithmetic, or run the same autocorrelation test on the names you follow on the Strasmore terminal.