Buy When Others Are Fearful: The Data
Warren Buffett said be greedy when others are fearful. We built a fear gauge from real news sentiment and tested whether fearful days beat the market.
Warren Buffett's most-quoted rule of thumb is to be fearful when others are greedy and greedy when others are fearful. It travels as settled wisdom. It is also, in principle, a testable claim: if a market-wide mood can be measured, the returns that followed the most fearful and the most greedy moments can be lined up and compared. This page runs that test, using a fear-and-greed gauge built from the sentiment of hundreds of thousands of news articles.
Building a fear gauge from the news
Every article on our news tape carries a per-company sentiment tag, positive or negative or neutral, attached when the article is published. Counting those tags across the whole market each day turns the news into a daily mood reading. One day's net sentiment here is the positive count minus the negative count, over the total of the two: a reading near the top of its range is an upbeat, greedy tape, and a reading near the bottom is the closest thing this data holds to fear.
Two limits belong up front, before any return. The sentiment tags exist only from 2024 onward, so the measurable window is about two and a half years, not a full market cycle. And the tags lean upbeat.
The exact SQL behind every number
SELECT toString(toYear(published_utc)) AS year, count() AS tagged_insights,
round(100.0 * countIf(JSONExtractString(ins,'sentiment')='negative') / count(), 1) AS negative_pct
FROM global_markets.stocks_news ARRAY JOIN insights AS ins
WHERE JSONExtractString(ins,'sentiment') != ''
GROUP BY year ORDER BY yearDownbeat articles ran near 19.1% of the tagged total in the most recent year, and the pattern holds across the window. A fearful day in this sample is the least-upbeat tape available, not a day of outright panic. That is the raw material. The test is what the market did next.
The test: what followed fear and greed
For every day with a mood reading, the S&P 500's return was measured over the next 5, 20, and 60 trading days. The days were then split into the most fearful tenth, the most greedy tenth, and everything in between, and the forward returns averaged within each group.
The exact SQL behind every number
WITH sent AS (
SELECT toDate(published_utc) AS d,
(countIf(s='positive') - countIf(s='negative')) / (countIf(s='positive') + countIf(s='negative')) AS net
FROM (SELECT published_utc, JSONExtractString(ins,'sentiment') AS s
FROM global_markets.stocks_news ARRAY JOIN insights AS ins
WHERE JSONExtractString(ins,'sentiment') != '')
GROUP BY d HAVING countIf(s='positive') + countIf(s='negative') >= 20
),
spyd AS (
SELECT toDate(toTimeZone(window_start,'America/New_York')) AS d,
argMax(toFloat64(close), toTimeZone(window_start,'America/New_York')) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker='SPY' AND window_start >= '2024-01-01'
AND (toHour(toTimeZone(window_start,'America/New_York'))*60 + toMinute(toTimeZone(window_start,'America/New_York'))) BETWEEN 570 AND 959
GROUP BY d
),
spy AS (
SELECT d, c, leadInFrame(c,5) OVER w AS c5, leadInFrame(c,20) OVER w AS c20, leadInFrame(c,60) OVER w AS c60
FROM spyd WINDOW w AS (ORDER BY d ASC ROWS BETWEEN CURRENT ROW AND 60 FOLLOWING)
),
j AS (
SELECT s.net AS net, (spy.c5/spy.c-1)*100 AS f5, (spy.c20/spy.c-1)*100 AS f20, (spy.c60/spy.c-1)*100 AS f60
FROM sent s INNER JOIN spy ON s.d = spy.d WHERE spy.c60 > 0
),
qt AS (SELECT quantile(0.1)(net) AS p10, quantile(0.9)(net) AS p90 FROM j)
SELECT multiIf(net <= (SELECT p10 FROM qt), 'Extreme fear (least upbeat)',
net >= (SELECT p90 FROM qt), 'Extreme greed (most upbeat)',
'In between') AS market_mood,
count() AS days,
round(avg(f5),2) AS fwd_5d_pct,
round(avg(f20),2) AS fwd_20d_pct,
round(avg(f60),2) AS fwd_60d_pct
FROM j GROUP BY market_mood
ORDER BY multiIf(market_mood='Extreme fear (least upbeat)',0, market_mood='In between',1, 2)Over the two months that followed, the fearful days came in well ahead of the greedy ones. The S&P 500 averaged 6.35% over the 60 trading days after an extreme-fear reading, against 2.85% after an extreme-greed reading, with ordinary days in between at 4.03%. The ranking matches the maxim: the fearful tape was the better entry, and the greedy tape the worse one.
Up close the picture blurs. Over the next five days the fearful and greedy groups sit within a fraction of a percent of each other, and over twenty days the greedy group edges slightly ahead. The separation opens only at the two-month mark. Each extreme group holds just 45 days, and a small run of episodes carries the average.
Why this is a clue, not a verdict
Three things hold the result short of proof.
The window is a rising market. Every group posted a positive 60-day return, and the comparison sets a good outcome against a better one, not a gain against a loss. A rule meant to protect against greed near a top has no top to be tested against here.
The fearful days also tend to arrive after the market has already fallen, when downbeat coverage clusters. A bounce from those points fits simple mean reversion as neatly as it fits any foresight in the sentiment itself. Sorting the two apart needs more than a scatter of dates.
And the sample is thin. Two and a half years, with 45 days in each extreme, is a narrow base for a claim about every market in every era. A single stretch of 2024 through 2026 is one draw, not the population.
What the exercise settles is smaller and more useful than the maxim itself: the claim is measurable. A line that usually travels as a quotable phrase can be turned into a number, audited against the tape, and re-run as the sentiment record grows. The direction, for now, is Buffett's.
FAQ
Does buying when others are fearful actually work?
In this 2024-2026 sample the most fearful days were followed by a higher average 60-day S&P 500 return (6.35%) than the most greedy days (2.85%). Over shorter windows the gap nearly closes, and the sample is short; this stands as directional support rather than proof.
How is the fear-and-greed gauge built?
From the per-article sentiment tags on our news feed: each day's positive articles minus its negative ones, over their total. A low reading is a downbeat tape, a high reading an upbeat one.
Why does the test start in 2024?
The sentiment tags on the news feed begin in 2024, which sets the measurable window at about two and a half years.
Is this investment advice?
No. It is a measurement of past data with stated limits, a short window, upbeat-skewed tags, a rising market, and possible mean reversion, not a strategy or a forecast.
Every figure here comes from the stored query beneath it. Expand any panel to audit the sentiment counts and the forward returns, or run the same test yourself on the Strasmore terminal. For a related way to read market anxiety, see implied volatility; for a real fear event in the record, see the COVID crash of March 2020.