QuanterLab produced this study: it wasn’t written up afterwards. Registered hypothesis and search record in Appendix A2.
As seen on Quantocracy
All research
QuanterLab · Research

Greedy When Others Are Fearful: Buffett's Rule Tested on CNN's Fear & Greed Index Since 2009

How this study was run: the companies, the method, the dates
Universe · S&P 500 (membership resolution not recorded)
Method · Comparative: Buffett's rule vs The crowd's rule
Manipulated variable ·
The one difference between the arms is how the same reading is traded: the gauge of all seven readings. Arm A buys when it falls below 25 (CNN's Extreme Fear) and sells when it rises above 75 (Extreme Greed); arm B holds the fund while it is above 50 and sells when it falls below 50. Both arms trade… (full registered statement)The one difference between the arms is how the same reading is traded: the gauge of all seven readings. Arm A buys when it falls below 25 (CNN's Extreme Fear) and sells when it rises above 75 (Extreme Greed); arm B holds the fund while it is above 50 and sells when it falls below 50. Both arms trade the S&P 500 fund (SPY) for six months from each anchor (each 1 January and 1 July from 2009 to 2026), the whole book in the fund or in cash. The Fear & Greed gauge is CNN's seven readings of the market's mood, rebuilt from market data: the S&P 500 against its 125-day average; S&P 500 members at a 52-week high minus those at a 52-week low; the members' McClellan volume summation; the VIX against its three-month version, standing in for the put/call ratio, which is not in our data; the VIX against its 50-day average; stocks against 7-10 year Treasuries over 20 days; junk bonds against investment-grade bonds over 20 days. The members are the S&P 500 of each month, companies that later left included. Each reading is ranked against its own last 252 sessions from 0 (fear) to 100 (greed) and the gauge is their average. A rule reads the gauge of the session before the day it acts. Signals are read at the close and a position is held from that close; a position the rule opened before the anchor is carried into the window; cash earns nothing; both pay 0.02% of the traded value on every entry and exit, from the same Transaction Cost card; prices leave out dividends, for both arms and for buy and hold alike, which is the benchmark both forward tests print.
Step size · 6 months per forward window
Out-of-sample span · 2009-01-02 → 2026-07-01
Compiled · October 02, 2026
Search record · none (size unknown, see §2.3)
Abstract

"Be greedy when others are fearful" is Warren Buffett's best-known advice, and CNN's Fear & Greed Index is how many people check what the others feel. We rebuilt CNN's index from the seven market measures it combines, which takes it back to 2007, and followed the advice to the letter: buy the S&P 500 at Extreme Fear, sell it at Extreme Greed.

From 2009 to 2026 the rule turned $1 into $4.74. Simply holding the S&P 500 turned it into $7.57, and none of the 26 versions we tested beat holding.

Half of the advice works: Extreme Fear marked good times to buy. The other half costs: the year after Extreme Greed was the best year of all, and the rule spent it in cash.

Why this one

In his 1986 letter to shareholders Warren Buffett wrote that he tries to be "fearful when others are greedy" and greedy "only when others are fearful". It is the best-known advice in investing, and it comes back on every bad day in the market.

CNN's Fear & Greed Index is how many people check what the others feel: a dial from 0 to 100, from Extreme Fear to Extreme Greed, built from seven measures of the market. Put the two together and you get a rule anyone can follow. Buy when the dial reads Extreme Fear, sell when it reads Extreme Greed.

We followed that rule to the letter on the S&P 500 from 2009 to 2026, on the dial rebuilt from its parts, and asked the question every investor asks of a rule: does it beat simply holding the S&P 500? It does not. Buying when others are fearful works. Selling when others are greedy is what costs.

CNN's index, rebuilt

CNN publishes the dial from 2011 and describes its seven measures in words: Market Momentum (the S&P 500 against its 125-day average), Stock Price Strength (stocks at 52-week highs against those at 52-week lows), Stock Price Breadth (rising against falling volume), Put and Call Options, Market Volatility (the VIX against its 50-day average), Safe Haven Demand (stocks against bonds over 20 days) and Junk Bond Demand (risky bonds against safe ones). Each measure is scored from 0 to 100 against its own past year, and the dial is their average, read in five zones: Extreme Fear below 25, Fear up to 45, Neutral up to 55, Greed up to 75 and Extreme Greed above.

We rebuilt it from those words. Two measures had to be built another way. Options volumes are not in our data, so Put and Call Options uses the VIX against its own three-month version, which rises when traders pay up for protection now. And the two stock counts use the S&P 500's members instead of the whole New York Stock Exchange.

The rebuilt dial moves closely with CNN's own: over almost 4,000 days since 2011 the correlation between the two is 0.86, and on the days CNN showed Extreme Fear, ours read Extreme Fear three times in four. CNN's numbers were used for this check only.

Because it is built from its parts, the rebuilt dial goes back to 2007 and through the financial crisis. On 10 October 2008 it read 0.7 out of 100. Six days later Buffett wrote in the New York Times that he was buying American stocks.

CNN's Fear & Greed Index, rebuilt from its seven measures, every trading day from October 2007 to September 2026. Shaded: Extreme Fear below 25 and Extreme Greed above 75. Markers: the lows of eight scares most readers will remember.
Figure 1. CNN's Fear & Greed Index, rebuilt from its seven measures, every trading day from October 2007 to September 2026. Shaded: Extreme Fear below 25 and Extreme Greed above 75. Markers: the lows of eight scares most readers will remember.
1  Methodology, in detail (click to open)

