SledgeKey Backtests
What a rebalance schedule is actually worth
The rebalance schedule is the setting almost nobody tests, because most screening tools never expose it. We took the screen from our Quality at a Fair Price backtest and ran it four times over the same ten years, changing nothing except how often the portfolio was set back to its target weights: once a year, twice a year, quarterly, and monthly. The entire experiment moved the result by 1.19 points a year. The busiest schedule did not finish first, and the least active one finished last.
Semi-annual came first at 12.33 percent a year, quarterly and monthly landed within two tenths of a point behind it, and annual trailed the field at 11.14 percent. Every schedule lost to the S&P 500, which returned 15.29 percent a year over the same window. Those two numbers frame the whole page: how often you rebalance this screen was worth about one point a year, and the gap between running this screen and simply holding the index was three to four points.
Annualized return by rebalance schedule · September 2016 to September 2026
Each column shows the realized annualized return (dot) inside that run's Monte Carlo five-year CAGR cone: the darker band covers the middle half of 5,000 resampled paths, the lighter band runs from the 5th to the 95th percentile. Hover or tap a column for the full figures.
The exact screen
The screen is the one from our Quality at a Fair Price page, unchanged: profitability on two measures, a ceiling on the earnings multiple, and cash generation as a hard requirement. On the screen date it matched 331 companies, and all four runs filled their twenty slots at every rebalance. The four runs share every row of this table except the rebalance row.
| Universe | NYSE and NASDAQ operating companies, all 11 sectors |
| Market capitalization | $1B minimum |
| Return on equity | 15% minimum |
| Operating margin | 15% minimum |
| P/E ratio | 25 maximum |
| Free cash flow | Positive, applied through the Quality filter |
| Liquidity floor | $100,000 median daily dollar volume |
| Holdings | 20 maximum, equal weight, 10% position cap |
| Rebalance | Annual, semi-annual, quarterly, or monthly (the swept setting) |
| Transaction cost | 0.10% (10 bps) per trade |
| Hedging | Off |
| Benchmark | SPY |
| Window | September 18, 2016 to September 16, 2026 (120 months; rebalances fall on the 18th) |
All four runs sit on the same monthly grid, so their benchmark series are identical to the byte, and any difference between the columns below comes from the portfolios alone. One comparison against the rest of this series is worth pinning down before the table. The Quality at a Fair Price page reports 11.49 percent a year for this screen rebalanced annually; this page's annual run reports 11.14. The two runs differ only in their grid, with rebalances on the 15th of the month there against the 18th here, and by three days of window at each end. Three days and a different anchor day moved the answer by 0.35 points, which is worth remembering when the columns below sit 1.19 points apart.
Four schedules, side by side
| Schedule | Total return | Annual return | Sharpe | Max drawdown | Volatility | Trades | Trading costs | Final value |
|---|---|---|---|---|---|---|---|---|
| Annual | +187.36% | 11.14% | 0.65 | -27.05% | 14.11% | 236 | $1,713 | $287,356 |
| Semi-annual | +219.70% | 12.33% | 0.71 | -26.90% | 14.31% | 413 | $2,875 | $319,696 |
| Quarterly | +216.33% | 12.21% | 0.71 | -25.55% | 14.24% | 651 | $4,194 | $316,327 |
| Monthly | +214.53% | 12.15% | 0.71 | -25.89% | 14.13% | 893 | $5,163 | $314,528 |
| S&P 500 (SPY) | +314.62% | 15.29% | n/a | n/a | n/a | n/a | n/a | $414,622 |
The three schedules that touch the portfolio more than once a year are nearly indistinguishable. Semi-annual, quarterly and monthly finished within 0.18 points of one another on annualized return, share a Sharpe ratio of 0.71 to two decimals, and kept their worst falls within a point and a half of each other. Annual is the outlier, about a point behind the pack, and its shortfall is not one bad stretch. Measured calendar year against calendar year, the annual run finished behind the semi-annual run in eight of the nine full years in the window; 2017 was the only exception.
An annual portfolio formed each September sits untouched for twelve months while its members drift away from the screen that chose them. In this window that patience was most expensive in 2020, 2022 and 2025, where the annual schedule gave up 2.45, 1.73 and 2.85 points to the semi-annual one, its three worst calendar years against the twice-a-year run. The ordering across the other three columns carries its own message. If more frequent rebalancing simply harvested more signal, monthly would sit on top, and it sits third, behind both semi-annual and quarterly. Whatever advantage faster rebalancing earns on a screen like this is used up somewhere between two and four rebalances a year.
More trading, mostly the same result
What frequency certainly does is trade. The annual schedule made 236 trades over the decade and paid $1,713 in costs at ten basis points a trade; monthly made 893 trades and paid $5,163, three times as much. Spread across ten years on a portfolio that averaged roughly $180,000, the extra cost comes to about 0.19 points a year, which is real money and still far too small to explain the ordering in the table above.
The cost assumption is doing quiet work here. At ten basis points, frequency is close to free and the four schedules finish in a pack. Retail spreads and slippage often run several times that, and the dollar cost of each schedule scales in proportion, so the same 893 trades at fifty basis points would have taken roughly five times as much out of the monthly run. Every extra basis point of cost falls hardest on the busiest column. Cheap execution makes this knob forgiving, and expensive execution decides it in favor of the calm schedules before any signal gets a vote.
The cone around every schedule
A 1.19 point spread from four runs of one decade invites the question of whether the ordering means anything at all. For each schedule, SledgeKey resamples that run's own monthly returns in blocks averaging twelve months, builds 5,000 alternative five-year paths, and reads percentiles off the result. The cone this produces is a distribution around what the strategy already did. It stress tests the history you have; it is never a forecast of the history you will get.
| Schedule | 5th percentile CAGR | Median CAGR | 95th percentile CAGR | Chance of a 5-year loss | Chance of doubling |
|---|---|---|---|---|---|
| Annual | 3.8% | 11.5% | 18.1% | 1.0% | 20.5% |
| Semi-annual | 5.1% | 12.5% | 19.3% | 0.3% | 29.7% |
| Quarterly | 4.8% | 12.5% | 19.6% | 0.4% | 29.9% |
| Monthly | 5.2% | 12.2% | 19.3% | 0.3% | 26.3% |
The bands overlap almost completely. The annual schedule's cone runs from 3.8 to 18.1 percent a year and monthly's runs from 5.2 to 19.3. Each band is about fourteen points wide, twelve times the spread between the best and worst realized result, so the ordering in the table above sits comfortably inside the noise. The one reading with some spine to it is that annual's cone reaches lower and its chance of a losing five years is roughly three times everyone else's, which fits a schedule that can carry a stale position for a full year.
Two cautions belong next to any cone. The resampling assumes the strategy's monthly return distribution is stationary, and real markets break that assumption at every regime shift. And because block resampling reproduces clusters of bad months, it fattens the left tail and pushes the median terminal value slightly above the backtest's own growth rate; the annual run's median works out to 11.5 percent a year against a realized 11.1. The median of a cone is a percentile of a simulation, and reading it as an expected return flatters every strategy it touches.
What to set, and what actually mattered
For a screen built on slow fundamentals, at costs anywhere near ten basis points, the data supports a plain default: rebalance twice a year or quarterly and move on. Annual left about a point a year on the table in this window. Monthly added 242 trades over quarterly and finished 0.06 points behind it, paying for attention that bought nothing. Nothing in the cones suggests either fact would repeat reliably, which is itself the argument against tuning this knob with any confidence.
The louder result is the one every column shares. This screen trailed a plain index fund at every frequency we tried, by between 2.96 and 4.15 points a year. Deciding to run the screen at all mattered roughly three and a half times as much as any decision about its schedule, and the settings people argue about are usually downstream of the ones that decide the outcome: which screen, which universe, which decade. The schedule earned one honest conclusion from four runs, that it is close to free to get right, and expensive to obsess over.
Where this result is fragile
This is one screen, one decade, one market. A momentum strategy, whose signal decays in weeks, rewards frequent rebalancing in a way a quality screen structurally cannot, so nothing here generalizes to strategies built on faster information. The window matters too: a decade with a different sequence of crashes and recoveries would reorder the columns, and the width of the cones above is a fair measure of how easily.
Three mechanical choices are load-bearing. Costs are fixed at ten basis points per trade, which flatters the busy schedules. Every run rebalances on the 18th of the month because that is where this sweep's data grid falls, and we have not swept the anchor day, even though the comparison with our own earlier annual run shows a three-day shift moving the result by 0.35 points. And all four runs use point-in-time fundamentals with delisted companies kept in the universe and booked out at their last traded price, the same data discipline as every page in this series.
The stable figures on this page are the total returns, the annualized returns, the final values and the daily-basis drawdowns. The dispersion statistics, including volatility, Sharpe and the cone percentiles, move as the window moves at either end. The configuration table exists so that anyone can rerun any column here, or a schedule we did not try, and check the answer against their own decade.