Eleven strategies tested across 244 US stocks of daily bars. Each is judged on whether it beats a matched control — the same stocks in the same market conditions, without the signal. Beating the market is easy in a rising market; beating the control is the test that matters.
Buy a stock the day it hits its highest price in a year, but only if unusually many shares are changing hands. The idea is that a stock breaking into new territory on strong interest tends to keep going, because nobody who owns it is sitting on a loss waiting to sell.
Verdict. This does not work. Stocks did roughly the same thing after the signal as they did without it, so acting on it is guessing with extra steps. A realistic simulation won 46% of trades with +0.85% average profit — before any costs, which would likely erase that.
Buying a stock as it makes a new 52-week high on >1.5x average volume with ADX>20 produces forward returns above the market's baseline.
Falsifier. If forward returns do not beat the liquid-universe baseline, there is no edge.
| Hold | N | Mean % | Control % | Edge % | t |
|---|---|---|---|---|---|
| 5d | 3,248 | +0.25 | +0.27 | -0.01 | -0.08 |
| 10d | 3,236 | +0.47 | +0.51 | -0.04 | -0.23 |
| 20d | 3,224 | +1.28 | +1.00 | +0.28 | 1.04 |
| 60d | 3,150 | +3.38 | +3.09 | +0.29 | 0.55 |
| 120d | 3,062 | +9.35 | +6.24 | +3.11 | 3.96 |
| RSI(14) at entry | N | 20d result % |
|---|---|---|
| 55-70 | 869 | +0.62 |
| 70-100 | 2,355 | +1.52 |
| Exit | Count | Share % |
|---|---|---|
| stop | 818 | 48.7 |
| target | 407 | 24.2 |
| time | 455 | 27.1 |
Find a stock in a long-term uptrend that has just had a short bad patch, and buy it on the first day it turns back up. You are trying to get a discount on something that is still fundamentally rising.
Verdict. This holds up. After the signal, stocks beat comparable situations by +0.10% over the following month. Simulated with a real stop-loss and profit target, it won 47% of trades, averaging +8.76% on winners against -6.30% on losers — an average of +0.85% per trade over about 14 days. Note you lose more often than you win: the profit comes entirely from winners being bigger than losers, so cutting winners short breaks it.
Buying a temporary dip (RSI<40) in a stock still above a rising 200-day SMA, on the first up-day, beats baseline.
Falsifier. If the edge disappears beyond a few days, it is not a swing signal.
| Hold | N | Mean % | Control % | Edge % | t |
|---|---|---|---|---|---|
| 5d | 2,650 | +0.64 | +0.27 | +0.37 | 3.02 |
| 10d | 2,646 | +0.75 | +0.51 | +0.24 | 1.39 |
| 20d | 2,631 | +1.10 | +1.00 | +0.10 | 0.35 |
| 60d | 2,579 | +3.96 | +3.09 | +0.87 | 1.69 |
| 120d | 2,470 | +7.36 | +6.24 | +1.12 | 1.43 |
| RSI(14) at entry | N | 20d result % |
|---|---|---|
| 0-25 | 12 | -0.36 |
| 25-30 | 112 | +0.05 |
| 30-35 | 554 | +2.11 |
| 35-40 | 1,953 | +0.88 |
| Exit | Count | Share % |
|---|---|---|
| stop | 533 | 41.4 |
| target | 236 | 18.4 |
| time | 517 | 40.2 |
Buy stocks that have been strong for months and are pushing to a new short-term high. The bet is simply that things already going up keep going up.
Verdict. This does not work. Stocks did roughly the same thing after the signal as they did without it, so acting on it is guessing with extra steps. A realistic simulation won 42% of trades with +0.23% average profit — before any costs, which would likely erase that.
Stocks up >10% over 3 months and >15% over 6 months, breaking to a 20-day high, continue outperforming.
Falsifier. If short-horizon edge is absent, this is a position trade, not a swing trade.
| Hold | N | Mean % | Control % | Edge % | t |
|---|---|---|---|---|---|
| 5d | 14,167 | +0.16 | +0.27 | -0.10 | -1.54 |
| 10d | 14,120 | +0.39 | +0.51 | -0.12 | -1.34 |
| 20d | 14,044 | +0.92 | +1.00 | -0.08 | -0.67 |
| 60d | 13,716 | +4.16 | +3.09 | +1.07 | 4.63 |
| 120d | 13,246 | +9.81 | +6.24 | +3.57 | 10.40 |
| RSI(14) at entry | N | 20d result % |
|---|---|---|
| 50-60 | 390 | +2.52 |
| 60-70 | 6,142 | +0.83 |
| 70-100 | 7,512 | +0.91 |
| Exit | Count | Share % |
|---|---|---|
| stop | 1,974 | 52.2 |
| target | 834 | 22.1 |
| time | 974 | 25.8 |
Buy when a stock in a long-term uptrend gets heavily sold off in the short term. You are betting the panic is overdone and it snaps back.
Verdict. This does not work. Stocks did roughly the same thing after the signal as they did without it, so acting on it is guessing with extra steps. A realistic simulation won 41% of trades with -0.20% average profit — before any costs, which would likely erase that.
Buying RSI<30 while the stock is still above its 200-day SMA beats baseline.
Falsifier. If the sample is too small or the edge decays fast, it is not dependable.
| Hold | N | Mean % | Control % | Edge % | t |
|---|---|---|---|---|---|
| 5d | 124 | +0.41 | +0.27 | +0.15 | 0.25 |
| 10d | 124 | +0.12 | +0.51 | -0.39 | -0.57 |
| 20d | 124 | +0.01 | +1.00 | -0.99 | -1.08 |
| 60d | 123 | +1.22 | +3.09 | -1.86 | -1.60 |
| 120d | 117 | +1.51 | +6.24 | -4.73 | -2.28 |
| RSI(14) at entry | N | 20d result % |
|---|---|---|
| 20-25 | 12 | -0.36 |
| 25-30 | 112 | +0.05 |
| Exit | Count | Share % |
|---|---|---|
| stop | 33 | 39.8 |
| target | 12 | 14.5 |
| time | 38 | 45.8 |
MACD is a popular momentum indicator built from two moving averages. When its fast line crosses above its slow line, many traders read it as a buy. We are testing whether that actually predicts anything.
Verdict. This does not work. Stocks did roughly the same thing after the signal as they did without it, so acting on it is guessing with extra steps. A realistic simulation won 45% of trades with +0.36% average profit — before any costs, which would likely erase that.
A MACD line crossing above its signal line, in an uptrend, predicts gains.
Falsifier. If the edge versus baseline is zero, the indicator is decorative.
| Hold | N | Mean % | Control % | Edge % | t |
|---|---|---|---|---|---|
| 5d | 6,286 | +0.23 | +0.27 | -0.03 | -0.41 |
| 10d | 6,274 | +0.44 | +0.51 | -0.07 | -0.56 |
| 20d | 6,208 | +0.89 | +1.00 | -0.11 | -0.68 |
| 60d | 6,068 | +3.38 | +3.09 | +0.30 | 0.95 |
| 120d | 5,901 | +6.98 | +6.24 | +0.74 | 1.65 |
| RSI(14) at entry | N | 20d result % |
|---|---|---|
| 0-45 | 233 | -0.08 |
| 45-55 | 1,802 | +1.27 |
| 55-65 | 2,603 | +1.03 |
| 65-100 | 1,570 | +0.35 |
| Exit | Count | Share % |
|---|---|---|
| stop | 2,437 | 47.9 |
| target | 1,074 | 21.1 |
| time | 1,574 | 31.0 |
Sometimes a stock opens far higher than it closed the day before - usually after news or earnings. This tests whether a jump of more than 10% overnight is followed by unusually big price swings, in either direction. It is a claim about how WILD the stock gets, not about which way it goes.
Verdict. This reliably tells you the stock is about to move a lot — roughly 2.7 times its normal 20-day swing. It does NOT tell you which way. That makes it useful for deciding position size, widening stops, or options strategies that profit from movement itself — and useless as a straight buy or sell trigger.
When a liquid stock opens more than 10% above its prior close, the following days show materially larger price movement than normal — regardless of direction.
Falsifier. If the average ABSOLUTE forward return after a gap is no larger than on ordinary sessions in the same liquid names, the gap tells us nothing about coming volatility.
| Hold | N | Movement % | Control % | Edge % | t |
|---|---|---|---|---|---|
| 5d | 734 | +14.73 | +4.02 | +10.71 | 12.07 |
| 10d | 729 | +17.54 | +5.78 | +11.76 | 14.91 |
| 20d | 715 | +22.68 | +8.33 | +14.35 | 15.65 |
| 60d | 695 | +35.06 | +14.77 | +20.30 | 14.43 |
| 120d | 637 | +44.49 | +21.47 | +23.02 | 11.92 |
| gap size % | N | 20d result % |
|---|---|---|
| 10-15 | 375 | +18.46 |
| 15-20 | 127 | +23.63 |
| 20-30 | 100 | +24.47 |
| 30-1000 | 113 | +34.05 |
Same overnight jump, but now asking which way it goes next. Do you buy the excitement and ride it higher, or is the jump the top, meaning you should sell into it? These are opposite trades, so getting this right matters.
Verdict. The signal is real but points the wrong way. Following it as normally taught loses money (-3.98% versus comparable conditions). The tradeable version is to do the opposite of what the textbook says.
After a >10% gap up, price continues higher — the gap is the start of a move rather than an exhaustion point to be sold.
Falsifier. If signed forward returns after a gap up are negative, or no better than the non-gap control, then gaps up should be faded rather than chased.
| Hold | N | Mean % | Control % | Edge % | t |
|---|---|---|---|---|---|
| 5d | 734 | -1.36 | +0.27 | -1.63 | -1.57 |
| 10d | 729 | -3.69 | +0.50 | -4.20 | -4.14 |
| 20d | 715 | -3.06 | +0.93 | -3.98 | -3.20 |
| 60d | 695 | -1.28 | +2.72 | -4.00 | -2.07 |
| 120d | 637 | +3.96 | +5.50 | -1.54 | -0.59 |
| gap size % | N | 20d result % |
|---|---|---|
| 10-15 | 375 | +1.23 |
| 15-20 | 127 | -3.26 |
| 20-30 | 100 | -3.03 |
| 30-1000 | 113 | -17.08 |
A stock opens far BELOW where it closed - usually bad news. The instinct is to get out. This tests whether that instinct is right, or whether the drop is an overreaction that recovers.
Verdict. The signal is real but points the wrong way. Following it as normally taught loses money (-1.75% versus comparable conditions). The tradeable version is to do the opposite of what the textbook says.
After a >10% gap down, price continues lower rather than reverting.
Falsifier. If signed forward returns after a gap down are positive and beat the control, the gap down is a mean-reversion buy signal, not a warning.
| Hold | N | Mean % | Control % | Edge % | t |
|---|---|---|---|---|---|
| 5d | 593 | -2.31 | +0.27 | -2.58 | -3.57 |
| 10d | 591 | -0.69 | +0.50 | -1.19 | -1.28 |
| 20d | 580 | -0.82 | +0.93 | -1.75 | -1.54 |
| 60d | 564 | +5.32 | +2.72 | +2.59 | 1.35 |
| 120d | 524 | +14.25 | +5.50 | +8.75 | 2.98 |
| gap size % | N | 20d result % |
|---|---|---|
| -1000--30 | 32 | +0.42 |
| -30--20 | 70 | -6.87 |
| -20--15 | 112 | -3.43 |
| -15--10 | 366 | +1.03 |
The most famous buy signal in charting. When the 50-day average price crosses above the 200-day average, traders call it a "golden cross" and treat it as the moment a downtrend turns into an uptrend. We are checking whether that is actually true, or whether the stock had already gone up long before the signal appeared.
Verdict. The signal is real but points the wrong way. Following it as normally taught loses money (-1.03% versus comparable conditions). The tradeable version is to do the opposite of what the textbook says.
When the 50-day SMA crosses above the 200-day SMA, the prevailing trend reverses from down to up — the cross identifies the inflection point.
Falsifier. If returns BEFORE the cross are already positive, it is not a reversal — it is lagging confirmation of a move that already happened. And if returns after the cross do not beat the already-bullish control, the crossing event carries no information beyond the regime it implies.
| Hold | N | Mean % | Control % | Edge % | t |
|---|---|---|---|---|---|
| 5d | 1,301 | +0.54 | +0.29 | +0.25 | 0.93 |
| 10d | 1,292 | +0.37 | +0.55 | -0.18 | -0.50 |
| 20d | 1,281 | +0.11 | +1.14 | -1.03 | -2.19 |
| 60d | 1,247 | +2.66 | +3.94 | -1.28 | -1.39 |
| 120d | 1,217 | +6.72 | +6.70 | +0.02 | 0.01 |
| RSI(14) at cross | N | 20d result % |
|---|---|---|
| 0-40 | 57 | -1.33 |
| 40-50 | 185 | +1.22 |
| 50-60 | 405 | -0.80 |
| 60-70 | 379 | -0.08 |
| 70-100 | 255 | +1.34 |
The opposite signal: the 50-day average drops below the 200-day average. Widely treated as a warning to sell. We are checking whether stocks really do keep falling afterwards, or whether the worst is already over by then.
Verdict. This does not work. Stocks did roughly the same thing after the signal as they did without it, so acting on it is guessing with extra steps.
When the 50-day SMA crosses below the 200-day SMA, an uptrend reverses into a downtrend.
Falsifier. If forward returns after a death cross are not meaningfully worse than the already-bearish control, the event adds nothing. If they are positive, the signal is actively harmful as an exit.
| Hold | N | Mean % | Control % | Edge % | t |
|---|---|---|---|---|---|
| 5d | 1,320 | +0.36 | +0.33 | +0.03 | 0.10 |
| 10d | 1,317 | +0.44 | +0.61 | -0.17 | -0.43 |
| 20d | 1,314 | +1.52 | +0.95 | +0.57 | 1.19 |
| 60d | 1,292 | +5.13 | +2.22 | +2.91 | 3.16 |
| 120d | 1,247 | +5.96 | +4.50 | +1.46 | 1.15 |
| RSI(14) at cross | N | 20d result % |
|---|---|---|
| 0-30 | 193 | +2.82 |
| 30-40 | 401 | +2.86 |
| 40-50 | 468 | +0.88 |
| 50-60 | 213 | -0.49 |
| 60-100 | 39 | -0.18 |
RSI measures how overbought a stock is on a 0-100 scale. The idea here is that a golden cross is more trustworthy when the stock has NOT already run up hard (low RSI), and less trustworthy when it is already stretched (high RSI). We are testing whether that filter actually helps.
Verdict. This does not work. Stocks did roughly the same thing after the signal as they did without it, so acting on it is guessing with extra steps.
A golden cross occurring while RSI is still moderate (<60) precedes better returns than one occurring when RSI is already extended (>=60), because the latter arrives after the move is spent.
Falsifier. If the two RSI buckets produce statistically indistinguishable forward returns, RSI adds no filtering value to the crossover.
| Hold | N | Mean % | Control % | Edge % | t |
|---|---|---|---|---|---|
| 5d | 661 | +0.26 | +0.82 | -0.56 | -1.06 |
| 10d | 654 | -0.12 | +0.88 | -1.00 | -1.36 |
| 20d | 647 | -0.27 | +0.49 | -0.76 | -0.80 |
| 60d | 635 | +2.08 | +3.26 | -1.18 | -0.64 |
| 120d | 626 | +5.45 | +8.07 | -2.62 | -0.90 |
| RSI(14) at cross | N | 20d result % |
|---|---|---|
| 0-40 | 57 | -1.33 |
| 40-50 | 185 | +1.22 |
| 50-60 | 405 | -0.80 |