1  Methodology

Buffett's rule. Buy SPY, the S&P 500 fund, when the dial falls into Extreme Fear, below 25. Sell when it climbs into Extreme Greed, above 75. Wait in cash in between. It is our simple version of his sentence, not a strategy he runs.

The crowd's rule. The opposite, doing what the others do: own SPY while the dial reads greed, above 50, and sell when it reads fear, below 50.

The 200-day average. Own SPY while its price is above its average price of the last 200 days. It is the trend rule most traders know, and the yardstick of our Kalman filter study.

Buying sharp drops. Buy SPY after a sharp two-day drop (its 2-day RSI below 10, the rule of our buy-the-dip study) and sell at the first close above its 5-day average. Then the same, but only on days of Extreme Fear.

Six months at a time. Each rule ran forward six months at a time from January 2009 to July 2026, 35 tests in a row, and each test was locked on the platform before it started, so nothing could be changed after seeing a result. A test starts where the rule's own history stands, so a position bought before the start carries on. The rules trade at the daily close and read the dial of the day before. Prices are daily closes from a licensed commercial data provider, without dividends, for the rules and for holding alike. Each trade costs 0.02%, and cash earns nothing.

Everything we tried. Besides the rules above we ran Buffett's rule on each of the seven measures alone, on the dial without some of its measures, with other buy and sell lines, with measures ranked against half a year or two years instead of one, on the Nasdaq-100 and small-company funds, and the drop rules on nine sector funds: 26 tests in all. The chart of every rule we ran on SPY is below, and the SSRN edition reports all of them.

2  Results

2.1  Headline

Buffett's rule, Sharpe
0.68
day by day, every year the test ran, 2009 to 2026
The crowd's rule, Sharpe
0.43
day by day, every year the test ran, 2009 to 2026
The result
Following Buffett's rule with CNN's Fear & Greed Index turned $1 into $4.74 from 2009 to 2026. Simply holding the S&P 500 turned it into $7.57, and none of the 26 versions we tested did better.
What $1 became, January 2009 to July 2026: holding SPY, Buffett's rule, the 200-day average and the crowd's rule; SPY prices without dividends, 0.02% a trade. Below: the days each rule owned SPY.
Figure 2. What $1 became, January 2009 to July 2026: holding SPY, Buffett's rule, the 200-day average and the crowd's rule; SPY prices without dividends, 0.02% a trade. Below: the days each rule owned SPY.
Did anything beat holding SPY? Each dot is one rule we tested on SPY and what it made of $1 from 2009 to 2026. None reached holding.
Figure 3. Did anything beat holding SPY? Each dot is one rule we tested on SPY and what it made of $1 from 2009 to 2026. None reached holding.
What came next. SPY's average gain over the next month, quarter and year after a day in each zone of the dial, 2007 to 2026; the dashed line is the average over all days.
Figure 4. What came next. SPY's average gain over the next month, quarter and year after a day in each zone of the dial, 2007 to 2026; the dashed line is the average over all days.
Sharp drops and fear on SPY. The average gain over the next week, month and quarter after a sharp two-day drop on a day of Extreme Fear and on a calmer day, after Extreme Fear without a drop, and on all other days, 2008 to 2026.
Figure 5. Sharp drops and fear on SPY. The average gain over the next week, month and quarter after a sharp two-day drop on a day of Extreme Fear and on a calmer day, after Extreme Fear without a drop, and on all other days, 2008 to 2026.
Sections 2.2 to 3, the full record: every year, every test, and how each one was run (click to open)

The registration names the two groups compared Buy fear, sell greed and Follow the mood; this paper calls them Buffett's rule and The crowd's rule.

Table 1. What $1 became on SPY, January 2009 to July 2026. 35 six-month tests in a row, each locked before it ran; SPY prices without dividends, 0.02% a trade, cash earns nothing. A trade is one holding inside a six-month test, so a holding that runs from one test into the next counts in both.

Rule$1 becameA yearWorst fallTime in SPYTrades a year
Buffett's rule$4.749.3%−34.1%50%3.2
The crowd's rule$1.953.9%−22.0%55%16.3
200-day average$3.236.9%−21.6%81%4.6
Holding SPY$7.5712.3%−34.1%100%

Table 2. The rules that came closest to holding SPY. The five of the 29 rules tested on SPY that made the most, and holding SPY. Gain per unit of risk is the Sharpe ratio of the daily returns.

Rule$1 becameA yearWorst fallGain per unit of risk
Holding SPY$7.5712.3%−34.1%0.74
Buffett's rule, without Stock Price Strength and Breadth$6.0910.9%−34.1%0.77
Buffett's rule, measures ranked against half a year$5.159.8%−28.7%0.73
Buffett's rule, without Put and Call Options$4.959.6%−28.8%0.70
Buffett's rule, CNN's full index$4.749.3%−34.1%0.68
Buffett's rule, buy below 20 and sell above 80$4.178.5%−28.7%0.61

Table 3. What came after each zone of the dial. SPY's average gain after a day in each zone, read the way a rule could (the day before), October 2007 to September 2026. Each column uses the days with its full horizon after them; the next-year column uses 4,524 days, to 29 September 2025. Averages over overlapping periods, not locked in advance.

