> ## Content Index
> Fetch the complete content index at: https://simplestocktrade.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# A 5-day-low bounce on SPY: the entry beats 99% of random entries, and still makes half of buy-and-hold
- URL: https://simplestocktrade.com/five-day-low-bounce-spy/
- Published: 2026-09-07T10:21:49.000Z
- Updated: 2026-09-07T10:21:49.000Z
- Author: Yevhen S
- Tags: Strategy reviews, Mean reversion, Backtesting, Risk

## What this is

Two rules. Buy SPY at the close on any day that close is the lowest of the last five closes. Sell at the close on the first day it finishes above the previous day's high. One filter sits on top: only buy while the price is above its 200-day average. That's the whole strategy — a bet that a short drop snaps back, which is what people mean by mean reversion. It holds a position for about four days at a time.

Over 33 years it made **4.5% a year, and its worst fall from a peak was 17.4%**. Simply buying SPY and holding it made **8.9% a year with a 56.5% worst fall**. So: half the return, a third of the pain, and it was sitting in cash three days out of four.

The interesting part is not the curve. It is that the buying rule survived the one test that could have killed it. I ran the same strategy three hundred more times with the buy day picked **at random** and everything else untouched, and **only two of the three hundred did better**. So *when* it buys is doing real work — just not enough of it to beat owning the index outright. Most of this article is about why both of those are true at once.

## Where it came from

The buying rule belongs to the Connors family of short-term bounce rules: buy a low of the last few days while the trend is still up. The variants were made popular by *Short Term Trading Strategies That Work*, where "Double 7's" buys a 7-day low. The selling rule here is the impatient half of that pairing. Instead of waiting for the price to make a high over the same number of days, it sells on the first close above yesterday's high, which is why the average trade lasts four days and not two weeks.

That lineage matters for one reason. This ground has been dug over hard since 2008, so an idea this old and this public is not hiding a big edge. What it might still have is a useful *shape*, and shape can be tested.

## The rules, exactly

