Fear & Greed TQQQ strategy: research and results

How we went from "buy TQQQ when F&G is low" to the rule now running in rainier: F&G < 30 buy, SMA180 bear filter, −10% same-day stop, QQQ SMA38 exit.

Summary

$10k → (2021-01-22 to 2026-10-16)
$107.9k
Hold TQQQ: $28.5k · old rule: $93.3k
Worst drawdown, 5.7 years
−24.4%
Hold TQQQ: −81.7% · old rule: −61.5%
Last 3 years (from 2023-10-16)
$46.6k
Hold TQQQ: $36.4k · old rule: $69.7k
Trades / stop-outs (5.7 years)
25 / 2
15 wins, 10 losses · biggest loss −13.0%

We set out to find a rule that uses CNN's Fear & Greed index (F&G) to time TQQQ, the 3× Nasdaq-100 ETF. The goal was to beat holding TQQQ while avoiding its −80% crashes. After several rounds of sweeps, the rule we adopted is:

  1. Buy TQQQ when F&G closes below 30, unless QQQ is below its 180-day SMA (bear-market filter).
  2. Hard stop: if TQQQ trades 10% or more below the entry price at the close check, sell the same day. After a stop, don't buy again until QQQ closes back above its SMA38.
  3. Normal exit: once QQQ has closed above its SMA38 (the exit is "armed"), sell when QQQ closes back below SMA38. The sell fills at the next day's close.

Compared with the first version of the rule (F&G < 30 buy plus the SMA38 exit only), the filter and stop cut the worst drawdown from −62% to −24% and raised the 5.7-year result from $93k to $108k. The price is a weaker last 3 years ($47k against $70k). The filter skips buys at the bottom of sharp V-shaped crashes such as April 2025, and the stop sold two dips that later recovered.