Zone of the dialShare of daysNext monthNext year
Extreme Fear17%1.8%11.1%
Fear22%0.7%9.4%
Neutral15%0.5%10.6%
Greed32%0.7%11.7%
Extreme Greed14%0.5%12.3%
All days100%0.8%11.0%

Table 4. Buying sharp drops on SPY, January 2009 to July 2026. A sharp drop: a close with the 2-day RSI below 10, sold at the first close above the 5-day average. Trades are counted as in the first table.

Rule$1 becameWorst fallTime in SPYTrades a year
Every sharp drop$2.23−28.3%16%11.7
Only sharp drops in Extreme Fear$1.47−23.5%6%4.2
Holding SPY$7.57−34.1%100%

2.2  Per-step results

Table 5. One row per step, raw out-of-sample results. A short window can pair a negative return with a positive annualised Sharpe: at high daily volatility the arithmetic mean of daily returns sits above the compounded window return, and the Sharpe reads the former. Volatility drag, printed rather than smoothed.
#Out-of-sample window Buffett's rule SR The crowd's rule SR
1 2009-01-02 → 2009-07-01 1.79 -0.27
2 2009-07-01 → 2009-12-31 n/a 2.23
3 2010-01-04 → 2010-07-01 -0.66 -0.05
4 2010-07-01 → 2010-12-31 2.18 1.47
5 2011-01-03 → 2011-07-01 0.51 -0.55
6 2011-07-01 → 2011-12-30 -0.24 -1.02
7 2012-01-03 → 2012-06-29 0.57 1.48
8 2012-07-02 → 2012-12-31 -0.14 -0.88
9 2013-01-02 → 2013-07-01 2.69 1.32
10 2013-07-01 → 2013-12-31 3.67 0.72
11 2014-01-02 → 2014-07-01 1.25 -0.97
12 2014-07-01 → 2014-12-31 1.52 -0.35
13 2015-01-02 → 2015-07-01 0.21 -1.38
14 2015-07-01 → 2015-12-31 -0.06 -1.23
15 2016-01-04 → 2016-07-01 0.55 1.38
16 2016-07-01 → 2016-12-30 2.87 1.14
17 2017-01-03 → 2017-06-30 1.20 0.80
18 2017-07-03 → 2017-12-29 2.65 2.31
19 2018-01-02 → 2018-06-29 1.51 -0.73
20 2018-07-02 → 2018-12-31 -0.38 0.01
21 2019-01-02 → 2019-07-01 2.94 1.25
22 2019-07-01 → 2019-12-31 1.46 -0.25
23 2020-01-02 → 2020-07-01 0.20 -0.46
24 2020-07-01 → 2020-12-31 2.78 1.89
25 2021-01-04 → 2021-07-01 1.92 1.15
26 2021-07-01 → 2021-12-31 1.61 1.53
27 2022-01-03 → 2022-07-01 -1.69 -2.81
28 2022-07-01 → 2022-12-30 1.76 -0.42
29 2023-01-03 → 2023-06-30 1.71 2.06
30 2023-07-03 → 2023-12-29 1.39 1.59
31 2024-01-02 → 2024-07-01 2.91 2.01
32 2024-07-01 → 2024-12-31 1.52 -0.77
33 2025-01-02 → 2025-07-01 0.26 2.12
34 2025-07-01 → 2025-12-31 0.76 1.10
35 2026-01-02 → 2026-07-01 1.21 1.16
Out-of-sample equity: normalised growth (1.00x = break even)0.65x0.94x1.23xbars into the window →
Figure 6. Buffett's rule: every step's out-of-sample curve overlaid, each rebased to 1× at its own start. Read alongside the per-step table: consistent shape across steps is the walk-forward's evidence; a single lucky leg is not.
Out-of-sample equity: normalised growth (1.00x = break even)0.75x1.00x1.24xbars into the window →
Figure 7. The crowd's rule: the same windows, the other arm. Compare shape-for-shape with the previous figure: the two arms trade the identical out-of-sample windows.

2.3  Search accounting

No search record exists for this design. It was not promoted from a recorded evolving search, so the number of alternatives tried before it, on paper, in another tool, or in the author's head, is unknown. Unknown is a different fact from one: a study with no lineage is not a strategy with one trial, it is a strategy with an unrecorded number of them. Accordingly no count of alternatives tried is claimed, and nothing in this paper is corrected for a search that was never recorded; the number that stands is the raw out-of-sample result plus this disclosure. The registered per-step record below (§4) still guarantees each window's hypothesis was hashed and registered before that window was scored.

2.4  The comparison

Both arms trade the same registered windows, so their returns can be PAIRED: inside each window the two return series are inner-joined date by date and the difference rBuffett's rule − rThe crowd's rule is the object under test. Because this is ONE pre-declared contrast, frozen at registration before any window was scored, the paired statistic needs no multiple-testing deflation, and the per-arm pooled numbers above are likewise uncorrected, because this design has no recorded search to correct against (§2.3). The paired contrast carries that gap differently from the arm levels: it was declared before each window ran and it is scored on the difference, so no window could be read first and scored after. What the timestamps cannot speak to is how this contrast came to be the declared one, which is the limit §2.3 states.

In the table: Arm A = Buffett's rule · Arm B = The crowd's rule.

