The Ten Steepest Slopes on the S&P 100: 11.6% a year against an index fund's 9.3%, and a 30% worst loss against 56%

The Ten Steepest Slopes on the S&P 100: 11.6% a year against an index fund's 9.3%, and a 30% worst loss against 56%

The short version

What it doesHolds up to ten of the largest US companies, the ones whose 125-day average price is climbing fastest. It only does so while the S&P 500 is above its own 200-day average, and sells everything when it drops below.
What it made11.61% a year over 31.72 years, against 9.31% a year for an S&P 500 index fund bought and held. Neither figure includes dividends.
What it costAt its worst it was 30.35% below its previous high, in 2021–2023. The index fund's worst was 56.48%.
How invested it wasAbout three quarters of the money on an average day. On one day in four it held nothing at all.
The test that matteredI rebuilt it 300 times with the stocks picked by dice. Not one of the 300 did as well.
The catchThe whole lead was built before 2011, mostly by sitting out two crashes. Since then the index fund has made 12.19% a year against its 9.70%.

Everything below is a backtest of my own rules on past prices. It is a record of what I measured, not advice and not a recommendation to trade anything.

What this is, and what it isn't

The Ten Steepest Slopes is a trend-following strategy: a bet that a stock which has been climbing steadily will keep climbing for a while. It trades the S&P 100, a hundred of the largest US companies, as the index really stood on each day. For every stock it asks one question: is the average of its last 125 closing prices higher than it was 25 trading days ago? The ten whose average is rising fastest get the money.

On top of that sits a market filter. When the S&P 500 closes below its own 200-day average, the strategy sells everything and waits. I call the filter "on" while the S&P 500 is above its average and buying is allowed, and "off" when it is below.

That filter turned out to do most of the selling. Of the 1,267 trades that closed, 1,034 ended because the filter switched off. Only 210 ended the way the name suggests, with the stock's own average turning down.

The "worst loss" is called drawdown: the deepest fall from a peak in the account to the low that follows. This one was about half the index fund's. But it is not a way to beat the market every year. It finished ahead in 17 of the 32 calendar years, counting 2026 so far. It won overall by being out of the market for most of the two big crashes, 2000–2002 and 2008.

The rules

Every evening it checks the S&P 500. If it closed below its 200-day average, every position is sold at the next morning's open and nothing is bought. If it is above, the strategy looks for S&P 100 stocks whose 125-day average has just risen above its level of 25 trading days earlier. Free slots go to the candidates whose average is climbing fastest. There are ten slots of 10% of the account each, bought at the next open. A position is held until its own average turns down or the filter switches off, and either one sells at the next open. A fall of 25% from the buy price sells at once.

Four steps every evening. The market filter overrides everything else, and it is what ended four trades in five.

The rules in full, precise enough to rebuild

  • What it can buy. The S&P 100 as it really stood each day, including companies later dropped or delisted. Price above $5, and more than $1 million traded a day on average over the last 21 days.
  • The trend gauge. The simple average of the last 125 closing prices, compared with its own value 25 trading days earlier. Higher means rising.
  • When it can buy at all. The S&P 500 closed above its 200-day average. The code reads the index a day late: an order for Monday's open depends on Thursday's close, not Friday's.
  • The candidates. A stock becomes a candidate on the first evening its average is rising after it was last sold, or on the evening the filter comes back on. If every slot is full that day, it gets no second chance until its average turns down and back up, or the filter switches off and on again. The four-line original does not say this. It comes from how the backtesting platform treats a signal that stays on for weeks, and the stress table shows what reading the rule literally does.
  • Choosing between them. The candidate whose average rose most over the 25 days, in percent, gets a slot first.
  • Size. Ten slots, each 10% of the account at the time of buying. Nothing is ever borrowed.
  • Selling, whichever comes first. The average closes below its level of 25 days earlier: sell at the next open. The S&P 500 closes below its 200-day average: sell everything at the next open. The price falls 25% below the buy price: sell at that level during the day, or at the open if it opens below it.
  • Costs. Commission of half a cent a share. The test adds no slippage, the gap between the price you expect and the one you get, and pays nothing on idle cash. Prices are adjusted for splits but not for dividends.

One real trade, start to finish