The rule is live in rainier as a signal-only job (PR #186, merged). It posts to Discord and places no orders. IBKR paper trading is the next step.

Update (2026-10-17): the adopted rule fails on older data. Re-run on F&G history back to 2011, the F&G < 30 / SMA180 / −10% stop rule turned $10k into only $7.9k over 2011−2021, with a −66% worst drop. A rule tuned on all 15.8 years, F&G < 40 / SMA38 exit / SMA180 filter / −25% stop, holds up much better, but its worst drop is about −49%. See 2011−2026 out-of-sample check.

Read these numbers with care. It is one 5.7-year history containing a single bear market (2022). The −10% stop sits right next to a cliff (−9% returns about half as much), and the F&G history is CNN's revised series, not what was published on each day. Treat the results as evidence the rule is reasonable, not a forecast.

Data and method

Period
2021-01-22 to 2026-10-16 (1,439 trading days), with the last 3 years (from 2023-10-16) as a second window. CNN's feed holds a flat placeholder value of 50 before 2021-01-22, so the study starts there.
Prices
Daily adjusted closes for QQQ and TQQQ from yfinance (dividends and splits adjusted), frozen in tests/fixtures/fng_tqqq/history.csv.
Fear & Greed
CNN's daily index from rainier's fear_greed_index table. Historical values are CNN's revised series, so they are not exactly what was visible on each day.
Execution
$10,000 all-in, no leverage beyond TQQQ itself. Signals use each day's close. BUY and the SMA38 SELL fill at the next session's close, and the stop fills at the same day's close. Costs are 0.1% per side. Results are before tax.
Drawdown
The largest peak-to-trough fall of daily mark-to-market equity.
Reproducibility
The headline numbers come from the live strategy code (rainier.signals.fng_tqqq.evaluate/replay) run on the fixture, and the test suite checks the same values. You can re-run any setting with rainier strategy fng-tqqq backtest --regime-sma N --stop-loss X.

How we got here

Each step answered one question and determined the next.

1. Does F&G mark QQQ lows?

Partly. We looked at 18 QQQ swing lows (lowest close within ±20 days, at least 7% below the prior 60-day high). F&G on the low day had a median of 25 (middle half 17–28), against 47 on an average day. Sharp crash lows reach single digits: 2.9 in April 2025, and 5.2 to 9.5 in other cases. Once clustered signals are removed, only F&G < 10 shows a real 60-day edge (+15.6% against a +4.1% baseline, 6 episodes), and that edge is gone at 1 year. Readings of 20 or 25 fire over and over in a bear market, and holding cash while waiting for low F&G lost to plain monthly DCA. Conclusion: F&G alone is not enough, and an exit rule is needed.

2. F&G buy plus a QQQ moving-average sell (19,716 combinations)

We tested buy thresholds against SMA and EMA exits from 5 to 60 days, with and without a "greed" exit. Selling when F&G gets high hurt returns. Two good areas appeared, separated by a weak band at buy thresholds 11–21:

  • Low drawdown: buy below 6–9, sell on about EMA35–40. Worst drop about −21%, but few trades and about $58k over 5.7 years.
  • High return: buy below 28–31, sell on about SMA35–40. The most money, but a −55% to −62% worst drop. You picked this one (F&G < 30, SMA38).

3. Buy below 25 instead of 30?

No. In the 2023–2025 bull market, dips usually took F&G only into the mid-to-high 20s, and buying below 25 missed most of the re-entries. Over 3 years it made $36.5k, against $69.7k for below 30. Over 5.7 years it made $44.4k against $93.3k. The worst drop was about the same.

Buy below 25 against buy below 30 (SMA38 exit, $10k)

Buy threshold comparison
Buy < 25Buy < 30Hold TQQQ
Last 3 years$36.5k$69.7k$36.4k
2021–2026 (5.7 years)$44.4k$93.3k$28.5k
Worst drop (3y / 5.7y)−57% / −60%−53% / −62%−58% / −82%
Trades (3y / 5.7y)9 / 1914 / 28—

4. Where did the first rule lose money?

The F&G < 30 / SMA38 rule lost −51.6% in 2022, against −79.1% for holding TQQQ. It had 11 losing trades out of 28. Eight were small whipsaws (−0.9% to −8%). Three 2022 trades did most of the damage: −17.5%, −33.8% and −11.3%. In a bear market F&G stays below 30 for weeks, so the rule kept buying back in. The SMA38 exit only fires after QQQ first gets back above SMA38, so in a steady slide it rode the losses for months.

5. Can a short-SMA "recovery" test catch the bad trades early?

We counted the trading days from each buy signal until QQQ first closed above its SMA22. The losing trades fell into two groups: fast losers (1–2 days, small whipsaw losses) and slow losers (13–24 days, the four biggest losses). Only one of 17 winners took more than 12 days.

Days from buy signal to QQQ first close above SMA22
Winners (17)Losers (11)
Quickest1 day1 day
Longest21 days (2025-02-24, +16.9%)24 days (2022-04-25, −33.8%)
Average6.1 days7.7 days
Median5 days2 days

As an exit rule it didn't work. "Sell if QQQ hasn't closed above SMAk within N days" was tested for every k from 5 to 25 and every N from 5 to 25 (441 combinations). No setting reduced the 5.7-year worst drop below about −61%. The cells that made more money were isolated: moving N by one day often swung the result between 0.5× and 1.1×. For SMA21 and SMA22 specifically, the best cell (15 days, $114.9k) sat next to $85–87k at 14 and 16 days. The reason is that after an early sell, F&G was still below 30, so the rule bought straight back in.

6. Block the buys instead: a bear-market filter and a hard stop

Two ideas worked where the early exit didn't:

  • Bear-market filter (skip buys while QQQ is below its SMA L): every L from 140 to 220 gave $122–161k over 5.7 years with a −53% worst drop. That is a stable range, not one lucky number. L below 130 blocked too many normal pullbacks.
  • Hard stop from the TQQQ entry price, with re-buying blocked until QQQ closes back above SMA38: −10% to −12% gave $127–157k and −43% to −50%. But −9% fell to $76k, so the useful range is narrow. Without the re-buy block, every stop level did worse.

7. Sell at the stop the same day

You asked to check at 12:58 PT and sell before the 13:00 close instead of waiting a day. The same-day stop caps the loss closer to −10% and avoids overnight gaps. In this history the next day happened to bounce in 2 of the 3 stop cases, which made the next-day version look slightly better. That was luck, not a reason to wait. Moving the SMA38 exit to the same day as well made results worse ($78k), so only the stop sells the same day.

Stop trades: selling the same day against selling the next day (SMA200 filter, −10% stop)

Same-day vs next-day stop fills
EntrySold same day (12:59 PT)Sold next day
2022-02-03 @ $26.982022-02-18 @ $23.99: −11.3%2022-02-22 @ $23.24: −14.0%
2025-02-25 @ $38.262025-03-04 @ $34.17: −10.9%2025-03-05 @ $35.50: −7.4%
2026-03-09 @ $49.102026-03-20 @ $42.83: −13.0%2026-03-23 @ $44.31: −9.9%

Tuning the filter and the stop together

374 combinations: regime SMA 100–250 in steps of 10 (or no filter) × stop −5% to −25% in 1% steps (or no stop). Buy below 30, SMA38 exit, same-day stop.

Each cell shows the final value in $k from $10,000, with the worst drawdown underneath. Darker shading means more money; the numbers carry the same information. The outlined cell is the chosen default, SMA180 with a −10% stop. We picked the setting from the middle of a stable good area rather than the single best cell.

2021-01-22 to 2026-10-16 (5.7 years)

Final value by regime filter and stop, 5.7 years
Filter ↓ / stop →−5%−6%−7%−8%−9%−10%−11%−12%−13%−14%−15%−16%−17%−18%−19%−20%−21%−22%−23%−24%−25%No stop
No filter44
-50%
62
-42%
67
-42%
63
-40%
71
-43%
120
-49%
112
-50%
112
-50%
104
-52%
102
-53%
85
-57%
82
-58%
77
-58%
77
-58%
77
-58%
75
-60%
70
-62%
74
-64%
73
-64%
92
-64%
91
-64%
93
-62%
SMA10011
-34%
15
-28%
16
-28%
17
-29%
20
-24%
19
-24%
19
-27%
19
-27%
19
-27%
19
-27%
17
-34%
17
-34%
17
-34%
17
-34%
17
-34%
17
-34%
17
-34%
17
-34%
17
-35%
16
-36%
16
-36%
25
-54%
SMA11012
-34%
17
-28%
18
-28%
19
-28%
22
-24%
22
-24%
21
-26%
21
-26%
21
-26%
21
-26%
19
-33%
19
-33%
19
-33%
19
-33%
19
-33%
19
-33%
19
-33%
19
-33%
19
-34%
18
-35%
18
-35%
29
-53%
SMA12019
-34%
26
-28%
27
-28%
28
-29%
33
-24%
33
-24%
32
-27%
32
-27%
32
-27%
32
-27%
29
-34%
29
-34%
29
-34%
29
-34%
29
-34%
29
-34%
29
-34%
29
-34%
28
-35%
28
-36%
28
-36%
43
-54%
SMA13021
-34%
29
-28%
31
-28%
32
-29%
38
-24%
73
-24%
69
-27%
69
-27%
69
-27%
69
-27%
63
-34%
63
-34%
63
-34%
63
-34%
63
-34%
63
-34%
63
-34%
63
-34%
62
-35%
61
-36%
61
-36%
96
-54%
SMA14021
-34%
29
-33%
31
-33%
30
-37%
35
-26%
68
-27%
65
-30%
65
-30%
62
-33%
62
-33%
56
-40%
56
-40%
53
-43%
53
-43%
53
-43%
53
-43%
53
-43%
52
-44%
51
-45%
98
-44%
98
-44%
155
-53%
SMA15031
-34%
44
-30%
47
-30%
46
-35%
54
-24%
104
-24%
99
-28%
99
-28%
95
-31%
95
-31%
86
-37%
86
-37%
81
-41%
81
-41%
81
-41%
81
-41%
81
-41%
79
-43%
78
-43%
99
-44%
99
-44%
156
-53%
SMA16029
-34%
41
-30%
44
-30%
43
-35%
50
-24%
97
-24%
93
-28%
93
-28%
89
-31%
89
-31%
81
-37%
81
-37%
76
-41%
76
-41%
76
-41%
76
-41%
76
-41%
74
-43%
73
-43%
93
-44%
93
-44%
146
-53%
SMA17029
-34%
41
-30%
44
-30%
43
-35%
50
-24%
98
-24%
93
-28%
93
-28%
89
-31%
89
-31%
81
-37%
81
-37%
76
-41%
76
-41%
76
-41%
76
-41%
76
-41%
74
-43%
73
-43%
93
-44%
93
-44%
146
-53%
SMA18032
-34%
46
-30%
48
-30%
47
-35%
56
-24%
108
-24%
103
-28%
103
-28%
99
-31%
99
-31%
89
-37%
89
-37%
84
-41%
84
-41%
84
-41%
84
-41%
84
-41%
82
-43%
81
-43%
103
-44%
103
-44%
161
-53%
SMA19030
-38%
43
-30%
45
-30%
42
-35%
49
-28%
96
-28%
91
-28%
88
-30%
85
-31%
78
-35%
71
-37%
71
-37%
67
-41%
67
-41%
67
-41%
67
-41%
63
-41%
62
-43%
61
-43%
77
-44%
76
-44%
135
-53%
SMA20030
-38%
43
-30%
45
-30%
42
-35%
49
-28%
96
-28%
91
-28%
88
-30%
85
-31%
78
-35%
71
-37%
71
-37%
67
-41%
67
-41%
67
-41%
67
-41%
63
-41%
62
-43%
61
-43%
77
-44%
76
-44%
135
-53%
SMA21030
-38%
43
-30%
45
-30%
42
-35%
49
-28%
96
-28%
91
-28%
88
-30%
85
-31%
78
-35%
71
-37%
71
-37%
67
-41%
67
-41%
67
-41%
67
-41%
63
-41%
62
-43%
61
-43%
77
-44%
76
-44%
135
-53%
SMA22029
-40%
41
-31%
44
-31%
43
-35%
50
-27%
91
-31%
87
-31%
87
-31%
83
-31%
83
-31%
75
-37%
74
-37%
69
-41%
67
-41%
67
-41%
65
-41%
65
-41%
64
-43%
58
-43%
73
-44%
73
-44%
122
-53%
SMA23029
-40%
41
-31%
43
-31%
42
-35%
49
-27%
90
-31%
86
-31%
86
-31%
82
-31%
82
-31%
74
-37%
73
-37%
68
-41%
66
-41%
66
-41%
64
-41%
64
-41%
63
-43%
57
-43%
72
-44%
72
-44%
120
-53%
SMA24029
-40%
41
-31%
43
-31%
42
-35%
49
-27%
90
-31%
86
-31%
86
-31%
82
-31%
82
-31%
74
-37%
73
-37%
68
-41%
66
-41%
66
-41%
64
-41%
64
-41%
63
-43%
57
-43%
72
-44%
72
-44%
120
-53%
SMA25029
-40%
41
-31%
43
-31%
42
-35%
49
-27%
90
-31%
86
-31%
86
-31%
82
-31%
82
-31%
74
-37%
73
-37%
68
-41%
66
-41%
66
-41%
64
-41%
64
-41%
63
-43%
57
-43%
72
-44%
72
-44%
120
-53%

Last 3 years (2023-10-16 to 2026-10-16)

Final value by regime filter and stop, last 3 years
Filter ↓ / stop →−5%−6%−7%−8%−9%−10%−11%−12%−13%−14%−15%−16%−17%−18%−19%−20%−21%−22%−23%−24%−25%No stop
No filter37
-30%
37
-30%
37
-30%
34
-35%
40
-23%
78
-23%
75
-23%
75
-23%
71
-26%
71
-26%
65
-29%
65
-29%
61
-31%
61
-31%
61
-31%
61
-31%
61
-31%
59
-32%
59
-32%
74
-32%
74
-32%
70
-53%
SMA1008
-28%
8
-28%
8
-28%
8
-28%
10
-21%
10
-22%
9
-26%
9
-26%
9
-26%
9
-26%
8
-33%
8
-33%
8
-33%
8
-33%
8
-33%
8
-33%
8
-33%
8
-33%
8
-34%
8
-35%
8
-35%
13
-53%
SMA1109
-28%
9
-28%
9
-28%
9
-28%
10
-21%
10
-22%
10
-26%
10
-26%
10
-26%
10
-26%
9
-33%
9
-33%
9
-33%
9
-33%
9
-33%
9
-33%
9
-33%
9
-33%
9
-34%
9
-35%
9
-35%
14
-53%
SMA12013
-28%
13
-28%
13
-28%
13
-29%
15
-23%
15
-24%
14
-27%
14
-27%
14
-27%
14
-27%
13
-34%
13
-34%
13
-34%
13
-34%
13
-34%
13
-34%
13
-34%
13
-34%
13
-35%
13
-36%
13
-36%
20
-54%
SMA13013
-28%
13
-28%
13
-28%
13
-29%
15
-23%
29
-23%
28
-27%
28
-27%
28
-27%
28
-27%
25
-34%
25
-34%
25
-34%
25
-34%
25
-34%
25
-34%
25
-34%
25
-34%
25
-35%
25
-36%
25
-36%
39
-54%
SMA14013
-33%
13
-33%
13
-33%
12
-37%
14
-26%
28
-27%
26
-30%
26
-30%
25
-33%
25
-33%
23
-40%
23
-40%
21
-43%
21
-43%
21
-43%
21
-43%
21
-43%
21
-44%
21
-45%
40
-44%
40
-44%
63
-53%
SMA15020
-30%
20
-30%
20
-30%
18
-35%
22
-24%
42
-24%
40
-28%
40
-28%
38
-31%
38
-31%
35
-37%
35
-37%
33
-41%
33
-41%
33
-41%
33
-41%
33
-41%
32
-43%
32
-43%
40
-44%
40
-44%
63
-53%
SMA16020
-30%
20
-30%
20
-30%
18
-35%
22
-24%
42
-24%
40
-28%
40
-28%
38
-31%
38
-31%
35
-37%
35
-37%
33
-41%
33
-41%
33
-41%
33
-41%
33
-41%
32
-43%
32
-43%
40
-44%
40
-44%
63
-53%
SMA17020
-30%
20
-30%
20
-30%
19
-35%
22
-24%
42
-24%
40
-28%
40
-28%
38
-31%
38
-31%
35
-37%
35
-37%
33
-41%
33
-41%
33
-41%
33
-41%
33
-41%
32
-43%
32
-43%
40
-44%
40
-44%
63
-53%
SMA18022
-30%
22
-30%
22
-30%
20
-35%
24
-24%
47
-24%
44
-28%
44
-28%
43
-31%
43
-31%
39
-37%
39
-37%
36
-41%
36
-41%
36
-41%
36
-41%
36
-41%
35
-43%
35
-43%
44
-44%
44
-44%
70
-53%
SMA19022
-30%
22
-30%
22
-30%
20
-35%
24
-24%
47
-24%
44
-28%
44
-28%
43
-31%
43
-31%
39
-37%
39
-37%
36
-41%
36
-41%
36
-41%
36
-41%
36
-41%
35
-43%
35
-43%
44
-44%
44
-44%
70
-53%
SMA20022
-30%
22
-30%
22
-30%
20
-35%
24
-24%
47
-24%
44
-28%
44
-28%
43
-31%
43
-31%
39
-37%
39
-37%
36
-41%
36
-41%
36
-41%
36
-41%
36
-41%
35
-43%
35
-43%
44
-44%
44
-44%
70
-53%
SMA21022
-30%
22
-30%
22
-30%
20
-35%
24
-24%
47
-24%
44
-28%
44
-28%
43
-31%
43
-31%
39
-37%
39
-37%
36
-41%
36
-41%
36
-41%
36
-41%
36
-41%
35
-43%
35
-43%
44
-44%
44
-44%
70
-53%
SMA22022
-30%
22
-30%
22
-30%
20
-35%
24
-24%
47
-24%
44
-28%
44
-28%
43
-31%
43
-31%
39
-37%
39
-37%
36
-41%
36
-41%
36
-41%
36
-41%
36
-41%
35
-43%
35
-43%
44
-44%
44
-44%
70
-53%
SMA23022
-30%
22
-30%
22
-30%
20
-35%
24
-24%
47
-24%
44
-28%
44
-28%
43
-31%
43
-31%
39
-37%
39
-37%
36
-41%
36
-41%
36
-41%
36
-41%
36
-41%
35
-43%
35
-43%
44
-44%
44
-44%
70
-53%
SMA24022
-30%
22
-30%
22
-30%
20
-35%
24
-24%
47
-24%
44
-28%
44
-28%
43
-31%
43
-31%
39
-37%
39
-37%
36
-41%
36
-41%
36
-41%
36
-41%
36
-41%
35
-43%
35
-43%
44
-44%
44
-44%
70
-53%
SMA25022
-30%
22
-30%
22
-30%
20
-35%
24
-24%
47
-24%
44
-28%
44
-28%
43
-31%
43
-31%
39
-37%
39
-37%
36
-41%
36
-41%
36
-41%
36
-41%
36
-41%
35
-43%
35
-43%
44
-44%
44
-44%
70
-53%
  • The good area is a filter of SMA150–210 with a stop of −10% to −12%. Every cell there gives $88–108k over 5.7 years with a worst drop of −24% to −30%.
  • A stop of −9% or tighter falls off a cliff ($42–56k): normal 3× swings trip it and it sells winners. −10% sits right at the edge, while −11% and −12% are a little safer and slightly lower ($103k, −28%, at SMA180).
  • Stops looser than −13% steadily raise the drawdown without adding return.
  • No stop with the filter makes the most over 5.7 years ($161k at SMA180), but the worst drop stays at −53% (April 2025).
  • You chose SMA180 + −10%: the best balance of return against drawdown in both windows, accepting that it sits next to the −9% cliff.

Results of the adopted rule

Strategy comparison
Strategy ($10k)5.7 yearsWorst dropLast 3 yearsWorst dropTrades (5.7y)
F&G < 30 + SMA180 filter + −10% stop (default)$107.9k−24.4%$46.6k−24.4%25
F&G < 30 + SMA38 exit only (first rule)$93.3k−61.5%$69.7k−53.4%28
Hold TQQQ$28.5k−81.7%$36.4k−58.0%—
Hold QQQ$22.6k−35.1%$19.5k−22.8%—
Growth of $10,000, month-end values (2021-01 to 2026-10)
Month-end equity by strategy
MonthDefault ruleFirst ruleHold TQQQHold QQQ
2021-01$9,368$9,368$9,000$9,666
2021-02$9,914$9,914$8,876$9,653
2021-03$9,914$9,914$9,079$9,819
2021-04$9,914$9,914$10,710$10,399
2021-05$11,264$11,264$10,206$10,274
2021-06$11,264$11,264$12,187$10,918
2021-07$11,566$11,566$13,205$11,230
2021-08$12,610$12,610$14,872$11,704
2021-09$10,236$10,236$12,393$11,039
2021-10$12,750$12,750$15,436$11,907
2021-11$13,434$13,434$16,264$12,145
2021-12$13,265$13,265$16,547$12,285
2022-01$11,866$12,749$12,302$11,210
2022-02$11,866$10,817$10,438$10,708
2022-03$11,866$11,996$11,576$11,208
2022-04$11,866$9,353$7,268$9,684
2022-05$11,866$8,462$6,576$9,531
2022-06$11,866$6,145$4,775$8,682
2022-07$11,866$7,236$6,637$9,771
2022-08$11,866$7,236$5,533$9,270
2022-09$11,866$6,240$3,844$8,293
2022-10$11,866$6,421$4,168$8,625
2022-11$11,866$6,421$4,688$9,103
2022-12$11,866$6,421$3,460$8,283
2023-01$11,866$6,421$4,582$9,164
2023-02$11,866$6,421$4,426$9,131
2023-03$14,791$8,549$5,685$9,998
2023-04$14,786$8,546$5,683$10,049
2023-05$18,188$10,512$6,990$10,841
2023-06$21,527$12,442$8,274$11,524
2023-07$23,790$13,750$9,144$11,969
2023-08$20,829$12,038$8,564$11,792
2023-09$21,360$12,345$7,213$11,193
2023-10$22,253$12,861$6,638$10,962
2023-11$29,782$17,213$8,884$12,148
2023-12$34,570$19,980$10,312$12,826
2024-01$35,892$20,744$10,707$13,060
2024-02$41,156$23,787$12,277$13,749
2024-03$42,126$24,347$12,566$13,925
2024-04$42,342$24,472$10,766$13,316
2024-05$50,202$29,014$12,764$14,135
2024-06$59,493$34,384$15,127$15,049
2024-07$59,707$34,508$13,992$14,797
2024-08$74,330$42,960$14,059$14,960
2024-09$74,330$42,960$14,902$15,352
2024-10$74,330$42,960$14,277$15,220
2024-11$74,330$42,960$16,423$16,034
2024-12$71,003$41,037$16,321$16,107
2025-01$74,722$43,186$17,062$16,455
2025-02$72,051$41,642$15,453$16,010
2025-03$66,589$31,943$11,853$14,796
2025-04$66,589$30,593$11,353$15,003
2025-05$66,589$39,022$14,481$16,380
2025-06$66,589$46,399$17,218$17,426
2025-07$66,589$49,311$18,299$17,848
2025-08$66,589$50,474$18,537$18,018
2025-09$66,589$50,474$21,470$18,987
2025-10$76,777$58,197$24,236$19,894
2025-11$73,496$55,709$22,650$19,584
2025-12$70,030$53,082$21,928$19,453
2026-01$70,030$53,082$22,461$19,692
2026-02$70,030$53,082$20,597$19,230
2026-03$60,961$44,825$17,365$18,300
2026-04$79,036$68,334$26,472$21,171
2026-05$105,182$90,941$35,230$23,409
2026-06$102,907$88,974$33,824$23,374
2026-07$98,915$85,522$26,984$21,837
2026-08$107,456$92,906$30,033$22,750
2026-09$123,547$106,819$32,647$23,505
2026-10$107,891$93,283$28,539$22,553
Return by calendar year
Yearly returns by strategy
YearDefault ruleFirst ruleHold TQQQHold QQQ
2021+32.6%+32.6%+65.5%+22.8%
2022−10.5%−51.6%−79.1%−32.6%
2023+191.3%+211.1%+198.0%+54.9%
2024+105.4%+105.4%+58.3%+25.6%
2025−1.4%+29.4%+34.4%+20.8%
2026 to date+54.1%+75.7%+30.1%+15.9%
  • 2022: −10.5%, against −51.6% for the first rule and −79.1% for holding TQQQ. The only loss came from the December 2021 trade, which sold on 2022-01-06. After that the SMA180 filter kept the strategy in cash until March 2023.
  • 2025: −1.4%, against +29.4% for the first rule. The filter skipped the April 2025 crash-bottom buy (QQQ was below SMA180), and a stop sold the February–March dip at −10.9%.
  • Time invested: 43% of trading days, against 62% for the first rule. Most of the gap in bull years comes from sitting in cash.

Every trade of the default rule

25 trades: 15 wins (average +23.8%), 10 losses (average −5.1%). The signal is the close that fired the buy, and the entry fills at the next close. "Days" counts trading days held.

All trades of the default rule
#Buy signalF&GEntryEntry $ExitExit $ReturnExit reasonDays
12021-01-2728.22021-01-28$22.942021-02-23$22.79−0.9%SMA3817
22021-05-1226.82021-05-13$21.432021-05-28$24.39+13.6%SMA3811
32021-07-0827.02021-07-09$30.712021-08-19$31.32+1.8%SMA3829
42021-08-1914.92021-08-20$32.292021-09-21$31.78−1.8%SMA3821
52021-09-2111.42021-09-22$32.712021-09-28$30.16−8.0%SMA384
62021-09-2812.52021-09-29$29.962021-12-06$36.52+21.7%SMA3847
72021-12-0621.32021-12-07$39.812021-12-15$39.42−1.2%SMA386
82021-12-2029.42021-12-21$37.112022-01-06$35.41−4.8%SMA3811
92023-03-1323.42023-03-14$10.892023-08-09$19.15+75.5%SMA38102
102023-09-2624.22023-09-27$16.802023-10-16$18.72+11.2%SMA3813
112023-10-1929.52023-10-20$16.502024-04-05$29.21+76.6%SMA38114
122024-04-1927.72024-04-22$24.842024-07-22$36.32+45.9%SMA3862
132024-08-0619.02024-08-07$26.052024-08-29$32.50+24.5%SMA3816
142024-12-1919.52024-12-20$40.802025-01-02$38.76−5.2%SMA387
152025-01-0224.32025-01-03$40.622025-01-08$39.77−2.3%SMA383
162025-01-1025.62025-01-13$37.482025-01-28$40.74+8.5%SMA3810
172025-02-2429.52025-02-25$38.262025-03-04$34.17−10.9%STOP5
182025-10-1329.72025-10-14$50.192025-11-14$51.98+3.4%SMA3823
192025-11-1422.12025-11-17$50.652025-12-15$51.63+1.7%SMA3819
202026-03-0625.32026-03-09$49.102026-03-20$42.83−13.0%STOP8
212026-04-0829.22026-04-09$48.752026-06-11$75.69+54.9%SMA3844
222026-06-1129.72026-06-12$77.192026-06-25$74.81−3.3%SMA388
232026-06-2525.42026-06-26$71.692026-07-06$76.27+6.2%SMA385
242026-07-2925.62026-07-30$63.182026-08-25$70.13+10.8%SMA3818
252026-09-1528.02026-09-16$67.802026-10-16$68.21+0.4%SMA3822

Prices are yfinance adjusted closes, so they won't match old broker quotes exactly. Returns include 0.1% cost on each side.

2011−2026 out-of-sample check

Everything above was tuned on 2021-01 to 2026-10, because CNN's feed starts there. A public archive, whit3rabbit/fear-greed-data, extends F&G back to 2011-01-03. Its 2011−2021 part was pieced together from third-party copies of CNN's index, with whole-number values and a gap from 2020-06-05 to 2020-07-09. From 2021 it matches our CNN data (correlation 0.9997). Prices are yfinance adjusted closes, matching our fixture to within 0.0001%. Same costs and fills as above.

$10k by period

Strategies by period
Strategy2011 to 2021-01Worst drop2021-01 to 2026-10All 2011–2026Worst drop
F&G < 30, SMA180, −10% stop (adopted above)$7.9k−66%$109k$81k (14%/yr)−66%
F&G < 30, SMA38 exit only (first rule)$53k−77%$90k$473k (28%/yr)−77%
F&G < 40, SMA180, −25% stop (candidate)$131k−49%$109k$1.42M (37%/yr)−49%
Trend: hold TQQQ while QQQ > SMA180$138k−57%$63k$870k (33%/yr)−57%
Trend: hold TQQQ while QQQ > SMA200$115k−61%$38k$435k (27%/yr)−61%
Hold TQQQ$632k−70%$28.5k$1.79M (39%/yr)−82%
Hold QQQ$65k−29%$22.6k$147k (19%/yr)−35%
  • The −10% stop is the problem. Most 2011−2020 selloffs were sharp V-shaped dips: Aug 2011, Aug 2015, Feb and Oct 2018, May 2019 and Feb 2020. The stop sold near each bottom, 10 times, often losing 11−20% when the price fell past the stop before the check. Buying then stayed blocked until QQQ recovered its SMA38, so the rule missed the rebound. Every stop from −8% to −13% gives only $5−14k over 2011−2021, whatever the filter.
  • A looser stop and a higher buy threshold work. Tuned over all 16 years (most return per unit of worst drop), the best cell is buy below 40 with a −25% stop. Its neighbours all stay within a reasonable range of it (table below).
  • Nothing beats holding TQQQ on total return since 2011 ($1.79M). The strategies trade some of that return for a smaller worst drop.

Walk-forward test

Each year from 2015, the setting was chosen using only the years before it (most return per unit of worst drop), then traded for that year. The chosen setting has been the candidate every year since 2023. Over 2015−2026, $10k grew to $281k with a −58% worst drop. The same years give $74k for the adopted rule, $191k for the SMA200 trend rule and $354k for holding TQQQ. The test isn't stable, though: adding two more buy levels and a −30% stop to the search changed the 2021−2022 picks, and the result fell to $126k (−71%).

Walk-forward yearly returns
YearWalk-forwardAdopted ruleFirst ruleTrend SMA200Hold TQQQHold QQQ
2015−1.7%−14.3%+25.5%−14.6%+17.2%+9.4%
2016−14.3%−5.2%−12.2%−20.6%+11.4%+7.1%
2017+23.1%+13.6%+13.6%+118.1%+118.1%+32.7%
2018−22.3%−42.0%−50.0%+4.5%−19.8%−0.1%
2019+72.0%−9.8%+28.9%+49.4%+133.8%+39.0%
2020+67.9%+33.0%+131.7%+96.6%+110.1%+48.4%
2021+91.8%+40.9%+40.9%+83.0%+83.0%+27.4%
2022−10.5%−10.5%−51.6%−50.1%−79.1%−32.6%
2023+188.0%+191.3%+211.1%+93.4%+198.0%+54.9%
2024+94.3%+105.4%+105.4%+58.3%+58.3%+25.6%
2025−24.9%−1.4%+29.4%+27.9%+34.4%+20.8%
2026+67.5%+54.1%+75.7%+18.0%+30.1%+15.9%

Neighbours of the candidate (all 2011−2026)

Candidate sensitivity
Change from candidate$10k →Worst drop
Candidate: buy < 40, SMA38, SMA180, −25%$1.42M−49%
Buy < 35$928k−49%
Buy < 45$888k−51%
Buy < 50$788k−51%
Stop −20%$873k−54%
Stop −30%$1.12M−54%
No stop$2.04M−70%
Regime SMA150$743k−54%
Regime SMA200$685k−62%
Exit SMA30$470k−53%
Exit SMA50$486k−58%
Buy < 30 with −25% stop$242k−60%

Is the pre-2021 F&G archive trustworthy?

CNN averages 7 indicators but doesn't publish the exact scoring. I rebuilt an approximation from 5 of them using free data. Each is scored as its percentile over the trailing year, and the five scores are averaged with equal weight:

  • S&P 500 against its 125-day average
  • Where the NYSE Composite sits in its 52-week range
  • VIX against its 50-day average
  • HYG against LQD, 20-day return
  • SPY against IEF, 20-day return

The approximation doesn't include put/call, NYSE highs and lows, or McClellan breadth. The question is whether the archive tracks the rebuild as closely as the live CNN feed does.

Rebuilt index against CNN
F&G sourceDaysCorrelationAverage gap (points)Agree on < 30
Archive, 2011 to 2021-012,5140.879.490%
Live CNN feed, 2021-02 onward1,3840.848.689%
  • The archive behaves like real CNN data. Its agreement with the rebuild is as good as the live feed's, so there is no sign it is fabricated or broken.
  • Exact thresholds are sensitive. Backtesting on the rebuilt index instead of the archive changes the ranking. On the rebuild the first rule scores best ($1.40M), the candidate makes $946k and the adopted rule $170k. The candidate beats the adopted rule on either source.

Proposed change, not yet applied: switch the default to F&G < 40, SMA38 exit, SMA180 filter and a −25% stop. Expect a worst drop of about −50%, not the −24% seen in 2021−2026. The live job still runs the rule above until the settings change.

What is running now (PR #186)

12:58 PT stop check
On trading days (09:58 on half days), if the strategy holds TQQQ, it reads the live TQQQ price. At or below entry − 10%, it posts a red "SELL TQQQ now before the close" alert to Discord. It writes nothing to the database. The exchange calendar decides which of the two cron times is active.
15:20 PT daily signal
It posts BUY, SELL, HOLD, WAIT or STOP to Discord and saves the day's state to strategy_signals. HOLD shows the entry and stop prices. WAIT shows why it isn't buying: QQQ is below SMA180, or buying is blocked after a stop.
Missing data
If the day's F&G, QQQ or TQQQ data is missing, or the stop check's live price is more than 5 minutes old, the job fails instead of posting a wrong signal, and the cron failure alert fires.
Settings
strategies.fng_tqqq in config/settings.yaml: buy_below: 30, sma_window: 38, regime_sma_window: 180, stop_loss_pct: 0.10. Setting the filter and stop to null brings back the first rule.
Orders
None yet. The strategy is signal-only.

Caveats and next steps

  • Small sample. There is one bear market and two stop-outs. The −10% stop is next to a cliff, and if live trading shows frequent near-misses, −11% is the safer setting.
  • Backtest against live timing. The backtest stops at the 13:00 PT close, while the live check uses the 12:58 price. If TQQQ crosses the stop in the last 2 minutes, or recovers by the close, the two can disagree.
  • Revised F&G history. CNN revises past values, and the live job sees the value at 15:20 PT, which may differ slightly from what the backtest used.
  • Fills. TQQQ market-on-close orders must be in by 12:50 PT, so a 12:59 stop has to be a market or limit order. Expect a few cents of difference from the official close.
  1. Phase 2: IBKR paper trading through IB Gateway on the Mac mini: reconcile actual holdings, place orders with caps, and post order and fill alerts to Discord.
  2. Phase 3: live trading, only after a paper-trading period and your explicit go-ahead.