Table 6. Window-by-window paired comparison. Δ is the growth gap (Arm A − Arm B) over the window's paired dates.
#WindowPaired bars Arm AArm B ΔLeader
1 2009-01-05 → 2009-07-01 124 +16.4% -5.6% +22.1 pp Arm A
2 2009-07-02 → 2009-12-31 127 +0.0% +18.7% -18.7 pp Arm B
3 2010-01-05 → 2010-07-01 124 -6.4% -0.4% -6.0 pp Arm B
4 2010-07-02 → 2010-12-31 127 +15.1% +7.3% +7.8 pp Arm A
5 2011-01-04 → 2011-07-01 125 +2.3% -1.9% +4.2 pp Arm A
6 2011-07-05 → 2011-12-30 126 -5.6% -6.4% +0.7 pp Arm A
7 2012-01-04 → 2012-06-29 124 +2.4% +7.0% -4.5 pp Arm B
8 2012-07-03 → 2012-12-31 124 -0.7% -3.1% +2.4 pp Arm A
9 2013-01-03 → 2013-07-01 124 +5.4% +5.5% -0.1 pp Arm B
10 2013-07-02 → 2013-12-31 127 +16.6% +2.3% +14.3 pp Arm A
11 2014-01-03 → 2014-07-01 124 +6.3% -3.0% +9.3 pp Arm A
12 2014-07-02 → 2014-12-31 127 +7.7% -1.0% +8.6 pp Arm A
13 2015-01-05 → 2015-07-01 124 +0.7% -4.7% +5.4 pp Arm A
14 2015-07-02 → 2015-12-31 127 -1.3% -3.7% +2.5 pp Arm A
15 2016-01-05 → 2016-07-01 125 +3.0% +5.9% -2.9 pp Arm B
16 2016-07-05 → 2016-12-30 126 +6.9% +4.2% +2.7 pp Arm A
17 2017-01-04 → 2017-06-30 124 +3.2% +2.2% +1.0 pp Arm A
18 2017-07-05 → 2017-12-29 125 +7.8% +3.9% +3.9 pp Arm A
19 2018-01-03 → 2018-06-29 124 +9.9% -3.1% +13.0 pp Arm A
20 2018-07-03 → 2018-12-31 125 -3.8% -0.0% -3.7 pp Arm B
21 2019-01-03 → 2019-07-01 124 +15.8% +4.9% +10.9 pp Arm A
22 2019-07-02 → 2019-12-31 127 +6.3% -1.0% +7.3 pp Arm A
23 2020-01-03 → 2020-07-01 125 -0.3% -3.8% +3.5 pp Arm A
24 2020-07-02 → 2020-12-31 127 +9.2% +11.9% -2.6 pp Arm B
25 2021-01-05 → 2021-07-01 124 +4.9% +5.8% -0.9 pp Arm B
26 2021-07-02 → 2021-12-31 127 +10.3% +3.2% +7.2 pp Arm A
27 2022-01-04 → 2022-07-01 124 -20.2% -10.4% -9.8 pp Arm B
28 2022-07-05 → 2022-12-30 126 +16.2% -4.3% +20.5 pp Arm A
29 2023-01-04 → 2023-06-30 123 +5.2% +13.9% -8.7 pp Arm B
30 2023-07-05 → 2023-12-29 125 +5.5% +5.6% -0.1 pp Arm B
31 2024-01-03 → 2024-07-01 124 +9.2% +9.1% +0.0 pp tie
32 2024-07-02 → 2024-12-31 127 +9.8% -2.9% +12.7 pp Arm A
33 2025-01-03 → 2025-07-01 122 +1.7% +8.4% -6.6 pp Arm B
34 2025-07-02 → 2025-12-31 127 +2.6% +4.9% -2.4 pp Arm B
35 2026-01-05 → 2026-07-01 123 +6.3% +4.5% +1.8 pp Arm A

Paired Sharpe of the difference track: 0.35 · block bootstrap (2000 paths, block 10, seed 1234): P(Buffett's rule beats The crowd's rule) = 95.2%.

Window win-rate. Buffett's rule led 21 of 35 windows (60.0%), The crowd's rule led 13, and 1 windows were ties, and the mean window gap of +2.71 pp points the same way. Widest single window: 2009 at +22.1 pp.

3  The circuit

The strategy is a circuit of platform primitives, frozen when the study is registered. Below is the circuit as wired on the canvas, the objective it encodes and how the search runs through it, followed by the mathematics each primitive actually computes, the same formulas the execution engine runs. The complete parameterisation is preserved in the study ledger (Appendix A).

The hypothesis under test

The sentence below is the registered design with its rules in plain words; the exact registration record is in Appendix A2; the authored description of the design is Section 1.

A COMPARATIVE study: Buy fear, sell greed vs Follow the mood, walked on the same registered out-of-sample windows. Buy fear, sell greed: SPY, bought when the Fear & Greed gauge of the session before crosses below 25; sell when the Fear & Greed gauge of the session before crosses above 75, and forward-tested out-of-sample from the anchor: the rule set is frozen at the anchor, with no in-sample re-optimization. Follow the mood: SPY, bought when the Fear & Greed gauge of the session before crosses above 50; sell when the Fear & Greed gauge of the session before crosses below 50, and forward-tested out-of-sample from the anchor: the rule set is frozen at the anchor, with no in-sample re-optimization. The arms differ in: Signal Module, config (entry · operator: crosses_below → crosses_above; entry · value: 25 → 50; exit · operator: crosses_above → crosses_below; exit · value: 75 → 50). The contrast under test: whether Buy fear, sell greed generates better risk-adjusted returns than Follow the mood over the identical out-of-sample windows.