On 2 November 2023 the S&P 500 closed back above its 200-day average after six sessions below it. The filter reads the index a day late, so the buy orders went in for Monday 6 November. The strategy held nothing, every rising S&P 100 stock was a candidate, and the ten steepest got a slot. One was Amazon, bought at the open at $138.76.

The filter then stayed on for sixteen months. Amazon's average kept climbing until 6 September 2024, when it slipped 0.04% below its level of 25 trading days before. That was enough. It sold at the next open, on 9 September, at $174.53: up 25.77% in 211 trading days. A day later its average was rising again, but the slot had already gone to another stock.

Two details show how the strategy really behaves. Amazon had been bought once before, on 26 October, together with nine others, although the S&P 500 had closed below its average the evening before. The filter was a day behind, so it bought all ten, and it sold all ten the next morning. And three of the other stocks bought on 6 November never saw their own averages turn down. The market filter sold Nvidia, Meta and Broadcom on 12 March 2025, each up between 99% and 152%.

One real trade, checked bar by bar: bought the morning after the market filter came back on, sold the morning after Amazon's own 125-day average slipped below its level of 25 trading days earlier.

What it did over 31 years

The S&P 100 with its real historical membership, 3 January 1995 to 23 September 2026. $40,000 to start, ten slots of 10%, half a cent a share in commission, orders at the next open, 1,277 trades. No dividends and no interest on idle cash. The comparison is an S&P 500 index fund bought on day one and never sold, with the same money and commission. A backtest, not a live track record.

Over the full 31.72 yearsThe strategyIndex fund, bought and heldSame fund, with the market filter
$40,000 became$1,298,114$674,299$429,610
Return a year11.61%9.31%7.77%
Worst loss from a peak30.35%56.48%23.81%
Sharpe ratio0.740.570.68
Money at work, average day74.5%100%75.7%

Sharpe compares the return with how bumpy the ride was: higher means the same gain arrived more smoothly. The last column applies the market filter to the index fund itself.

The strategy against an S&P 500 index fund, on a log scale. The flat stretches are the market filter keeping it in cash. The lower panel shows how far each fell from its previous high.
EraStrategyIndex fundSame fund, filtered
1995–1999+27.19%+26.37%+22.55%
2000–2002−0.44%−15.62%−5.19%
2003–2007+15.67%+10.70%+5.09%
2008–2009+7.82%−12.69%+7.21%
2010–2019+6.50%+11.19%+6.11%
2020–2026+12.41%+13.79%+8.34%

The bear markets built the lead. The strategy held nothing at all for the whole of 2001 and the whole of 2008. Its account has been ahead of the fund on every trading day after 11 August 2000. From 2010 on, the fund did better in both periods.

One more thing the headline hides. Ten positions bought on 10 April 2026 were still open at the end and had made $310,390, a quarter of all the profit in 31 years. Measured to the end of 2025, the return was 10.95% a year.

What I tried to break

Every run is in the table below, including the ones that beat my own defaults. "Money at work" is the average share of the account invested. MAR is the return a year divided by the worst loss, so higher is better. A basis point is one hundredth of one percent of the price.

The full stress battery: 42 rows, 30 runs plus two benchmarks

