TL;DR: the answer box
- The pattern works, and mostly because the market rose. After 1,182 up thrusts the next 10 bars averaged +0.39%. An average day in the same eight markets averaged +0.29%. The pattern's own contribution is 0.09 percentage points, and at a 20-bar hold it turns negative.
- Random entries match it. Given the same market, the same 10-bar hold and the same number of entries, a seeded coin flip beat the up-thrust long on 4 of 8 markets. Only 1 of 8 cleared the control's own spread by more than two standard deviations.
- Pooled across the eight markets, the bearish pattern pays to the upside. The down thrust, the one that is supposed to signal a decline, returned +0.94% over 20 bars against +0.42% for an average day. Traded short, it was profitable in 47.8% of 938 reliable settings. That is a coin flip.
- The RSI(2) exit buys a win rate reliably and money unreliably. Across 4,251 paired tests it lifted the median win rate from 50.0% to 62.3% in 98.3% of pairs, and improved net profit in only 53.9%, while cutting the median trade from 5.00 bars to 4.08.
- The published settings are mid-table. Ranked inside the 225-combination space they were chosen from, the three settings sit at a median rank of 81 of 225. One ranks 5th of 225 on 25 trades. One ranks last of 225.
How we tested
Daily bars, eight markets, one pattern library, no exceptions made for any of them.
Two index futures, E-mini S&P 500 (ES) and E-mini Nasdaq 100 (NQ), from 2007. Four index ETFs: SPY back to 1993 (8,398 bars, 33.4 years), QQQ, DIA and IWM. Then natural gas (NG) and Japanese yen (JY) futures, which are in here on purpose. A price pattern that only works on stock indexes is not a price pattern; it is a way of being long stocks. That is a testable difference and this is the test.
The pattern is Crabel's, as I described it in 2024 and as the EasyLanguage in that article implemented it. A pivot high is a bar whose high stands above the bars either side of it: 4 to its left and 2 to its right in the headline setting. Later, a bar opens above that pivot high, closes below each of the previous two closes, and closes in the lower half of its own range. Buy the next open. The down thrust is the exact mirror on a pivot low.
Almost nobody has tested any of this in public. The closest is QuantifiedStrategies' NR7 backtest, which covers a different Crabel pattern on a smaller market set and reports performance without a drift baseline, so a positive result there cannot be separated from a market that rose. That gap is the reason for this rebuild.
That produced 2,024 events: 1,182 up thrusts and 842 down thrusts, across 193 instrument-years. It is a rare pattern. About 10.5 signals a year per market, roughly one of either kind every five weeks.
Then 17,424 backtested variants. 3,024 in the results grid: the three published settings, traded both ways, through both regime filters, at seven different holds, on all eight markets. 14,400 in the parameter sweep: 225 combinations of the four pattern parameters, across the exact ranges these patterns are published with (10, 20 or 30 bars back for the pivot, and a window of 5, 10, 13, 15 or 21 bars), both patterns and both directions. Each configuration runs twice: once with a fixed bar-count exit, and once with that same exit plus the RSI(2) rule prescribed alongside them.
Everything is frictionless: no commission, no slippage, no spread. $35,000, no compounding, one position at a time. Every number below is computed from the study's own results files, and the full method is on the StatOasis methodology page.
One control matters more than all the others here, and it is worth naming before the results. A pivot is a statement about the future: the bar is only "the highest bar around" once the bars after it have printed. Publish it a moment early and the backtest trades on bars that had not printed yet. This study publishes a pivot only after its right-hand bars exist, and proves it by truncation. The signal at every bar is recomputed with the whole future deleted, and it has to come out identical.
Finding 1: What is Toby Crabel's up thrust pattern, and what does one look like?
Four conditions, all on one bar, all readable off a chart.
First, whose patterns these are. Toby Crabel wrote Day Trading with Short Term Price Patterns and Opening Range Breakout in 1990. It went out of print, second-hand copies now sell for hundreds, and its narrow-range patterns NR4 and NR7 outlived it. StockCharts' ChartSchool entry is where most traders meet them. Crabel himself stopped writing and started managing money: he founded Crabel Capital Management in 1997, which runs over $5 billion, and the Financial Times called him "the most well-known trader on the counter-trend side" in 2005. The thrust patterns are the reversal family that sits next to the narrow-range work.
| # | Condition | Why it is there |
|---|---|---|
| 1 | A pivot high exists: a bar higher than the 4 before it and the 2 after it | The reference level the market is about to fail at |
| 2 | A later bar opens above that pivot high | The market gaps out beyond the old resistance |
| 3 | That bar closes below each of the previous two closes | The move gave everything back |
| 4 | That bar closes in the lower half of its own range | Sellers held the close |
Then you buy the next open. The logic is a failed break: price pokes above an old high, cannot hold it, and shuts weak. The original argument is that this weakness is exhaustion rather than the start of a decline.
Here is the median one, out of the 218 SPY up thrusts that had a full ten bars after them.
That is a real trade and it worked, which is exactly why one trade proves nothing. Here are all of them.
Finding 2: Does a thrust predict anything, or is it just the market going up?
The pattern is followed by a rise. So is an ordinary Tuesday.
The only honest way to read a signal's forward return is against the same market's forward return from every bar, measured with the same arithmetic. Do that and the pattern's own contribution shows up as the gap between two numbers, not as one number that happens to be positive.
| Pattern | Bars held | Events | Average return | An average day | The pattern's own edge |
|---|---|---|---|---|---|
| Up thrust | 1 | 1,182 | 0.04% | 0.03% | +0.01 pts |
| Up thrust | 5 | 1,181 | 0.16% | 0.15% | +0.01 pts |
| Up thrust | 10 | 1,178 | 0.39% | 0.29% | +0.09 pts |
| Up thrust | 20 | 1,175 | 0.41% | 0.58% | -0.16 pts |
| Down thrust | 5 | 842 | 0.30% | 0.11% | +0.20 pts |
| Down thrust | 10 | 842 | 0.46% | 0.21% | +0.25 pts |
| Down thrust | 20 | 842 | 0.94% | 0.42% | +0.52 pts |
Three things fall out of that table, and two of them are uncomfortable.
The up thrust's best edge is 0.09 percentage points at 10 bars. Hold it to 20 and the edge is -0.16. Over those extra ten bars the market outruns the pattern. The pattern's return reaches only 0.41% while an average day's reaches 0.58%, so over 20 bars an average day beat the average up thrust.
The down thrust, the pattern that is supposed to be bearish, carries a bigger edge than the bullish one at every horizon past 5 bars, and it carries it upward. In 2024 I wrote: "Since the S&P500 market has a big bias to the long side, I tested the short pattern in a long signal, and not surprised it performed very well." That instinct was right. What was missing was the number that says how much of it is the pattern and how much is the bias.
And it does not hold together across markets. At a 10-bar hold the up thrust beats its own market's drift in 5 of 8 instruments and the down thrust in 6 of 8. The misses are not small. On natural gas the up thrust averaged -0.68% against a market average of -0.28%. On QQQ the down thrust averaged -0.13% against +0.50%. An up thrust that beats its market's own average on five markets and trails it on three is not yet a pattern. This is the same shape of result I found testing one breakout rule across the Nasdaq, S&P 500 and Dow: the rule does not change, the market does.
Finding 3: Would random entries have done just as well?
On half the markets, better.
This is the test that separates a signal from a schedule. Take the up-thrust long at the published setting: a 10-bar hold, no filters. Then throw the same number of entries at the same market at random, hold each for the same 10 bars, size them the same way, apply the same one-position-at-a-time rule, and average over 10 seeds. Everything is held equal except where the entries land.
| Instrument | Signals | The pattern | Random, same hold | Difference |
|---|---|---|---|---|
| ES | 130 | 99 trades, $79,912, 67.7% wins | 101 trades, $67,904 (sd $48,945), 63.8% | +0.2 sd |
| NQ | 135 | 98 trades, $125,425, 64.3% wins | 104 trades, $145,462 (sd $82,526), 62.3% | -0.2 sd |
| SPY | 219 | 157 trades, $35,408, 66.9% wins | 171 trades, $24,585 (sd $11,170), 60.7% | +1.0 sd |
| QQQ | 181 | 135 trades, $27,369, 58.5% wins | 142 trades, $29,280 (sd $11,683), 60.0% | -0.2 sd |
| DIA | 163 | 122 trades, $15,538, 59.0% wins | 132 trades, $17,973 (sd $14,478), 59.5% | -0.2 sd |
| IWM | 171 | 131 trades, $12,065, 55.7% wins | 134 trades, $25,744 (sd $16,577), 56.0% | -0.8 sd |
| NG | 106 | 82 trades, $17,290, 45.1% wins | 84 trades, -$63,057 (sd $57,086), 41.9% | +1.4 sd |
| JY | 77 | 68 trades, $21,831, 45.6% wins | 64 trades, -$17,316 (sd $19,277), 43.7% | +2.0 sd |
Dollars on NG and JY are one contract, sized on the engine's contract specifications: $10,000 per MMBtu point on NG and $125,000 per yen point on JY. Their dollar figures are large next to the ETFs and are not comparable to them.
The pattern beat its matched control on 4 of 8 markets. It cleared the control's own spread by more than two standard deviations on 1 of 8, and that one is the Japanese yen, on 77 events. That is the last market anyone would build a case on.
Look at what happened to the win rate. On SPY the pattern won 66.9% of its trades, with a 9.6% worst drawdown. Random entries in the same market on the same hold won 60.7%. Across the eight markets, random entries held 10 bars won 56.0% of the time on average. Random entries on SPY matched all but six points of that impressive-looking win rate on the same 10-bar hold, and I have shown the same thing from the other direction in what coin-flip entries reveal about market bias.
This is not the same as saying markets are random. They are not, and I have tested that too. It is saying something narrower and more useful: this particular pattern, at this particular setting, mostly buys you exposure you could have had by other means.
Finding 4: Do the three published settings hold up?
They sit mid-table in the space they were searched from.
Three settings travel with these patterns: long on a high pivot at 4/2/20/15, long on a low pivot at 1/2/10/13, and short on a low pivot at 1/1/10/15. They are presented as a list of the top 15 by net profit. A ranked list of the best settings is not evidence. It is the output of a search, and the honest version is the whole space it was searched over.
Here is what each setting actually did, traded exactly as published.
| Setting | Markets profitable | Median return/drawdown | Median worst drawdown | Thin samples |
|---|---|---|---|---|
| Long, high pivot (4/2/20/15), 10 bars | 8 of 8 | 0.05 | 30.0% | none |
| Long, low pivot (1/2/10/13), 10 bars | 6 of 8 | 0.01 | 39.6% | none |
| Short, low pivot (1/1/10/15), 4 bars | 6 of 8 | 0.01 | 23.0% | 2 of 8 |
The first one is the good one, and on SPY it is genuinely decent: $35,408 on 157 trades, 66.9% wins, a 9.6% worst drawdown and 0.30 return per unit of drawdown. The second one is not: on NQ it lost $41,570 and drew down 171.8% of the account, which is a polite way of saying it would have finished you. The third rests on 25 trades on ES and 28 on NQ, the two markets these settings are quoted for. Both sit below the 50-trade floor this engine flags at.
Now the search space. Each setting ranked by net profit inside its own 225-combination cell:
Median rank: 81 of 225. Best placement: 5 of 225, the short signal on ES, on 25 trades. That rank rests on a sample below the 50-trade floor. Worst: 225 of 225, dead last, the low-pivot long on IWM.
Mid-table is the honest outcome and it is not a scandal. It is what you should expect from parameters chosen by looking at results, and it is why I now publish the surface instead of the podium. If you have never seen what that difference does to a strategy, it is the whole subject of why most traders fail: robustness testing.
Finding 5: What does the RSI(2) exit actually buy you?
A better-looking win rate, a smaller drawdown, and a profit gain that is real at the median but inconsistent. Median net profit is $5,256 with the RSI(2) exit against $2,901 without it, and the RSI version earns more in 53.9% of the pairs.
The 2024 rules exited on a bar count or an RSI(2) reading: above 80 to close a long, below 20 to close a short. RSI(2) is the 2-day relative strength index, a short-term momentum gauge that spends most of its life pinned near 0 or 100. I never showed what the second half of that rule contributed. So every one of the 225 configurations was run twice: once on the bar count alone, once on the bar count or the RSI level, same everything else. 4,251 pairs cleared 50 trades on both sides.
| Measure | Bars only | Bars + RSI(2) | RSI version better in |
|---|---|---|---|
| Win rate (median) | 50.0% | 62.3% | 98.3% of pairs |
| Max drawdown (median) | 40.2% | 30.2% | 78.9% of pairs |
| Bars per trade (median) | 5.00 | 4.08 | 100% of pairs |
| Net profit (median) | $2,901 | $5,256 | 53.9% of pairs |
| Average trade (median) | 0.058% | 0.079% | 49.7% of pairs |
| Return/drawdown (median) | 0.001 | 0.005 | 59.9% of pairs |
Read the first row and the last two together. The RSI leg improves the win rate in 98.3% of paired configurations. That is near-universal, about as reliable as a backtest result gets. It improves the average trade in 49.7%, which is a coin flip with an extra step.
That is what an early exit does. Leaving while you are ahead converts losers into small winners and turns your win rate into a number you enjoy quoting, and it also cuts your winners short. It genuinely earns the smaller drawdown: 40.2% down to 30.2%, better in 78.9% of pairs. If you want to sleep, that is worth something real. Just do not call it an edge. The RSI(2) early exit moved risk around far more than it created return. That is the same conclusion I reached testing channel exits against fixed holds on a trend system. For the fuller picture of what RSI(2) does and does not do, the RSI deep dive is the place.
Finding 6: Which side, which market, and do the filters help?
One side. Five of the eight markets for the up thrust, six for the down. And not on this evidence.
Take every reliable configuration in the sweep, 4,393 of them clearing 50 trades, and split by pattern and direction:
| Pattern | Direction | Configurations | Profitable | Median win rate |
|---|---|---|---|---|
| Up thrust | Long | 1,286 | 90.6% | 71.7% |
| Down thrust | Long | 890 | 58.8% | 70.4% |
| Down thrust | Short | 938 | 47.8% | 53.3% |
| Up thrust | Short | 1,279 | 46.6% | 54.4% |
The long side is profitable in 90.6% of reliable up-thrust configurations and 58.8% of down-thrust ones; the short side sits at 46.6% and 47.8%, a coin flip on both patterns. That is not the signature of a pattern that identifies reversals. It is the signature of long exposure in a market that rose, and it is the same story the direction split told in Finding 2, arriving by a different road.
The filters do not settle it either. The engine applies two: a volatility filter (is 20-day average true range higher than it was five bars ago) and a trend filter (is the 100-day average rising over ten bars). On the up-thrust long at a 10-bar hold, unfiltered, the median market takes 110 trades at 0.050 return per unit of drawdown. Three of the four filter states score lower: volatility falling at 0.025, volatility rising at 0.040, trend down at 0.000. The fourth, trend up, reaches 0.080 on 81 trades, and its median net profit rises from $24,600 to $28,793. That is a 26.7% cut in evidence for the lift, and no resampling, interval or half-sample test was run on it. A filter that cuts your trade count and lifts your ratio has not yet shown that it helps you. It has made a stronger claim on less data. There are conditions where regime filtering genuinely pays, and I have mapped where. Nothing here shows this is one of them.
The verdict, and the honest limits
Where the patterns earn their reputation. They are real, they are cleanly defined, and the code works. The 10-bar hold published with the high-pivot long setting is genuinely the best point on its own curve: return over drawdown climbs from 0.005 at 1 bar to 0.050 at 10, then falls to 0.025 at 20. The low-pivot long, over the same seven tested holds, peaks at 20 bars instead, at 0.020. The instinct that the "short" pattern belonged on the long side was correct, and the data now says why. On SPY, the headline setting is a decent little system: 157 trades, 66.9% wins, a 9.6% worst drawdown.
Where the usual presentation fails. Calling the patterns "robust and simple" with no measurement behind the word robust. Showing a top-15-by-net-profit table as if a ranked list were evidence. Quoting three settings without their search space, one of which ranks last of 225 on one market and one of which rests on 25 trades. And never once asking what the market would have done anyway. That turns out to be the whole question, because a matched random entry beat the pattern on 4 of the 8 markets tested.
The up-thrust long at its headline setting is a way of buying stock indexes on a schedule, and on most of them the schedule did no better than arbitrary. It beat its matched random control on ES and SPY and trailed it on NQ, QQQ, DIA and IWM. On SPY it finished 1.0 standard deviations above the control. On IWM it finished 0.8 standard deviations below it.
Limits, stated plainly:
- Frictionless. No commission, no slippage, no spread behind any figure above. The winning configurations average a fraction of a per cent per trade. That is precisely the range where costs decide the answer, and no commission, slippage or spread schedule was tested, so nothing here shows which results survive them.
- Daily bars. Crabel's own work is largely intraday. This tests the patterns on daily bars, and says nothing about the intraday versions.
- Two thin cells. The short signal on ES (25 trades) and NQ (28) are below the 50-trade floor. They are marked in every table and they are directional evidence, not conclusions.
- One position, one market, one direction at a time. No portfolio and no combined long/short book, so the smoother equity curve you get by stacking three signals is outside what this measures.
- In-sample. The parameter surface is measured across the whole history. It is a robustness picture, not a walk-forward result, and a setting that looks stable here has still never been asked to work on data it has not seen.
- Back-adjusted futures. ES, NQ, NG and JY are continuous contracts, so roll effects live inside the price series. All four size one contract times BigPointValue, so their dollar figures carry real leverage and are not comparable to the four ETFs beside them.
What this means for you
- If you trade the up thrust long on a stock index, know what you are buying. It is long exposure whose start beat a matched random entry on ES and SPY and trailed one on NQ, QQQ, DIA and IWM. Pooled across the eight markets, its median return over drawdown peaks at the 10-bar hold among the seven holds tested, and SPY is where its margin over the control is clearest among the index markets, at 1.0 standard deviations. Size it as exposure, not as an edge.
- Most of the tested short configurations do not make money, on either pattern. 46.6% and 47.8% of reliable configurations are profitable, a coin flip. The direction split is the clearest result in the whole study.
- Add the RSI(2) exit if you want a smoother ride, not a bigger number. It reliably improves the win rate and the drawdown. It improves net profit in 53.9% of the 4,251 paired configurations, which is a coin flip.
- Before you trust any setting, rank it inside the space it came from. These sat at a median of 81 of 225. If a setting you are about to trade cannot tell you its rank, you do not know whether you found an effect or a coincidence. The discipline behind that, end to end, is the Algo Trading Masterclass module on robustness.
- Run the drift baseline first, every time. For both thrust patterns in these eight markets, average forward return alone did not separate the pattern from its market. Subtract what the same markets did from every bar, and the up thrust's 0.39% over 10 bars shrinks to 0.09 points above an average day's 0.29%. That single comparison is what turned this from "the pattern works" into "this is stock-index exposure".
- Test the pattern where it has no business working. Natural gas and the yen cost nothing to add and they are what turned "this is a pattern" into "this depends on the instrument": the natural gas up thrust lagged its own drift, while the yen up thrust beat its own by 0.41 points. If you have only tested a rule where you expect it to work, you have not tested it. A rule that does survive that treatment looks like the weekly mean-reversion rule on index futures: worse on money than holding, better on risk, on every market tried.
Methodology and risk note: Backtested event study on daily OHLC bars for ES, NQ, NG and JY futures and the SPY, QQQ, DIA and IWM ETFs, 1993 to 2026, totalling 193 instrument-years. 2,024 thrust events measured; 17,424 variants backtested (3,024 grid, 14,400 sweep). $35,000 starting capital, flat-only, no compounding, next-open fills, frictionless, with no commission and no slippage anywhere. Measured against each market's own average forward return and against seeded random-entry controls. All results are historical and for educational purposes only. Past performance does not guarantee future results. Not investment advice.
The plan was to test something new. The drift baseline came back at 0.09 points and I could not un-see it. Every study I finish lands in the newsletter first, including the ones that overturn something I believed. If that is the sort of thing you want landing in your inbox, it is free: StatOasis.com/Overfit








