200-day moving average on TLT: does 150 or 250 work as well?
200-day setting against buying and holding TLT, 2003-10-06 to 2026-09-30 (22.9 years), cash earning 3-month Treasury bills. The backtester's own figures (cash at 0%, no risk-free rate) are in the box at the end.
The read
- The 200-day setting's Sharpe was -0.03, below the 0.20 needed to read its neighbours as a share of it; 150, 175, 225 and 250 days scored between -0.01 and 0.10.
- The 200-day setting ranked 10th of 11 settings by Sharpe; the highest, the 75-day setting at 0.15, is visible only in hindsight (the walk-forward section shows what picking the highest each time would have done).
- From 2003-10-06 to 2026-09-30 the 200-day rule on TLT returned 0.9% a year with a -42% maximum drawdown and a Sharpe of -0.03; buying and holding returned 3.0%, -48% and 0.15 (cash earning 3-month Treasury bills; Sharpe in excess of bills).
- 0 of 11 settings beat buy-and-hold's Sharpe; 8 of 11 cut its maximum drawdown by 10 points or more.
- Choosing the setting with the highest Sharpe over the previous 10 years and holding it for the next 2 (6 times, 2014-09-22 to 2026-09-30) returned -0.2% a year with a -36% maximum drawdown and a Sharpe of -0.16; the fixed 200-day setting returned -1.5%, -42% and -0.29 over the same years, and buy-and-hold -0.4%, -48% and -0.10. The chosen settings averaged a Sharpe of 0.36 in sample and -0.42 out of sample; 3 different settings were chosen in 6 windows, with 84 entries out of sample.
- In 10% of 2,000 resampled histories (circular 21-day blocks) the rule's Sharpe was above buy-and-hold's, and its maximum drawdown was shallower in 56%. These are resampled histories, not a forecast: they measure how stable the gap is in the history we have, not the odds it repeats.
- At 20 bps a side the Sharpe is -0.18 (-0.03 at 5 bps, 0.02 at 0); the 200-day setting made 5.7 entries a year.
- The rule was in the market 59% of the days and held cash otherwise. With cash at 0% and no risk-free rate, as the backtester has it, the rule's Sharpe is 0.06 against 0.28 for buy-and-hold, compared with -0.03 and 0.15 here.
- Trading one day later (fills at the next day's close) gives a Sharpe of 0.08 against -0.03.
- The rule lost more than buy-and-hold in 2 of the 6 stress windows listed: in 2008 it returned 27% against 34%; in 2020 it returned 16% against 18%.
Verdict: Trailed buy-and-hold. The 200-day setting's Sharpe in excess of bills was -0.03: it did not beat holding bills.
200-day against its neighbours
| Moving-average length (days) | Sharpe | CAGR | Max drawdown | Trades |
|---|---|---|---|---|
| 50 days | -0.07 | 0.4% | -34.0% | 242 |
| 75 days (highest Sharpe, chosen with hindsight) | 0.15 | 2.8% | -31.5% | 167 |
| 100 days | 0.06 | 1.9% | -34.6% | 156 |
| 125 days | 0.12 | 2.6% | -33.2% | 130 |
| 150 days | 0.10 | 2.3% | -30.5% | 120 |
| 175 days | 0.03 | 1.5% | -40.6% | 119 |
| 200 days (famous) | -0.03 | 0.9% | -42.1% | 130 |
| 225 days | -0.01 | 1.1% | -42.4% | 123 |
| 250 days | 0.04 | 1.6% | -38.2% | 100 |
| 275 days | 0.06 | 1.9% | -30.9% | 97 |
| 300 days | -0.01 | 1.1% | -32.2% | 95 |
Highest Sharpe on the grid, chosen with hindsight: 75-day (0.15). The famous setting is outlined; settings with fewer than 5 trades are hatched and left out of the neighbourhood and the shares.
Against buy-and-hold
| 2003-10-06 to 2026-09-30 | 200-day rule | Buy-and-hold |
|---|---|---|
| CAGR | 0.9% | 3.0% |
| Volatility (annualized) | 11.1% | 14.3% |
| Max drawdown | -42.1% | -48.4% |
| Sharpe, excess over T-bills (the page's basis) | -0.03 | 0.15 |
| Sharpe with cash at 0% and no risk-free rate (the backtester's basis) | 0.06 | 0.28 |
| Days invested | 59% | 100% |
| Trades over the window | 130 | 1 |
| Trades a year | 5.7 | 0 |
| Worst calendar year | 2009 (-21%) | 2022 (-31%) |
Walk-forward: choose in sample, judge out of sample
In each in-sample window of 10 years the setting with the highest Sharpe is chosen among settings with at least 3 trades in it, then held for the next 2 years out of sample. 6 windows, 2014-09-22 to 2026-09-30 (12.0 years); 238 earlier bars are not used. Switching settings at a window boundary is not charged.
| # | In sample | Out of sample | Chosen | In-sample Sharpe | Out-of-sample Sharpe | 200-day fixed | Buy-and-hold |
|---|---|---|---|---|---|---|---|
| 1 | 2004-09-17 to 2014-09-19 | 2014-09-22 to 2016-09-20 | 125-day | 0.39 | 0.55 | 0.06 | 0.81 |
| 2 | 2006-09-18 to 2016-09-20 | 2016-09-21 to 2018-09-20 | 75-day | 0.46 | -0.76 | -0.64 | -0.51 |
| 3 | 2008-09-18 to 2018-09-20 | 2018-09-21 to 2020-09-22 | 125-day | 0.35 | 0.79 | 1.10 | 1.11 |
| 4 | 2010-09-20 to 2020-09-22 | 2020-09-23 to 2022-09-22 | 125-day | 0.51 | -0.48 | -0.84 | -1.25 |
| 5 | 2012-09-18 to 2022-09-22 | 2022-09-23 to 2024-09-25 | 150-day | 0.37 | -1.08 | -1.54 | -0.21 |
| 6 | 2014-09-22 to 2024-09-25 | 2024-09-26 to 2026-09-30 | 150-day | 0.10 | -1.52 | -1.84 | -0.91 |
| Over 2014-09-22 to 2026-09-30 | CAGR | Sharpe | Max drawdown |
|---|---|---|---|
| Walk-forward (chosen in sample) | -0.2% | -0.16 | -35.5% |
| 200-day, fixed | -1.5% | -0.29 | -42.1% |
| Buy-and-hold | -0.4% | -0.10 | -48.4% |
Mean in-sample Sharpe of the chosen settings 0.36, mean out-of-sample -0.42 (a drop of 0.78). 3 different settings were chosen in 6 windows. A 10-year window held a median of 43 trades of the famous setting.
Resampled histories
The rule's and buy-and-hold's daily returns are resampled together in circular 21-day blocks (so volatility clusters stay together and both series see the same days), 2,000 times, from the common window. Resampled histories, not a forecast: this measures how stable the gap is in the history we have, not the odds it repeats.
| 5th / 50th / 95th percentile | 200-day rule | Buy-and-hold |
|---|---|---|
| CAGR | -2.7% / 0.9% / 4.7% | -1.4% / 3.1% / 7.9% |
| Sharpe, excess over T-bills | -0.37 / -0.02 / 0.31 | -0.16 / 0.16 / 0.48 |
| Max drawdown | -61.4% / -38.8% / -24.4% | -62.5% / -40.2% / -26.1% |
| Rule's Sharpe above buy-and-hold's | 10% of resamples | |
| Rule's max drawdown shallower | 56% of resamples |
Stress windows
| Window | 200-day rule | Buy-and-hold |
|---|---|---|
| Calendar 20082008-01-01 to 2008-12-31 | 27% | 34% |
| Calendar 20202020-01-01 to 2020-12-31 | 16% | 18% |
| Calendar 20222022-01-01 to 2022-12-31 | -3% | -31% |
| Buy-and-hold's drawdown 12020-08-04 to 2023-10-19 | -29% | -48% |
| Buy-and-hold's drawdown 22008-12-30 to 2009-06-10 | -18% | -27% |
| Buy-and-hold's drawdown 32012-07-25 to 2013-08-21 | -13% | -21% |
Calendar years are whole years inside the window. The other rows are buy-and-hold's three deepest drawdowns (peak to trough); the rule's return is over the same dates.
Costs, fills and cash
| 200-day rule | CAGR | Sharpe | Max drawdown | Entries a year |
|---|---|---|---|---|
| 0 bps a side | 1.4% | 0.02 | -39.0% | 5.7 |
| 5 bps a side (the page's basis) | 0.9% | -0.03 | -42.1% | 5.7 |
| 20 bps a side | -0.8% | -0.18 | -50.7% | 5.7 |
| Trade one day later (fills at the next day's close) | 2.1% | 0.08 | -41.0% | 5.7 |
| Cash at 0% and no risk-free rate (the backtester's basis)buy-and-hold on this basis: CAGR 3.0%, Sharpe 0.28, max drawdown -48.4% | 0.0% | 0.06* | -48.4% | 5.7 |
Sharpe is in excess of 3-month T-bills, except the last row (*), which uses the backtester's basis: cash at 0% and no risk-free rate. Trading a day later means the signal from today's close is filled at tomorrow's close.
Check it in the backtester
Open this rule in the backtester (TLT, daily, 5 bps)
The backtester runs on data through today, so its figures move slightly as new days arrive; the hash below identifies this page's window. As of data through 2026-09-30, over the backtester's own window (2003-05-15 to 2026-09-30, 23.3 years, cash at 0%, no risk-free rate):
- CAGR -0.3% (buy-and-hold 2.7%)
- Sharpe 0.03 (buy-and-hold 0.26)
- Max drawdown -48.4% (buy-and-hold -48.4%)
- Days invested 58%; trades 132
The backtester's overfit check (settings one or two steps away on short window and long window) compares neighbours with a Sharpe of 0.03 here, too low to read as a share of it, so no percentage is printed. Reproduce hash: 445037f8e121f61c.
Frequently asked questions
- Does the 200-day moving average work on TLT?
- From 2003-10-06 to 2026-09-30 the 200-day rule on TLT returned 0.9% a year with a -42% maximum drawdown and a Sharpe of -0.03; buying and holding returned 3.0%, -48% and 0.15 (cash earning 3-month Treasury bills; Sharpe in excess of bills). Verdict: Trailed buy-and-hold. The 200-day setting's Sharpe in excess of bills was -0.03: it did not beat holding bills.
- Would a 150- or 250-day average have done the same on TLT?
- The 200-day setting's Sharpe was -0.03, below the 0.20 needed to read its neighbours as a share of it; 150, 175, 225 and 250 days scored between -0.01 and 0.10. 0 of 11 settings beat buy-and-hold's Sharpe; 8 of 11 cut its maximum drawdown by 10 points or more.
- Is the 200-day result on TLT curve-fitting?
- Choosing the setting with the highest Sharpe over the previous 10 years and holding it for the next 2 (6 times, 2014-09-22 to 2026-09-30) returned -0.2% a year with a -36% maximum drawdown and a Sharpe of -0.16; the fixed 200-day setting returned -1.5%, -42% and -0.29 over the same years, and buy-and-hold -0.4%, -48% and -0.10. The chosen settings averaged a Sharpe of 0.36 in sample and -0.42 out of sample; 3 different settings were chosen in 6 windows, with 84 entries out of sample. In 10% of 2,000 resampled histories (circular 21-day blocks) the rule's Sharpe was above buy-and-hold's, and its maximum drawdown was shallower in 56%. These are resampled histories, not a forecast: they measure how stable the gap is in the history we have, not the odds it repeats.
Caveats
- Fills are at the signal day's close (in practice the closing minutes): the signal uses that day's close and the position earns the next day's return, with no look-ahead. The sensitivity table shows trading a day later.
- 5 bps a side on every entry and exit, no spread beyond that and no taxes (every exit is a taxable sale in a taxable account). The trend-filter pages use no trading costs, as the portfolio builder does; these daily rules trade more, so they pay 5 bps a side.
- Idle cash earns the 3-month Treasury yield on this page (a yield, not a fund's total return, using the last observation before each day). The backtester keeps idle cash at 0% and uses a risk-free rate of 0, which flatters any rule that sits in cash: both bases are shown, and the verdict uses the Treasury basis.
- Sharpe is annualized from daily returns (mean over sample standard deviation, times the square root of 252), in excess of the 3-month bill on this page; CAGR is computed from bars over 252.
- Prices are total-return-adjusted closes: buy-and-hold collects every dividend, the rule only while it is invested.
- The fund's own history only, from 2002-07-30; there is no earlier proxy history.
- Long-only, no leverage, no regime filter. A setting that is already in the market at the start of the common window pays no entry cost inside it.
- The famous settings were fixed in advance because they are famous, not chosen on this data; the grids are a sensitivity analysis around them. The selection effect lives in the highest-Sharpe setting of a grid, which is expected to beat the famous one even when nothing real is going on: choosing it each time is what the walk-forward section tests. The set ran about 600 backtests across 12 pages; some settings look good by chance.
- The window lengths, block length and the thresholds behind each verdict were fixed before the results were seen.
- One historical path; past results do not predict future results. Not investment advice.
Methodology
- Data
- Daily total-return-adjusted closes from Yahoo Finance via MarketHeist (the fund's own history; no proxy splicing), through 2026-09-30 (the last trading day of the last complete month). Today's partial bar is always cut. Idle cash earns the FRED 3-month Treasury constant-maturity yield (DGS3MO), using the last observation dated before each bar's start.
- The rule
- Hold the fund while its price is above its 200-day simple moving average; hold cash otherwise. Long-only, unlevered, one position size, 5 bps a side. A signal from a day's close is filled at that close (an idealized fill; the sensitivity table shows one day later).
- Windows
- Every comparison uses one common window per ETF: from the first bar at which every setting on the grid (and every sensitivity run) is measurable to the data end, so a long-lookback setting is never compared over a shorter sample than a short one. TLT: 2003-10-06 to 2026-09-30 (22.9 years). Buy-and-hold is the same fund over the same window. A page needs a common window of at least 15 years containing whole calendar years 2008, 2020 and 2022. The backtester's own window (in the box at the end) starts at each setting's own first measured bar, so its figures differ slightly.
- Metrics
- The engine's own functions: Sharpe is the mean over the sample standard deviation of daily returns times the square root of 252, here in excess of the 3-month bill; CAGR is from bars over 252; maximum drawdown is on the compounded window. A trade is an entry. On the backtester's basis (cash at 0%, no risk-free rate) the same rules look better against buy-and-hold than they do after bills; both are shown.
- Neighbourhood
- The settings 50 days either side of the famous one (150, 175, 225 and 250 days for the 200-day rule). Settings with fewer than 5 trades over the window are not neighbours. The share of the Sharpe that neighbours keep is the median neighbour Sharpe over the famous setting's, computed only when the famous setting's Sharpe is at least 0.20; it is classed as the backtester's overfit badge is (robust at 70% or more, sensitive from 50%, fragile below).
- Walk-forward
- Rolling windows anchored to the data end: 10 years in sample, 2 out of sample, stepping 2 years; complete windows only (at least 4); in each in-sample window the setting with the highest Sharpe among those with at least 3 trades is chosen (ties go to the lowest grid index). The app's own walk-forward tool is not used here: it restarts the indicator inside each test slice.
- Resampling
- Paired circular moving-block bootstrap, 21-day blocks, 2,000 resamples, seeded from the reproduce hash so a regeneration on unchanged data is identical. It differs from the backtester's Monte Carlo panel, which reorders single days (every reordering ends at the same final value) or resamples single days (which destroys volatility clusters).
- Verdict
- One per ETF, first match wins: Trailed buy-and-hold (Sharpe at or below zero, or fewer than 25% of settings beat buy-and-hold's Sharpe while the famous one trails it by 0.10 or more); Sits on a spike (the famous setting beats buy-and-hold but its neighbours keep under 50% of its Sharpe); Held up in this test (Sharpe at least 0.10 above buy-and-hold's, at least 60% of settings above it, the walk-forward chain at or above buy-and-hold's out of sample, 80% of resamples, and the same gap with fills a day later and at 20 bps; at least 30 trades, and 10 entries by the walk-forward chain out of sample, otherwise Too few trades to call, or Held up only without frictions when only the frictions fail); Shallower drawdown, lower return (max drawdown shallower by 10 points or more with a lower CAGR); otherwise No reliable difference. The thresholds were fixed before the results were seen.
- Generated
- 2026-10-13; engine 1.0.0. Every figure is computed and every sentence is rule-based over those figures; no language model is involved. Reproduce hash of the famous setting over the backtester's own window:
445037f8e121f61c. - Related
- All robustness checks · TLT in the backtester · the ma crossover indicator
The 200-day rule on other ETFs: SPY, QQQ, GLD, EFA
Other rules on TLT: golden cross, 12/26-day EMA crossover (the MACD line above zero), RSI(14) 30/70 rule
Historical simulation, not investment advice. Past results do not predict future results.