Every block in this study is a card from the platform's catalog: SPY and its price loader, the signal module that uses the rebuilt Fear & Greed Index, the six-month test and the cost card. The Fear & Greed card in the Regime palette draws the index and each of its seven measures, so a reader can rebuild every test.

The frozen circuit, data flows left to rightticker: click for detailstickerticker price loader: click for detailsticker price loadersignal module: click for detailssignal modulebacktest validator: click for detailsbacktest validatortransaction cost: click for detailstransaction costticker: click for detailstickerticker price loader: click for detailsticker price loadersignal module: click for detailssignal modulebacktest validator: click for detailsbacktest validatortransaction cost: click for detailstransaction costBuy fear, sell greedFollow the moodshared
Figure 8. The frozen circuit, every node a primitive, every wire a typed data-flow; the two arms are colour-coded (Buffett's rule green, The crowd's rule blue, shared feeds neutral). Each box is one step of the strategy; data flows along the wires left to right, and no box can see data dated later than the box feeding it. The whole diagram was frozen when the hypothesis was registered. Click any node to open what that step ran with and what it produced.

Envelopes show counts, ratios, dates, and the parameters the author chose. Full price and per-name data series are not republished: the underlying market data is licensed to QuanterLab. Point figures quoted in the prose, a named holding's return over a stated span, are summary facts derived from public market prices, not redistributed series.

What each part does
Ticker, A single instrument symbol, the seed of a single-name circuit.
Ticker Price Loader, Single-ticker OHLCV loader, the deep window a signal needs.
Signal Module, The entry / exit rule, turn indicators into a per-bar trade signal.
Backtest Validator, Forward-test the winning rule on unseen, out-of-sample data.
Transaction Cost, Charge for trading, slippage + commission on every turn.

The objective and the search

Buy fear, sell greed

UniverseSingle ticker SPY with 365 days (~1.0y) of price history.
Signal generationbuy when the Fear & Greed gauge of the session before crosses below 25; sell when the Fear & Greed gauge of the session before crosses above 75.
Validation & out-of-samplesignal forward test (6m horizon from the anchor); overlays: Transaction Cost.

Follow the mood

Signal generationbuy when the Fear & Greed gauge of the session before crosses above 50; sell when the Fear & Greed gauge of the session before crosses below 50.

Every other specification row is identical to Buy fear, sell greed's table above.

What differs between the arms, one difference; the comparison is clean:

  • paramSignal Module, config
    • · buy when: the Fear & Greed gauge of the session before crosses below 25 (Buffett's rule); the Fear & Greed gauge of the session before crosses above 50 (The crowd's rule)
    • · sell when: the Fear & Greed gauge of the session before crosses above 75 (Buffett's rule); the Fear & Greed gauge of the session before crosses below 50 (The crowd's rule)

Everything else is held identical, so an out-of-sample gap between the arms is attributable to this one change.

Cost elements are wired into the circuit.

Show the mathematics, 5 primitives, formulas and parity notes

3.1  Ticker

A single instrument symbol, the seed of a single-name circuit.

No math. It just names one stock and hands the symbol to a Ticker Price Loader, which fetches its price history.

What it is

A constant: one ticker string. The computation lives downstream in the loader and the signal.

3.2  Ticker Price Loader

Single-ticker OHLCV loader, the deep window a signal needs.

Same as the bulk loader but for one name, fetching a deep lifecycle window so an indicator or stochastic signal has enough history to warm up.

What it loads

One ticker's OHLCV up to the anchor, length set by the strategy's warm-up requirement.

P = \{(o,h,l,c,v)_\tau : \tau \le t\}

3.3  Signal Module

The entry / exit rule, turn indicators into a per-bar trade signal.

Composes indicators (RSI, moving averages, …) with comparison and logic operators into a rule that says enter, exit, or hold each bar. The rule is emitted as a portable config the optimizer tunes and the walk-forward validates, so what you design is exactly what gets traded.

Boolean rule → position state
\text{signal}_t = \begin{cases} +1 & \text{entry rule true} \\ 0 & \text{exit rule true} \\ \text{hold} & \text{otherwise}\end{cases}
e.g. enter when RSI < 30, exit when RSI > 50.

3.4  Backtest Validator

Forward-test the winning rule on unseen, out-of-sample data.

Takes the wired rule config (the Walk-Forward validated config wins, else the optimized config, else the raw signal config) and trades it FORWARD on the out-of-sample window to the right of the anchor, data it never saw during optimization, re-deriving the regime as-of each bar. It produces the true out-of-sample equity curve, trades and statistics: the signal-path twin of the Portfolio Forward Test, not an in-sample replay.

Apply the frozen rule forward (OOS)
E_t = E_{t-1}\,(1 + r_t),\qquad \text{Sharpe} = \frac{\bar r - r_f}{\sigma_r}\sqrt{252}
Config frozen from optimization / walk-forward, then replayed bar-by-bar on the forward window it has never seen, with cost + risk overlays applied.

3.5  Transaction Cost

Charge for trading, slippage + commission on every turn.

Real trading isn't free. This deducts a cost proportional to how much you trade (turnover), in basis points, so the backtest reflects net, not gross, performance.