GroupVariantReturn a year %Worst loss %MARTradesWinners %Money at work %
Baselinethe baseline run11.6130.350.381,27746.474.5
Market filterswitched off8.4151.310.1660241.794.7
Market filterreads the S&P 100 index (the code's own default)12.3328.940.431,23744.574.2
Market filter100-day average10.0249.180.201,88648.871.5
Market filter150-day average10.9932.370.341,70345.873.4
Market filter200-day average (default)11.6130.350.381,27746.474.5
Market filter250-day average10.9730.140.361,15844.675.9
Length of the stock's average75 days9.3623.320.401,41346.474.1
Length of the stock's average100 days10.5930.110.351,31047.374.5
Length of the stock's average125 days (default)11.6130.350.381,27746.474.5
Length of the stock's average150 days12.0230.140.401,22346.974.9
Length of the stock's average200 days13.5529.940.451,15748.474.9
Slope measured over10 days12.6934.060.371,37347.274.6
Slope measured over15 days11.0732.430.341,33445.874.5
Slope measured over25 days (default)11.6130.350.381,27746.474.5
Slope measured over50 days11.5329.400.391,21546.874.5
Slope measured over100 days11.2132.410.351,18046.274.7
Disaster stop15%11.5934.170.341,35546.474.6
Disaster stop20%11.7730.670.381,28947.174.5
Disaster stop25% (default)11.6130.350.381,27746.474.5
Disaster stop35%11.5430.960.371,26346.474.5
Disaster stopnone11.5430.960.371,26246.474.5
Positions5 of 20%16.0135.210.4662447.874.9
Positions10 of 10% (default)11.6130.350.381,27746.474.5
Positions20 of 5%9.3026.650.352,54045.974.3
Who gets a free slotsteepest average first (default)11.6130.350.381,27746.474.5
Who gets a free slotflattest average first7.0129.060.241,42146.373.4
How the buy rule is readone chance per upturn (default)11.6130.350.381,27746.474.5
How the buy rule is readany rising stock, on any day12.8830.730.421,24249.075.6
Slippage each waynone (default)11.6130.350.381,27746.474.5
Slippage each way1 basis point11.5230.470.381,27746.474.5
Slippage each way3 basis points11.3630.700.371,27746.074.5
Slippage each way5 basis points11.2030.920.361,27745.774.5
Slippage each way10 basis points10.8131.480.341,27744.674.5
Fillsnext open (default)11.6130.350.381,27746.474.5
Fillsnext close10.8828.360.381,27747.174.5
UniverseS&P 100 as it stood (default)11.6130.350.381,27746.474.5
UniverseS&P 500 as it stood11.1754.290.211,34648.175.5
UniverseNasdaq 100 as it stood14.4959.880.241,34248.074.8
Universetoday's S&P 100 list18.0531.820.571,21649.874.5
BenchmarkS&P 500 fund, bought and held9.3156.480.171100.0100.0
Benchmarkthe same fund, with the market filter7.7723.810.3310647.275.7

The dice test, the run that could have killed it. Here the day of buying is hardly a choice. A slot opens, usually because the filter has just come back on, and it is filled the next morning. The real choice is which stocks. So I built placebos: versions where that choice is made by dice.

The first set, 200 runs, keeps every rule, candidate, exit, slot and cost. Only the pick among the candidates is left to the dice. The second set, 100 runs, drops the trend rule altogether: the dice pick any S&P 100 stock while the filter is on, and hold it until the filter switches off.

What picked the stocksMiddle runBest runWorst loss of the middle run
Dice, among the real candidates (200 runs)7.93%10.65%27.82%
Dice, any S&P 100 stock (100 runs)7.10%9.76%31.09%
The real rule: steepest first11.61%30.35%

Not one of the 300 matched the real rule. The trend rule alone adds little: 7.93% for the middle run against 7.10% for dice choosing any stock. What earns the return is the ranking. Give the slot to the slowest riser instead of the fastest and it makes 7.01% a year, below the middle dice run.

Three hundred versions with the stocks picked by dice. The real rule sits to the right of every one of them.

The filter, meanwhile, is a cost on return alone. The index fund with the filter made 7.77% a year against 9.31% held straight through, and 276 of the 300 dice runs finished below the plain fund. What the filter buys is a smaller worst loss: 23.81% against 56.48%.

Two more results change the picture. Read literally, so that any rising stock can take a free slot on any day, the rule makes 12.88% a year on a 30.73% worst loss. Two honest people coding the four-line original could easily get different answers. And the code's own default filter reads the S&P 100 index, not the S&P 500 used in this review. That version makes 12.33% on 28.94%.

What survives

The ranking carries real information. None of 300 dice runs reached the real 11.61% a year, and the best made 10.65%. Reversed, the ranking makes 7.01%.

The settings are not on a knife edge. Averages from 100 to 200 days made between 10.59% and 13.55% a year, and 125 is not the best of them. A slope measured over 10 to 100 days lands between 11.07% and 12.69%. The 25% stop fired 13 times in 31 years; removing it cost 0.07 of a point.

Costs are not the weak spot. Each basis point lost on every order costs about 0.08 of a point a year: 11.61% with none, 10.81% at ten. These are among the most traded shares in the world.

The filter did its job in the long bear markets. −0.44% a year through 2000–2002 while the fund lost 15.62%, and +7.82% through 2008–2009 against −12.69%.

What breaks

The advantage is old. Since 2011 the fund has made 12.19% a year against 9.70%. In 2022 the filter did not help: the strategy lost 20.22% in the year, the fund 19.48%. Its worst loss ran from 27 December 2021 to 13 March 2023, and it took until 1 March 2024 to recover.

Today's list would flatter it by 6.44 points a year. Run on the stocks in the S&P 100 today, the same rules make 18.05% a year. Today's list is a list of winners chosen afterwards, and a rule that buys the fastest risers finds them.

A bigger pool is not safer. On the S&P 500 the same rules lost 54.29% in the spring of 2000, and on the Nasdaq 100 59.88%, both in under three months. The S&P 500 dipped below its average only for a day or two at a time that spring, so the filter kept buying back the fastest risers as they collapsed.

Fewer, bigger positions look better and hurt more. Five slots of 20% make 16.01% a year on a 35.21% worst loss; twenty slots of 5% make 9.30% on 26.65%.

The filter makes it busy. It sold everything it held 105 times in 31 years. Half of all trades lasted nine trading days or fewer. A faster, 100-day filter makes it worse: the worst loss grows to 49.18%.

Verdict

This suits someone who wants to own large US companies with a rule that steps aside in long bear markets, and who can live with trailing the index for years in between. The stock selection is real: the steepest risers beat dice in all 300 runs. But the lead over an index fund came from two bear markets, and the last fifteen years belong to the fund.

It does not suit anyone who wants to beat the index in a bull market, or who would test it on today's index members and believe the 18.05%. Nor anyone who expects the filter to catch every fall. It did not help in 2022, and it did not help the wider-pool versions in 2000.

More reviews like this one, with the formulas behind them, are on my Patreon: patreon.com/cw/SimpleStockTrade


Sources — every number traceable

Every figure in the text comes from one of the runs below, and each one records the conditions it was run under.

What each number came from

  • The baseline run. The full trade list, all 1,277 trades, and the account value and money at work for every one of the 7,984 trading days. The eras, the calendar years and the idle-cash check are all worked out from that daily curve.
  • The benchmarks. An S&P 500 index fund bought and held over the same window from the same starting money, and the same fund switched in and out by the market filter.
  • The stress battery. Thirty runs, one for each variant in the table above, plus the two benchmarks.
  • The placebos. 200 runs with dice picking among the real candidates, and 100 with dice picking any S&P 100 stock while the filter is on. The dice were replayed independently and checked: 63 of 63 values identical, spread evenly, with no correlation between neighbours.
  • Why each trade ended. Every closed trade was classified by its exit: 1,034 by the market filter, 210 by the stock's own average, 13 by the stop and 10 by a delisting.
  • The illustrated trade. Amazon's gauges recomputed bar by bar from the raw daily prices.
  • Idle cash, measured and left out of the article. Paying a flat 2% a year on uninvested cash would lift the return to 12.18% a year; at 4%, to 12.75%.

Audit of the backtest. The rules were recomputed from the raw daily bars and every trade was checked against them. All 1,277 entries are at the open of the entry day, with every buy condition true the evening before. All 1,267 closed trades exit on the right day at the right price. On none of the 313 buying days did a candidate that was left out rank above one that was bought. The only entries that are not "the first rising evening since the last sale" are the ten bought on the first day of the test, when every candidate is new.

Cross-check. The figures in the article were computed from the daily equity curve by an independent script, not read off the backtest report. The two agree: the report gives 11.59% a year, a worst drawdown of 30.35%, exposure of 74.49%, 1,277 trades, 596 winners (46.67%) and 47.44 bars held on average. The script gives 11.61% (it counts a year as 365.25 calendar days), 30.35%, 74.5% and the same trade count.

Disclaimer: All content on this site reflects the personal experience and opinions of the author and is provided for informational and educational purposes only. Nothing on this site constitutes financial, investment, or trading advice, and the author is not a licensed financial advisor. Trading stocks and other financial instruments involves substantial risk, including the possible loss of your entire invested capital. Past performance is not indicative of future results. You are solely responsible for your own trading and investment decisions; the author accepts no liability for any losses or profits resulting from the use of this content. Always do your own research and consider consulting a licensed financial professional before making any investment decision.