![The strategy as a diagram: flat, then a 200-day average filter, then the five-day-low entry, then long; and out again on the first close above the prior day's high](https://storage.ghost.io/c/8a/20/8a2056d3-43f4-497a-abef-84bc9d80e6a7/content/images/2026/09/q5spy-mechanism.png)

The defaults, as written: the low is measured over 5 days, and it is a **closing** low — the price has to *finish* at the low, not just touch it during the day. The filter is a 200-day average of closing prices. Both the buy and the sell happen at the closing price of the day the signal appears, which in practice means an order that fills at the close. A position can never be closed on the same day it was opened. There is no stop loss, no profit target and no time limit. The selling rule is the only way out.

One thing about that selling rule is easy to skim past, and it matters: **the level it watches moves every day.** "Above yesterday's high" is not one price the strategy is waiting for. It is a different number each session, and it can move away from you as fast as towards you.

It puts the whole account into one position, which is what makes the comparison with buy-and-hold fair. Both are all-in whenever they are in.

Two things the source leaves you to find out for yourself: whether trading at the same close the signal is calculated from survives a more pessimistic assumption, and what the idle cash earns while the strategy sits out. The second matters more than any rule in the strategy.

## Where the orders actually go

![SPY candles around October 2025: the buy on the five-day closing low, the six days the position was held, and the moving green line showing the sell trigger - yesterday's high - which the close finally clears on 20 October](https://storage.ghost.io/c/8a/20/8a2056d3-43f4-497a-abef-84bc9d80e6a7/content/images/2026/09/q5spy-setup.png)

10 October 2025 makes a good example, because it's an ugly one. SPY fell most of the day and closed at 653.02 — the lowest close of the previous five days, with the price still above its 200-day average. The strategy bought that close.

Then it waited, and the green line on the chart is what it was waiting for. That line is yesterday's high, redrawn every day, and you can see it drifting around while the position is open. On 15 October the close got within 66 cents of clearing it — 665.17 against 665.83 — and 66 cents was not enough. It took until 20 October, when SPY closed at 671.30 against the previous day's high of 665.76, for the rule to fire. Six days held, up 2.8%.

Nothing about that position was going well on 15 October. The rule does not care.

And notice what the buy itself looks like from the inside. You are buying the worst close of the week, on the day it happens, with nothing telling you the fall is over. That *is* the trade. A reader who can't picture doing that on a genuinely frightening afternoon should stop here, because the backtest assumes you did it 534 times without flinching.

## I ran it

I ran the strategy file in AmiBroker first, because that's the authoritative version of it, then rewrote the same rules in Python so I could stress them. The Python version reproduces the AmiBroker run **trade for trade** — 534 trades, every buy date and every sell date identical, and the total profit differing by 31 cents out of $135,000\. Every number below comes from that Python version.

SPY daily prices, 29 January 1993 to 25 August 2026\. $40,000 to start, one position at a time using all of it, commission of half a cent a share, no interest earned on cash, and not one setting chosen by me.

![The strategy's account value against buy and hold SPY from 1993 to 2026, with a panel underneath showing how far each was below its own peak](https://storage.ghost.io/c/8a/20/8a2056d3-43f4-497a-abef-84bc9d80e6a7/content/images/2026/09/q5spy-equity.png)

|                                 | the strategy | buy and hold SPY |
| ------------------------------- | ------------ | ---------------- |
| made per year                   | 4.5%         | 8.9%             |
| worst fall from a peak          | 17.4%        | 56.5%            |
| return for each 1% of that fall | 0.26         | 0.16             |
| days holding a position         | 1 in 4       | all of them      |
| number of trades                | 534          | 1                |
| share that made money           | 71%          | —                |
| average trade length            | 4 days       | 33 years         |

That third row is how well you were paid for the discomfort — higher is better, and the strategy wins on it.

The 71% is the number that gets quoted and the one that means least. A rule that sells on the first sign of strength is *going* to be right most of the time. The row that really describes this strategy is the one about days holding a position: it is in the market one day in four.

## What I tried to break

Everything below is the same rules on the same data, with one thing changed each time.

| what I changed                                                    | what happened                                                |
| ----------------------------------------------------------------- | ------------------------------------------------------------ |
| only the first half of the history                                | 4.11% a year, worst fall 17.3%                               |
| only the second half                                              | 4.90% a year, worst fall 17.4%                               |
| buy day picked at random, 300 times                               | most made about 2.8%; only two of the 300 beat the real rule |
| the low measured over 2 / 3 / 4 / 5 / 7 / 10 / 15 / 20 days       | 6.14 / 6.14 / 6.00 / **4.50** / 4.89 / 5.16 / 3.65 / 3.06    |
| filter switched off entirely                                      | 8.17% a year, worst fall 24.4%                               |
| filter average over 50 / 100 / 200 / 250 days                     | 4.75 / 5.46 / **4.50** / 5.41                                |
| buying and selling next morning instead of at the close           | 4.81% a year, worst fall 16.0%                               |
| no commission at all                                              | 4.62%                                                        |
| losing an extra 0.01% / 0.03% / 0.05% on the price of every trade | 4.17 / 3.51 / 2.85                                           |
| cash paid 2% / 4% while sitting out                               | 6.07% / 7.63%                                                |
| 1993–2000                                                         | 7.65% against 19.06% for the index                           |
| 2000–2010                                                         | 1.99% against −2.60%                                         |
| 2010–2020                                                         | 3.41% against 11.02%                                         |
| 2020–2026                                                         | 6.37% against 13.78%                                         |

Three of those change the picture.

![A chart of 300 random-entry control runs with the real strategy marked far to the right, beaten by only two of them](https://storage.ghost.io/c/8a/20/8a2056d3-43f4-497a-abef-84bc9d80e6a7/content/images/2026/09/q5spy-random-control.png)

**The dice test.** This is the one that matters. I kept the selling rule, the filter, the number of trades and the costs exactly as they are, and replaced only the choice of buying day with a roll of the dice — three hundred times over. The dice versions clustered around 2.8% a year, and the middle 90% of them landed between 1.5% and 3.9%. The real rule made 4.5%, and only two of the three hundred beat it. Waiting for the five-day low was worth about 1.7 percentage points a year over buying on some random day the filter allowed. That is not a big number, but it is not noise either. Plenty of published bounce strategies fail this test outright, turning out to be nothing more than "buy something in an uptrend and sell it on strength".

![Two panels: annual return against the number of days the low is measured over, showing a flat range with the strategy's own 5 at the bottom of it; and annual return falling steadily as trading costs rise](https://storage.ghost.io/c/8a/20/8a2056d3-43f4-497a-abef-84bc9d80e6a7/content/images/2026/09/q5spy-sensitivity.png)

**The number 5 wasn't cherry-picked — and isn't special either.** Measuring the low over anything from 2 to 10 days lands between 4.5% and 6.1% a year, and the strategy's own 5 is the *worst* of them. Nobody tried every number and kept the best one, but nobody can defend 5 as the right answer either. Same story with the filter: a 100-day and a 250-day average both beat the 200 it uses.

**Small costs eat it fast.** Every extra hundredth of a percent lost on the price you actually get costs about a third of a percentage point a year. Lose five hundredths per trade and it makes 2.85% instead of 4.5%. On SPY that is survivable. On a thinly traded stock, where the gap between the buying and selling price is ten times wider, there is nothing left.

And the quiet one: **the cash assumption matters more than any rule in the strategy.** It sits out three days in four, and here that idle money earns nothing. Pay it 4% — roughly what a money-market account has paid recently — and the same trades return 7.63% instead of 4.5%, with the worst fall a little smaller rather than larger. No rule change comes close.

## What survives

**The buying rule really does carry information.** Only two of three hundred dice-roll versions beat it, everything else held identical. Without that, the strategy would just be "buy in an uptrend, sell on strength".

**It hasn't worn out.** 4.11% a year in the first half of the history, 4.90% in the second. Not a quirk of one era that has since stopped working, which is unusual for a rule published this long ago.

**It really is defensive.** The only stretch where it beat the index was 2000–2010 — by 4.6 points a year, with a worst fall of 10% against the index's 56%. That is the entire case for the strategy, and it is a real one.

**The order timing isn't propping it up.** Buying next morning instead of at the close takes the return from 4.5% to 4.81% and makes the worst fall *smaller*. The fair suspicion — that trading at the same close the signal came from is quietly cheating — does not survive the test.

## What breaks

**The 200-day filter costs more than it saves.** Switch it off and the return goes from 4.5% to 8.17% while the worst fall goes from 17.4% to 24.4% — better on the return-per-unit-of-pain measure. The filter is defensible if a hard ceiling on the pain is the whole point, but it is not free, and the headline number in this article is the expensive version.

**Comparing it to buy-and-hold on return is the wrong comparison, and it is the one everybody makes.** Holding a position one day in four, this is not an alternative to owning the index. Making it compete on return means borrowing to trade bigger — and borrowing to buy things that are falling is how a 17% worst fall turns into something much worse.

**The zero-interest assumption is silently doing a lot of damage.** In a backtest it makes the strategy look worse than it is. In real life, forgetting to earn anything on the idle cash makes it *be* worse than it looks. Most published versions of this family never state what the cash earns.

**It has lost heavily to the index in three of the last four decades.** 1993–2000, 2010–2020 and 2020–2026 were all big defeats on return. If the next ten years look like the last ten, this makes about a third of what the index makes while its owner watches it happen.

## The version without the filter

The stress table above has one line that deserves more than a line: switch the 200-day filter off and the strategy makes 8.17% a year instead of 4.5%. That is a big enough change to be worth running as a strategy in its own right rather than as a footnote, so I did.

### The rules

The same two rules as at the top of this article, minus the filter. It buys in falling markets too.

### The same test

Same data, same period, same $40,000, same one position at a time, same half a cent a share, same nothing earned on idle cash.

|                                 | no filter | with the filter | buy and hold |
| ------------------------------- | --------- | --------------- | ------------ |
| made per year                   | 8.17%     | 4.50%           | 8.90%        |
| worst fall from a peak          | 24.4%     | 17.4%           | 56.5%        |
| return for each 1% of that fall | 0.33      | 0.26            | 0.16         |
| days holding a position         | 1 in 3    | 1 in 4          | all of them  |
| number of trades                | 741       | 534             | 1            |
| share that made money           | 70.7%     | 71.2%           | —            |
| average trade length            | 4 days    | 4 days          | 33 years     |

It makes nearly what the index makes while sitting in cash two days out of three, with less than half the index's worst fall — and it beats both the filtered version and the index on return per unit of pain.

Split the history in half and the halves return 8.16% and 8.18% — steadier than the filtered version managed, which did 4.11% and 4.90%. Removing a rule made the strategy *more* consistent, not less.

### It wins in every decade — against the filtered version

| years     | no filter | with the filter | the index |
| --------- | --------- | --------------- | --------- |
| 1993–2000 | 10.76%    | 7.65%           | 19.06%    |
| 2000–2010 | 6.62%     | 1.99%           | −2.60%    |
| 2010–2020 | 4.72%     | 3.41%           | 11.02%    |
| 2020–2026 | 12.84%    | 6.37%           | 13.78%    |

Four decades out of four. The filter never once earned its keep on return. What it bought was a smaller worst fall, and only that.

### And the dice test gets harder, not easier

![A chart of 300 random-entry runs of the no-filter version, with the real rule marked to the right of every one of them](https://storage.ghost.io/c/8a/20/8a2056d3-43f4-497a-abef-84bc9d80e6a7/content/images/2026/09/q5spy-random-control-nofilter.png)

The earlier dice test kept the filter, so it asked a soft question: is a five-day low a better day to buy than a random day *the filter had already approved*? With the filter gone the dice may buy on any day at all, including deep in a bear market.

The rule handles it better, not worse. Three hundred random versions made between 0.46% and 7.14% a year, with the middle of them at 4.16%. The real rule made 8.17%, and this time **not one of the three hundred beat it** — against two of three hundred for the filtered version.

That inverts the natural reading of the first chart. The buying rule was never leaning on the filter. The filter was taking credit for the entry's work, and charging 3.7 percentage points a year for it.

The rest of the checks behave the same way, and the next section lines them all up.

### What the settings are actually worth

The two versions above are two ends of one dial, and there are more dials. Here is what each is worth on its own, measured rather than guessed — same rules, same 33 years, one thing changed per row.

| the one change                                                | made per year | worst fall |
| ------------------------------------------------------------- | ------------- | ---------- |
| as written — filter on, 5-day low, nothing earned on cash     | 4.50%         | 17.4%      |
| filter off                                                    | 8.17%         | 24.4%      |
| filter off, low measured over 3 days instead of 5             | 10.06%        | 26.0%      |
| filter off, idle cash paid 4%                                 | 10.99%        | 24.3%      |
| filter on, idle cash paid 4%                                  | 7.63%         | 15.6%      |
| filter off, bought next morning instead of at the close       | 7.94%         | 23.8%      |
| filter off, losing an extra 0.05% on the price of every trade | 5.81%         | 25.4%      |

Measured from the version without the filter, **switching the filter off is worth 3.7 points a year, paying 4% on the idle cash another 2.8, and shortening the window from five days to three another 1.9.** Two of those three are not trading ideas at all: one is a switch somebody added by convention, and the other is a bank account.

**You cannot add these up.** Rows three to seven are each one change against the filter-off version, not against the version as written — and no two of those changes were ever run together. So "8.17 plus something plus something" is not a number I have, and inventing it is the kind of arithmetic that makes backtests useless.

**Every row that improves the return also deepens the worst fall — except the interest rows.** The 3-day window makes 10% a year and falls 26% on the way. Paying interest on the cash is the only change that lifts the return and leaves the worst fall alone, which is why the dullest-sounding line in the table is the most valuable one. Everything else is a choice about how much pain to accept, not a better rule.

### So which one should you run?

Neither is the right answer, and the difference is not really about return.

Take the filter off and you get almost the index's return for a third of the time in the market, at the cost of a worst fall half again as deep — and you have to be willing to buy while the market is below its 200-day average, which is exactly when buying feels worst. Leave the filter on and you get a hard ceiling on the pain, about 17%, and you pay for it with half the return.

If what you want is a small, calm piece of a portfolio that sits mostly in cash and hurts you as little as possible, the filtered version is the honest choice. If you want the strategy to actually pull its weight and you can sit through a 24% fall without switching it off, the version without the filter is plainly better on every measure except that one.

If you would rather see that for yourself than take the table above on trust, the AmiBroker file is on my Patreon: [patreon.com/cw/SimpleStockTrade](https://www.patreon.com/cw/SimpleStockTrade?ref=simplestocktrade.com). It is one file with the filter as a switch, so you can run both versions on your own data and compare both curves side by side. It needs no data subscription and no list of stocks to scan — it trades one thing, SPY.

## Verdict

There is an edge here, it is small, and it lives in the buying rule rather than anywhere else. As a standalone way to grow an account it is hard to justify: it loses to the index on return in most decades, and the obvious fix — trade bigger — is aimed at exactly the wrong part of the problem.

Where the shape gets interesting is as one piece of something larger. It sits in cash three days out of four, and its one good decade was the index's worst. That is a different question from the one this article answers.

The version most worth studying isn't the one as written. It's the one with the filter switched off and a realistic interest rate on the cash — and neither of those is a clever idea. They are just two defaults nobody ever questioned.

*Everything above is a backtest of my own on published rules, with the conditions stated. Past results describe what happened; they are not a forecast. Nothing here is advice.*

---

## Sources

**The rules.** Taken word for word from a strategy file, and stated in full in "The rules, exactly" above. The buying rule belongs to the Connors family of short-term bounce rules; Laurence Connors and Cesar Alvarez, *Short Term Trading Strategies That Work* (2008), is where the pairing of "a low of the last few days" with "an uptrend" is set out.

**The baseline run.** AmiBroker, run in portfolio mode, with SPY on its own, all available history, daily prices adjusted for splits and dividends. 534 trades. This is the authoritative version and the one the Python rewrite was checked against.

**Everything else.** A Python rewrite of the same rules, verified against that AmiBroker trade list — identical buy and sell dates on all 534 trades, total profit differing by $0.31\. Period 29 January 1993 to 25 August 2026\. $40,000, one position at a time using the whole account, cash account with no borrowing, commission half a cent per share each way, no interest on idle cash unless a row says otherwise. Signals are worked out on the close and filled at that close, except in the "next morning" row.

**The October 2025 trade.** Bought at the close of 10 October at 653.02; sold at the close of 20 October at 671.30, the first day the close cleared the previous day's high of 665.76\. The four sessions in between each failed that test, the closest being 15 October at 665.17 against a trigger of 665.83.

**The stress battery.** 35 runs in total, all from the same code on the same data: first half and second half of the history, the low measured over 2 to 20 days, the filter average from 50 to 250 days, the filter on and off, filling at the close versus next morning, commission on and off, extra costs of 0 / 0.01 / 0.03 / 0.05 per cent on the price of every trade, idle cash at 0 / 2 / 4 per cent, and four calendar slices against the index. The dice test is 300 further runs that keep the selling rule, the filter and the trade count and pick the buying day at random from the days the filter allowed.

**The settings table.** Every row is one of the runs already described, except the two "filter on, idle cash" rows: the original battery recorded only their returns, so both were re-run to get their worst falls (4% cash: 7.63% a year, worst fall 15.56%; 2% cash: 6.07% and 16.43%). That re-run reproduced the filter-off and no-filter-with-interest figures digit for digit first, which is how I know it is the same code on the same data. For the filtered dice test, the range quoted (1.5% to 3.9%) is the middle 90% of the three hundred runs; only the middle value and those two bounds were recorded. The no-filter dice test kept every run, so its 0.46% to 7.14% really is the full spread.

**The version without the filter, and its one honest gap.** Its 741 trades match the authoritative run date for date, every entry and every exit. The total profit does not match quite as exactly — it comes out 0.14% lighter — because the authoritative run caps any single trade at 10% of that day's traded volume and the rewrite does not. It bites once, on 30 September 1994, when barely 5,000 shares changed hands all day and the authoritative version could take only about half a position. The annual return rounds to 8.17% either way, so nothing in this article turns on it. The filtered version has the same cap and never hits it: there the two agree to 31 cents.

**The no-filter runs.** The same code with the filter switched off: full results, first and second half, the four calendar slices, the same cost and idle-cash rows, the low measured over 2 to 20 days, and its own dice test of 300 runs. That second dice test is the harder one — with no filter there is no approved-days list, so the random buy day is drawn from every day in the history. 741 trades. The script for it imports the same simulation function as the run above, so both versions really are the same code on the same data.