Cost per rebalance
\text{cost}_t = \frac{\text{bps}}{10{,}000}\;\times\;\text{turnover}_t, \qquad \text{turnover}_t = \tfrac12\sum_i \lvert w_{i,t}-w_{i,t^-}\rvert

4  Discussion

4.1  Findings

The answer. Buffett's rule turned $1 into $4.74. Simply holding SPY turned it into $7.57.

Did anything beat holding SPY? No. We ran 29 rules on SPY across the tests, and every one of them ended below holding. The closest was Buffett's rule on the dial without its two stock counts, at $6.09. For the swings it went through it did slightly better than holding, by a margin too small to count on after 26 tests. On the Nasdaq-100 fund, the small-company fund and the nine sector funds the result was the same: no rule made more than holding its own fund.

The half that works. In the month after a day of Extreme Fear, SPY rose more than twice as much as in an average month. Being greedy when others are fearful paid.

The half that costs. In the year after a day of Extreme Greed, SPY rose more than after any other level of the dial, and selling at greed meant sitting in cash through those years. March 2009 shows how it happens. The rule bought on the 3rd, a few days before the bottom, and sold on the 27th with a 16% gain, because after a crash three good weeks already look like Extreme Greed against the year behind them. SPY rose another 37% by the end of the year while the rule waited in cash.

Selling did not protect it either. In late January 2020 the rule bought a scare, the dial never reached greed before the crash, and the rule fell as far as holding did.

Against the other rules. Buffett's rule still beat the other ways to trade: the crowd's rule turned $1 into $1.95 and the 200-day average into $3.23. Among trading rules his was the best of the three. It could not beat holding.

Buying sharp drops in fear. A sharp drop on a day of Extreme Fear was followed by a far better week than the same drop on a calmer day. Such days are rare, though, and waiting for both turned $1 into $1.47, against $2.23 for buying every sharp drop.

4.2  Interpretation

Buffett's other advice. Buffett also wrote that his "favorite holding period is forever", about outstanding businesses. For people who own the index his advice is plainer: in his 2013 letter he told the trustee for his wife to put 90% of the cash in a very low-cost S&P 500 index fund. In this record that is the rule that won.

The data agree with buying when others are fearful and disagree with selling when others are greedy. The year after a day of Extreme Greed was the best of any level of the dial, so a rule that sells there leaves the rest of the rise behind and waits in cash for the next scare.

Every rule here sells at greed. The next test keeps Buffett's buy and changes the sell: buy at Extreme Fear, then hold for a fixed time, or until the 200-day average says the trend has turned. It will be locked in before it runs, like these.

The SSRN edition reports all 26 tests, and the circuit of this study opens in the lab, where each of those settings is one click away.

Enter the lab

Press Open the platform and this paper's circuit opens in the lab: SPY and its prices, Buffett's rule and the crowd's rule side by side, the six-month test and the cost card. The Fear & Greed card in the Regime palette draws the rebuilt dial, measure by measure.

Things to try. Keep Buffett's buy and write a different sell. Use one of the seven measures alone. Move the lines to 20 and 80. Or change the fund.

4.3  Limitations

Prices leave out dividends, for the rules and for holding alike, and cash earns nothing. Dividends would add about twice as much to holding, which is always in the fund, as to a rule that is in it half the time, so they would widen holding's lead; interest on cash would narrow it, mostly after 2022, when cash began to pay again. There is one trading cost, 0.02% a trade. The dial is our rebuild of CNN's: two measures are built another way, and the stock counts miss companies whose prices are no longer carried, most of them in 2008. The averages after each zone of the dial overlap and were not locked in advance. Before the tests were locked, while the engine's run time was being measured, nine six-month results inside the test period were printed for three of the 26 tests; nothing in the design changed after that.

References

QuanterLab reference architecture
  1. Gelman, A., & Loken, E. (2013). The garden of forking paths: Why multiple comparisons can be a problem, even when there is no “fishing expedition.” Working paper, Columbia University.
  2. Harvey, C. R., Liu, Y., & Zhu, H. (2016). … and the Cross-Section of Expected Returns. Review of Financial Studies, 29(1), 5–68. doi:10.1093/rfs/hhv059
  3. Lo, A. W. (2002). The Statistics of Sharpe Ratios. Financial Analysts Journal, 58(4), 36–52. doi:10.2469/faj.v58.n4.2453
