Do Chart Patterns Work? What a Backtest Actually Shows
Do chart patterns work? How a backtest measures them, how success is defined, why a 60% hit rate can still lose money, and the biases that inflate results.
· 8 min read
Contents
Short answer: some chart patterns, on some markets and in some periods, have worked a little more often than a coin flip. Rarely by as much as textbooks suggest, and not consistently. The only way to know whether a specific pattern works is to run its rules over historical data and count the results honestly. That is a backtest. This article explains how one is built, the mistakes that make most of them misleading, and why a pattern's hit rate on its own tells you nothing about profit.
What a backtest is
A backtest checks a rule against past data. You take a precise definition of a pattern (say, a double bottom: two lows at roughly the same level, then a break above the peak between them), find every occurrence in the history, and record what the price did afterwards.
Before you look at any numbers, three questions need fixed answers:
- Where is the entry? Usually at the close of the bar that confirms the pattern. Not earlier: before confirmation there is no pattern.
- What counts as success? Hitting a target? Simply moving in the right direction? Within what time?
- Where do you exit if it fails? A stop, a time limit, or both.
If any of these gets adjusted after you have seen the results, the backtest becomes curve-fitting.
Defining success: horizon, target and stop
Different signals need different definitions. This is how Signae does it:
| Signal type | What counts as success | Horizon |
|---|---|---|
| Chart patterns with a target and a stop (double bottom, head and shoulders, triangles) | Price reaches the target before the stop | The pattern's own length in bars, at least 10 |
| Candlestick patterns (hammer, engulfing) | Price has moved the signal's way after 5 bars | 5 bars |
| Indicators (RSI, moving-average crosses) | Price has moved the signal's way after 5 bars | 5 bars |
| Swing trades | Trade result in R (see below) | Until the exit rules fire, at most 60 days |
One more rule matters: if a single bar touches both the target and the stop, we count it as a stop. The order of the high and low inside a daily bar is unknown, so assuming the worse case is the honest choice. Horizons are counted in bars, so nights and weekends between stock bars don't stretch them.
The traps
Look-ahead bias
The sneakiest error is a rule that quietly uses data that didn't exist at the time of the signal. With chart patterns the classic case is pivots: a swing low only becomes visible a few bars after the low itself. Treat the pattern as complete at the low and the backtest "knows" the future. In Signae a pattern is confirmed only after its last pivot is confirmed, and a dedicated automated test checks exactly that.
Survivorship bias
Test on today's list of large companies and you leave out every company that went bust or dropped out of the index along the way. Results look better than reality. Our stock sample is 25 large US companies picked from today's list, so this bias is in our numbers too, and our reports say so.
Small samples
Twenty cases at 65% means 13 wins out of 20. Two trades going the other way and it's 55%. That's why we don't grade a pattern until it has at least 20 cases, and swing setups need 30 trades.
Overfitting
Try a hundred parameter combinations and one of them will look great by pure chance. The defence is to split the history into a tuning period and a check period. Parameters are chosen on the first; the decision to show a setup is made on the second, which played no part in the tuning.
Costs
Fees and slippage take a share of every trade. Our backtests don't deduct them, which matters most for short-horizon signals where the average move is below 1%.
Why a 60% hit rate isn't automatically profitable
Hit rate (win rate) tells you how often you're right. It says nothing about how much you make when right or lose when wrong. That's what expectancy measures, the average result per trade:
Example 1: high hit rate, negative result (hypothetical numbers)
A signal works 60% of the time with an average gain of 1%, and loses an average of 2% the other 40%.
0.6 × 1% − 0.4 × 2% = 0.6% − 0.8% = −0.2% per trade. You're right six times out of ten and the account still shrinks.
Example 2: low hit rate, positive result (our data)
Our stock "pullback to the moving average" swing setup, over its check period (21 Aug 2025 to 20 Oct 2026, 50 trades, no fees), was profitable in only 36% of trades. But the average win was +3.04R and the average loss −0.88R, where R is the amount risked to the stop:
0.36 × 3.04 − 0.64 × 0.88 ≈ 1.09 − 0.56 = +0.53R per trade.
Two thirds of the trades lose, and the expectancy is still positive. How those trades work is covered in our article on Qullamaggie's swing trading rules.
Example 3: real RSI numbers
In October 2026 we re-ran our RSI signals on the same data before and after a rule change. One result: the "leaving oversold" signal on 4-hour bars of the 25 most liquid Bybit pairs (since 1 May 2026) worked in 60.6% of 289 cases under the old rule, yet the average move in the signal's direction after 5 bars was only +0.56%. Under the new rule: 51.4% of 288 cases, with an average move of +0.04%, close to nothing. And the bearish "overbought" signal had a negative average move in all three samples (crypto daily, crypto 4-hour, stocks daily): on average, prices kept rising after it. On stocks (25 companies, daily bars since 24 Oct 2022, 531 cases) it worked only 42.9% of the time and is graded "weak".
The takeaway is modest: RSI alone is a small edge at best, and sometimes none. That's exactly what's worth knowing before a trade.
How Signae measures each pattern
- Data: up to 1,000 closed bars per asset; the 25 most liquid USDT pairs on Bybit (no stablecoins or leveraged tokens) and 25 large US stocks.
- Detection: the same recognition rules as the live feed, with no look-ahead.
- Scoring: each case is judged by the table above; we then count cases, the share that worked, the average move in the signal's direction and the average time to the outcome.
- Strength: "strong" means at least 55% success and a positive average move; "moderate" at least 45%; otherwise "weak". Fewer than 20 cases is "not enough data".
- Refresh: recalculated every 12 hours, separately for each market and timeframe.
On a signal card it reads like this: "In similar situations this happened 62 times out of 100." No promises, only what happened in the history.
Alongside the backtest there is a signal journal: every strong or moderate signal shown to users is recorded once and closed by the same rules, at the target, the stop or the end of the horizon. It's a live track record, not a set of hand-picked examples.
Limitations
- The past doesn't guarantee the future. Markets change character, and a signal that worked in a bull year can stop working in a range.
- The stock sample is today's large companies, so survivorship bias applies.
- Fees and slippage are not deducted.
- A 5-bar horizon is short for reversal signals that need more time.
- Pattern statistics are averages across many assets. A particular stock may behave differently.
Checklist: how to read any backtest
- How many cases? Fewer than 20–30 is mostly noise.
- Which period and market? A bull market alone is a weak test.
- How is success defined: target and stop, or just "price went up"?
- Is there an average result or expectancy, not just a hit rate?
- Was there a separate check period that played no part in tuning?
- Are fees and slippage included?
- How were the assets chosen, and is there survivorship bias?
- Do the backtest's entry and exit rules match how you would actually trade?
If half these questions have no answer, treat the pretty numbers with caution. To see how signals affected your own results, it also helps to calculate your portfolio return correctly.
Risk disclaimer
This article is for education only and is not investment advice. Trading stocks and crypto carries a risk of losing capital. Historical results, including those quoted here, do not guarantee future ones.
How Signae helps
- Every signal shows how often that pattern worked before on the same market and timeframe, and how many cases that's based on.
- You can filter signals by a minimum success rate and switch off the kinds you don't want.
- The signal journal shows how the signals the app already showed actually played out.
- Swing trades show expectancy in R, not just the share of winners.
- The AI investing assistant can explain a signal and its statistics in plain words.
Signae is in closed beta: request an invite.
FAQ
Do chart patterns actually work?
Some patterns on some markets have worked slightly more often than chance, but the edge is usually small and changes over time. The only way to judge a specific pattern is a backtest on a large enough sample.
What is a backtest in trading?
It's a test of a trading rule on past data: you find every past occurrence of the signal and record how each one ended, using entry, target, stop and time rules fixed in advance.
Why doesn't a high win rate guarantee profit?
Because the size of wins and losses matters too. With a 60% win rate, a 1% average gain and a 2% average loss, expectancy is negative: −0.2% per trade.
How many trades does a reliable backtest need?
There's no hard line, but fewer than 20–30 cases is mostly noise. Signae doesn't grade a pattern with fewer than 20 cases or a swing setup with fewer than 30 trades.
What is survivorship bias in backtesting?
Testing on today's list of companies leaves out those that went bankrupt or were removed along the way, so results look better than they really were.
Try Signae
Your exchanges and wallets in one portfolio, a tax report and signals with statistics in one app. Closed beta is open for sign-ups.
Get accessThis article is for information only and is not investment or tax advice.