Trend following · daily rule · Indexes & ETFs
Schaff Trend Cycle on S&P 500 ETF
What the play says
Latest reading: STC 98.99
SPY with the play, last two years
Shading shows the play's call from the close that triggered it.
Schaff Trend Cycle (10, 23, 50)
Dashed lines at 25, 75.
Growth of $10,000 since 2005
Log scale. After trading costs, with T-bill interest while out.
The record
The play against buying and holding SPY over exactly the same dates, after costs.
| Play, since 2005 | Hold, since 2005 | Play, 5 yrs | Hold, 5 yrs | |
|---|---|---|---|---|
| Annual return | +4.4% | +11.0% | +7.1% | +13.9% |
| Total return | +157% | +861% | +41% | +91% |
| Worst drawdown | −43.7% | −55.2% | −24.5% | −24.5% |
| Volatility | 11.9% | 18.9% | 11.5% | 17.1% |
| Sharpe ratio | 0.28 | 0.55 | 0.33 | 0.62 |
| Time invested | 63% | 100% | ||
| Switches per year | 12.3 | 0 |
Every call, graded
Right on 99 of 268 closed calls (37%). In calls averaged +0.8%; out calls saw SPY move +1.1% on average.
| Called | Call | Price | Until | SPY moved | Result |
|---|---|---|---|---|---|
| Sep 21, 2026 | IN | $773.50 | now | +0.6% | open |
| Aug 20, 2026 | OUT | $760.71 | Sep 21, 2026 | +1.7% | ✕ wrong |
| Aug 3, 2026 | IN | $755.79 | Aug 20, 2026 | +0.7% | ✓ right |
| Jun 5, 2026 | OUT | $733.83 | Aug 3, 2026 | +3.0% | ✕ wrong |
| Apr 6, 2026 | IN | $655.61 | Jun 5, 2026 | +11.9% | ✓ right |
| Jan 20, 2026 | OUT | $672.33 | Apr 6, 2026 | −2.5% | ✓ right |
| Dec 24, 2025 | IN | $685.03 | Jan 20, 2026 | −1.9% | ✕ wrong |
| Dec 16, 2025 | OUT | $671.62 | Dec 24, 2025 | +2.0% | ✕ wrong |
| Nov 26, 2025 | IN | $672.42 | Dec 16, 2025 | −0.1% | ✕ wrong |
| Nov 6, 2025 | OUT | $663.15 | Nov 26, 2025 | +1.4% | ✕ wrong |
| Oct 8, 2025 | IN | $665.93 | Nov 6, 2025 | −0.4% | ✕ wrong |
| Sep 25, 2025 | OUT | $651.03 | Oct 8, 2025 | +2.3% | ✕ wrong |
An in call is right when the price rose before the next call; an out call is right when it fell. The latest 12 of 269 calls shown.
How the play works
- Buy setup: the Schaff Trend Cycle (STC, settings 10, 23, 50) turns up from below 25. In when a later close is above that setup day's high.
- Sell setup: the STC turns down from above 75. Out when a later close is below that setup day's low.
- A new setup the other way cancels a pending one. Otherwise the rule keeps its last call.
Schaff lets the trigger be a trade through the setup day or a close beyond it. Be The Puck uses the close.
'Turns up' means today's STC is above yesterday's after yesterday's was no higher than the day before (mirror for 'turns down'). Schaff describes the turn but gives no exact test.
Schaff's defaults (cycle 10, averages of 23 and 50 days, smoothing 0.5) are used on daily bars. He built the indicator for currencies.
Where the rules come from
The case against
Valeriy Zakamulin tested moving-average timing on up to 155 years of U.S. stock data and found no statistically significant edge in the second half of that record. The rules earned their keep in a few severe bear markets and lagged buy and hold for long stretches in between.