Author’s references?
  1. Buffett (1987), Chairman's letter in the Berkshire Hathaway 1986 Annual Report: "fearful when others are greedy" and greedy "only when others are fearful". https://www.berkshirehathaway.com/letters/1986.html
  2. Buffett (1989), Chairman's letter in the Berkshire Hathaway 1988 Annual Report: "our favorite holding period is forever", of outstanding businesses with outstanding managements. https://www.berkshirehathaway.com/letters/1988.html
  3. Buffett (2008), Buy American. I Am., The New York Times, 16 October 2008: written six days after the rebuilt dial's lowest point of the crisis. https://www.nytimes.com/2008/10/17/opinion/17buffett.html
  4. Buffett (2014), Chairman's letter in the Berkshire Hathaway 2013 Annual Report: his advice to the trustee for his wife, 90% of the cash in a very low-cost S&P 500 index fund. https://www.berkshirehathaway.com/letters/2013ltr.pdf
  5. CNN Business, Fear & Greed Index: the published dial and its seven measures in words. https://www.cnn.com/markets/fear-and-greed
  6. Farrell and O'Connor (2025), The CNN Fear and Greed Index as a predictor of US equity index returns: Static and time-varying Granger causality, Finance Research Letters 72: on CNN's published series, the index helped predict US index returns, most of all in its early years. https://www.sciencedirect.com/science/article/abs/pii/S1544612324015216
  7. Whaley (2000), The Investor Fear Gauge, Journal of Portfolio Management 26(3): the VIX as the market's measure of fear. https://doi.org/10.3905/jpm.2000.319728
  8. Baker and Wurgler (2006), Investor Sentiment and the Cross-Section of Stock Returns, Journal of Finance 61(4): when sentiment is low, the stocks most exposed to it later earn more. https://doi.org/10.1111/j.1540-6261.2006.00885.x
  9. Connors and Alvarez (2009), Short Term Trading Strategies That Work, TradingMarkets: the 2-day RSI rule for buying sharp drops in a rising market.
  10. Faber (2007), A Quantitative Approach to Tactical Asset Allocation, Journal of Wealth Management 9(4): the moving-average rule on US stocks and other asset classes. https://doi.org/10.3905/jwm.2007.674809
  11. Bailey and Lopez de Prado (2014), The Deflated Sharpe Ratio, Journal of Portfolio Management 40(5): how much a result must be discounted for the number of tests behind it. https://doi.org/10.3905/jpm.2014.40.5.094

Appendix A  Reproducibility in QuanterLab

Each step is backed by a frozen run report. The study is re-derivable from the ledger below.

#CommitReportAnchorOOS window
1 38f76f54bfad 12764 2009-01-01 2009-01-02 → 2009-07-01
2 2e33160507ed 12765 2009-07-01 2009-07-01 → 2009-12-31
3 230601821742 12766 2010-01-01 2010-01-04 → 2010-07-01
4 4a142701841a 12767 2010-07-01 2010-07-01 → 2010-12-31
5 8c7e3e5264f4 12768 2011-01-01 2011-01-03 → 2011-07-01
6 bb6b0b2988e2 12769 2011-07-01 2011-07-01 → 2011-12-30
7 a195a95cb10f 12770 2012-01-01 2012-01-03 → 2012-06-29
8 a24be4b87f15 12771 2012-07-01 2012-07-02 → 2012-12-31
9 850df3fa395f 12772 2013-01-01 2013-01-02 → 2013-07-01
10 aa8b255e775d 12773 2013-07-01 2013-07-01 → 2013-12-31
11 0da77580e3cc 12774 2014-01-01 2014-01-02 → 2014-07-01
12 4d66aae62a15 12775 2014-07-01 2014-07-01 → 2014-12-31
13 5f0d38c5c434 12776 2015-01-01 2015-01-02 → 2015-07-01
14 9c62fc076637 12777 2015-07-01 2015-07-01 → 2015-12-31
15 bd04bd224070 12778 2016-01-01 2016-01-04 → 2016-07-01
16 5e9aa4640aef 12779 2016-07-01 2016-07-01 → 2016-12-30
17 5542f3adf46d 12780 2017-01-01 2017-01-03 → 2017-06-30
18 f85f9c0a2e5d 12781 2017-07-01 2017-07-03 → 2017-12-29
19 69efa0d278e6 12782 2018-01-01 2018-01-02 → 2018-06-29
20 0df422d17916 12783 2018-07-01 2018-07-02 → 2018-12-31
21 f6eefb67087f 12784 2019-01-01 2019-01-02 → 2019-07-01
22 36a81db1c0ae 12785 2019-07-01 2019-07-01 → 2019-12-31
23 263cd95f082e 12786 2020-01-01 2020-01-02 → 2020-07-01
24 2634e9081e2b 12787 2020-07-01 2020-07-01 → 2020-12-31
25 804dcffc32f9 12788 2021-01-01 2021-01-04 → 2021-07-01
26 0c2f474fc26e 12789 2021-07-01 2021-07-01 → 2021-12-31
27 eaecee8c9647 12790 2022-01-01 2022-01-03 → 2022-07-01
28 8f563fda1111 12791 2022-07-01 2022-07-01 → 2022-12-30
29 48492095843b 12792 2023-01-01 2023-01-03 → 2023-06-30
30 a35398d5a48e 12793 2023-07-01 2023-07-03 → 2023-12-29
31 aa6a19b6f685 12794 2024-01-01 2024-01-02 → 2024-07-01
32 16a69d8ea5da 12795 2024-07-01 2024-07-01 → 2024-12-31
33 a0fbda5541c4 12796 2025-01-01 2025-01-02 → 2025-07-01
34 841d27a4030b 12797 2025-07-01 2025-07-01 → 2025-12-31
35 59e6433d4b4f 12798 2026-01-01 2026-01-02 → 2026-07-01

Appendix A2  Registration record

What this record does and does not establish. Every window in this study is historical: the data existed before the study began, so this is sequential registration on past windows, not pre-registration in the clinical-trial sense, and no procedure could make it so. What the platform does enforce is order, each step's specification was frozen and hashed before that step was scored, and the walk cannot advance past a step that was never run or close one with a result registered for a different window. The two timestamp columns below are the evidence: read them together and each registration precedes its own run, and each run precedes the next registration. A study whose registrations all post-date its runs would show it here. Wall-clock spacing between registrations varies with the author's schedule and queue latency; the ordering, not the tempo, is the claim.

