I built a stock-scoring tool for swing trading. Did it work?
Didn't work · 18 Oct 2026 · 8 min read
Short answer: No. Over three years and about 26,000 daily calls on 36 big US stocks, the stocks it scored highly did no better over the next week than the ones it scored low, and its buy plans lost to buying on random days.
Where this started
I got interested in swing trading a while ago. The idea is simple: you don't buy a stock to hold for years. You buy it, hold it for a few days or a couple of weeks while it makes a short move, and sell. Do that well, again and again, and the small wins add up.
Swing traders mostly read price charts. They look for a stock in a healthy uptrend that has dipped a little, and buy near a price where it has bounced before. They decide in advance where they will sell at a loss and where they will take the profit.
That sounded like something a computer could do every day, for many stocks, without getting tired or emotional. So I built a tool to do it.
What the tool did
Every evening, for each of 36 large, well-known US stocks (Nvidia, Apple, Amazon, AMD, Taiwan Semiconductor and similar names), the tool went through four steps.
1. Find the important price levels
- Support is a price where the stock has stopped falling and bounced before. The tool looked back over the last 90 trading days, found the low points where the price had turned up, and grouped together lows that were within 2% of each other. The strongest group below today's price became the "major support".
- Resistance is the opposite: a price where the stock has stopped rising and turned down before. The highest point of the last 10 days was treated as the nearest resistance.
2. Give the stock a score
The score added up points for things chart traders like to see:
| What it looked at | Points |
|---|---|
| Are the short-, medium- and long-term price averages lined up in an uptrend? | 0 to 2 |
| Do two popular chart indicators (MACD and RSI) look healthy? | 0 to 2 |
| Is more volume trading on up days than on down days? | 0 to 2 |
| How many of its trend signals agree that conditions are good? | 0 to 3 |
| Is the market rising, and is the stock stronger than its industry? | 0 to 2 |
| Have company insiders been buying or selling? | −1 to 2 |
To qualify, a stock needed 6 points or more. The bar went up in tricky conditions: 2 more points when the market was choppy and going nowhere, and 1 more when the stock had made several lower lows in a row.
3. Run the safety checks
Some situations blocked a trade no matter how good the score was:
- the stock was below both its 50-day and its 200-day average (a downtrend);
- the stock was moving on its own, with little connection to the overall market;
- in a choppy market, the buy price was stuck in the middle of the range, far from both support and resistance;
- the price was already so close to resistance that there was little room left to make money.
4. Make a trade plan
If the stock qualified, the tool wrote a plan with three prices:
- Buy price: a limit order a little below today's price, at the first sensible level: the 20-day average, the 50-day average, the 10-day low, or a fixed distance below the price.
- Stop-loss: the price at which to sell and accept a small loss, placed just below the buy price (half to one "average daily move" below it).
- Target: the recent 10-day high, the nearest resistance.
The plan only counted if the possible gain was at least twice the possible loss. Finally, an AI model wrote a few plain-English sentences explaining the decision. The AI only explained; the rules made the call.
What it looked like
Here is a simplified example of one evening's output. The numbers are made up, but the format is the real one.
| The tool's output | |
|---|---|
| Stock | A large chip maker |
| Price today | 231.50 |
| Major support | 221.00 |
| Resistance (10-day high) | 240.30 |
| Score | 7 (needed 6) |
| Decision | QUALIFIED (green) |
| Buy at | 226.21 (the 20-day average, about 2.3% below today's price) |
| Stop-loss | 223.13 |
| Target | 240.30 |
| Possible gain vs possible loss | about 4.6 to 1 |
| AI summary | "Trend aligned, entry near support. Entry 226.21 with a stop at 223.13. No blocking conditions are active." |
And a rejection might read: NOT QUALIFIED (red). Score 4, below the threshold of 6. Price is only 2.93 below the next resistance at 234.20, so there is little room to the target. Wait for a close above that level or a pullback to support.
There was also a yellow state, "price-blocked", for a good setup where the price was in the wrong place that day.
On paper it all made sense. Every rule is something you will find in swing-trading books.
Putting it to the test
I replayed the tool on three years of history, up to October 2026: about 750 trading days and roughly 26,000 daily decisions. For each decision I asked two simple questions.
Did a higher score mean a better week ahead?
No. The stocks it scored highly did no better over the next five trading days than the ones it scored low. Statistically, the link between the score and the next week's return was −0.003, on a scale where +1 means perfect, −1 means perfectly backwards and 0 means no link at all. In plain terms: zero.
Did "qualified" stocks beat the rejected ones?
No. I measured each trade's result against what it risked (the gap between the buy price and the stop-loss). Both groups made about the same: roughly 0.04 times what they risked, per trade. The careful decision added nothing.
A trap that fooled me at first
Both the qualified and the rejected stocks beat the S&P 500 over the next week, on average. That looked encouraging until I realised why: I had picked these 36 stocks because they are famous today, and stocks become famous mostly by going up. On a list chosen with hindsight, almost any pick looks good. It says nothing about the tool.
Do support levels even work?
The whole buy plan rested on one idea: that a stock bounces when it falls to support. So I tested that idea on its own, on a much bigger set: every S&P 500 stock from 2015 to 2021. Each day I placed a buy order at each stock's support level and watched what happened after it filled.
Imagine 10,000 dollars on each filled order, compared with the average stock over the same days:
| Orders filled at support | How many | After 1 week | After 2 weeks |
|---|---|---|---|
| All stocks | 36,749 | 2 dollars more (+0.02%) | 4 dollars more (+0.04%) |
| Strong stocks only | 9,566 | 9 dollars more (+0.09%) | 13 dollars more (+0.13%) |
A few dollars per 10,000 is nothing; trading costs are bigger than that. Buying at support was also no cheaper than simply buying at the next morning's price. And in my own tool, stocks well above support actually did slightly better the next week (+0.48%) than stocks sitting right on it (+0.15%).
Trading it like a real person
Finally, I traded the tool's plans exactly as I would have: place the buy order at support, wait for it to fill or not, then sell at the stop or the target. One trade at a time, each held for at most a week (or, in a second run, at most two weeks).
To see whether the timing was any good, I compared each stock with the same number of trades, held just as long, but started on random days. I repeated the random version 1,000 times. A tool with real skill should beat most of those random runs.
It clearly beat random timing on only 1 of the 36 stocks, about what luck alone would give. Nvidia is a good example:
| Nvidia, October 2023 – October 2026 | Trades held up to 1 week | Trades held up to 2 weeks |
|---|---|---|
| The tool's plans (15 trades) | −8.4% | −2.9% |
| Same number of trades on random days (typical result) | +9.0% | +11.5% |
| Just owning Nvidia the whole time | about +407% | about +407% |
The tool lost money on one of the best-performing stocks of the decade, while random timing made a little and simply owning it made a fortune.
Why didn't it work?
Looking back, a few things stand out:
- The ingredients were all the same thing. Almost every part of the score came from the same price chart, just measured in different ways. Adding them up didn't create new information.
- The stop-loss was too tight. Half to one day's normal move is inside the everyday wiggle of a stock, so good trades got stopped out before they had a chance.
- The target was too close. Selling at the recent high caps every winner, while swing traders make their money on the few trades that run much further.
- Buying at support picks the weak ones. A limit order below the price fills mostly when a stock keeps falling, which is exactly when you don't want it.
I later built a more careful swing-trading system, closer to what professional swing traders describe, and tested it on seven years of S&P 500 stocks. It didn't work either; that story is in the article on swing trading.
What I took from it
A tool that sounds sensible, follows the textbook and explains itself nicely can still have no edge at all. The only way to know is to test it honestly, on many decisions, against random choices. Mine failed that test.