巴菲特恐惧买入策略数据验证
通过分析新闻情绪构建恐惧指数,测试在市场情绪低迷时投资是否能获得更高收益。
沃伦·巴菲特最常被引用的准则是:在他人贪婪时恐惧,在他人恐惧时贪婪。这被视为真理。从原理上讲,这也是一个可验证的命题:如果可以衡量全市场的情绪,那么在最恐惧和最贪婪时刻之后的收益率是可以进行排列和比较的。本页面通过基于数十万篇新闻文章情绪构建的“恐惧与贪婪指数”来进行这项测试。
从新闻构建恐惧指数
我们新闻流中的每篇文章在发布时都会附带一个针对单家公司的情绪标签,分为正面、负面或中性。每天统计全市场的这些标签,即可将新闻转化为每日情绪读数。这里的每日净情绪计算方式为:(正面计数 - 负面计数) / (正面计数 + 负面计数)。读数接近区间顶端表示市场乐观、贪婪;读数接近底端则最接近数据所能体现的恐惧。
在讨论收益率之前,有两个限制条件。情绪标签仅从 2024 年起存在,因此可测量的窗口期约为两年半,而非完整的市场周期。此外,标签整体偏向乐观。
每个数字背后的完整 SQL
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 year在最近一年中,负面文章仅占标签总数的 19.1%,且这一模式在整个窗口期内持续存在。在此样本中,恐惧日是指情绪最不乐观的日子,而非真正的恐慌日。这是原始数据。测试的重点在于市场随后的表现。
测试:恐惧与贪婪之后的表现
针对每一个情绪读数日,我们测量了随后 5、20 和 60 个交易日的 S&P 500 收益率。随后将日期分为最恐惧的十分之一、最贪婪的十分之一以及两者之间的数据,并计算每个组别的平均前瞻收益率。
每个数字背后的完整 SQL
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)在随后的两个月里,恐惧日表现优于贪婪日。在极端恐惧读数后的 60 个交易日内,S&P 500 平均收益率为 6.35%,而极端贪婪读数后的收益率为 2.85%,中间的普通交易日收益率为 4.03%。排名符合准则:恐惧期的买入机会更好,贪婪期的买入机会较差。
近距离观察时,差异并不明显。在随后的 5 天内,恐惧组和贪婪组的收益率差距不到 1%;在 20 天内,贪婪组略微领先。差异仅在两个月的时间点才显现出来。每个极端组仅包含 45 天,平均值受少数几次事件影响。
为什么这是线索,而非定论
有三个因素使得该结果无法成为定论。
窗口期处于牛市中。每个组别的 60 天收益率均为正值,因此比较的是“好结果”与“更好的结果”,而非“收益”与“亏损”。旨在防止在顶部贪婪的规则,在此处缺乏可供测试的顶部。
恐惧日往往出现在市场已经下跌之后,此时负面报道会聚集。从这些点位反弹可能仅仅是简单的均值回归,而非情绪本身具有预见性。要区分这两者,需要比零散的日期更多的数据。
样本量较少。两年半的时间,每个极端组仅有 45 天,对于关于所有时代、所有市场的论断来说,基础过于狭窄。2024 年至 2026 年的单一阶段只是一个样本,而非总体。
这项练习证明了比准则本身更小且更有用的结论:该命题是可衡量的。一个通常作为引言的句子可以转化为数字,通过数据进行审计,并随着情绪记录的增长进行重新测试。目前来看,其方向与巴菲特一致。
常见问题
在他人恐惧时买入真的有效吗?
在 2024-2026 年的样本中,最恐惧日后的 S&P 500 平均 60 天收益率 (6.35%) 高于最贪婪日 (2.85%)。在更短的窗口期内,差距几乎消失,且样本量较短;因此这仅作为方向性支持,而非证明。
恐惧与贪婪指数是如何构建的?
基于我们新闻流中的单篇文章情绪标签:每天的正面文章减去负面文章,再除以两者总数。低读数代表情绪低迷,高读数代表情绪乐观。
为什么测试从 2024 年开始?
新闻流中的情绪标签始于 2024 年,这使得可测量窗口期约为两年半。
这是投资建议吗?
不是。这是对过去数据的测量,并带有明确的限制条件:窗口期短、标签偏向乐观、处于牛市且可能存在均值回归,而非策略或预测。
此处每个图表均来自其下方的存储查询。您可以展开任何面板以审计情绪计数和前瞻收益率,或在 Strasmore 终端上自行运行相同的测试。如需了解市场焦虑的另一种解读方式,请查看 隐含波动率;如需查看记录中的真实恐惧事件,请查看 2020 年 3 月的 COVID 崩盘。