“A COMPARATIVE study: Buy fear, sell greed vs Follow the mood, walked on the same registered out-of-sample windows. Buy fear, sell greed: SPY, bought when the Fear & Greed gauge of the session before crosses below 25; sell when the Fear & Greed gauge of the session before crosses above 75, and forward-tested out-of-sample from the anchor: the rule set is frozen at the anchor, with no in-sample re-optimization. Follow the mood: SPY, bought when the Fear & Greed gauge of the session before crosses above 50; sell when the Fear & Greed gauge of the session before crosses below 50, and forward-tested out-of-sample from the anchor: the rule set is frozen at the anchor, with no in-sample re-optimization. The arms differ in: Signal Module, config (entry · operator: crosses_below → crosses_above; entry · value: 25 → 50; exit · operator: crosses_above → crosses_below; exit · value: 75 → 50). The contrast under test: whether Buy fear, sell greed generates better risk-adjusted returns than Follow the mood over the identical out-of-sample windows.”

The same hypothesis was registered independently at every step, hashed before each step's out-of-sample window was scored:

Table 7. Registration audit, one row per registered step, with the time each specification was frozen and the time its window was scored. The hypothesis is identical on every row by design: it was registered once and re-registered unchanged at each anchor. Rows that differ would mean the specification moved mid-walk, which is the thing this record exists to rule out. The timestamps are the separate claim: each registration precedes its own run, and each run precedes the next registration.
#AnchorRegistered at (UTC)Run completed (UTC)
1 2009-01-012026-10-02 04:06:21 2026-10-02 04:06:22
2 2009-07-012026-10-02 04:06:22 2026-10-02 04:06:23
3 2010-01-012026-10-02 04:06:23 2026-10-02 04:06:24
4 2010-07-012026-10-02 04:06:24 2026-10-02 04:06:25
5 2011-01-012026-10-02 04:06:25 2026-10-02 04:06:27
6 2011-07-012026-10-02 04:06:27 2026-10-02 04:06:28
7 2012-01-012026-10-02 04:06:28 2026-10-02 04:06:29
8 2012-07-012026-10-02 04:06:29 2026-10-02 04:06:30
9 2013-01-012026-10-02 04:06:30 2026-10-02 04:06:31
10 2013-07-012026-10-02 04:06:31 2026-10-02 04:06:32
11 2014-01-012026-10-02 04:06:32 2026-10-02 04:06:33
12 2014-07-012026-10-02 04:06:33 2026-10-02 04:06:35
13 2015-01-012026-10-02 04:06:35 2026-10-02 04:06:36
14 2015-07-012026-10-02 04:06:36 2026-10-02 04:06:37
15 2016-01-012026-10-02 04:06:37 2026-10-02 04:06:38
16 2016-07-012026-10-02 04:06:38 2026-10-02 04:06:39
17 2017-01-012026-10-02 04:06:39 2026-10-02 04:06:40
18 2017-07-012026-10-02 04:06:40 2026-10-02 04:06:41
19 2018-01-012026-10-02 04:06:41 2026-10-02 04:06:42
20 2018-07-012026-10-02 04:06:42 2026-10-02 04:06:44
21 2019-01-012026-10-02 04:06:44 2026-10-02 04:06:45
22 2019-07-012026-10-02 04:06:45 2026-10-02 04:06:46
23 2020-01-012026-10-02 04:06:46 2026-10-02 04:06:47
24 2020-07-012026-10-02 04:06:47 2026-10-02 04:06:48
25 2021-01-012026-10-02 04:06:48 2026-10-02 04:06:49
26 2021-07-012026-10-02 04:06:49 2026-10-02 04:06:50
27 2022-01-012026-10-02 04:06:50 2026-10-02 04:06:51
28 2022-07-012026-10-02 04:06:51 2026-10-02 04:06:53
29 2023-01-012026-10-02 04:06:53 2026-10-02 04:06:54
30 2023-07-012026-10-02 04:06:54 2026-10-02 04:06:55
31 2024-01-012026-10-02 04:06:55 2026-10-02 04:06:56
32 2024-07-012026-10-02 04:06:56 2026-10-02 04:06:57
33 2025-01-012026-10-02 04:06:57 2026-10-02 04:06:58
34 2025-07-012026-10-02 04:06:58 2026-10-02 04:06:59
35 2026-01-012026-10-02 04:06:59 2026-10-02 04:07:00
QuanterLab · Study fa16e3ecb609 · compiled October 02, 2026. Point-in-time constituents and hypothesis-registration timestamps are enforced by the platform. This report is generated from the frozen study artifact and is reproducible from the ledger above. Educational research, not investment advice: every result on this page is simulated, and nothing here is a recommendation to buy or sell any security.

Run a study like this one

Everything above was produced inside QuanterLab, the registration, the walk, the statistics and the paper itself. Build the circuit on a canvas, register the hypothesis before you score it, and the platform enforces the rest.

Reading the research needs no account; creating one is free. Follow the research and we'll tell you when the next study publishes.

As seen on Quantocracy

A note on AI. QuanterLab is a quantitative finance research platform, and every number in this study comes from a run on the platform. The hypothesis, the parameter choices, the validation design and the conclusions belong to the author. Runs execute on point-in-time data with walk-forward validation, and each study ships with its methodology and logs, so a reader can reconstruct the result instead of trusting it. I use AI to edit and structure the prose; it does not generate results, produce numbers, or decide what a study concludes.