Markets › Futures · ES futures (2-minute bars from 1-minute data)
Standard Error Bands Scalping Strategy on ES Futures: a 2-Minute Backtest
Fade every touch of the Standard Error Bands on 2-minute ES bars and take profit at the middle line: 32,145 trades from 2020 to 2026, with costs and a control.
Buried · No proven edgeHalf its touches bounced. The costs never missed one.
Variants tried: 3 · Passed every gate: 0 · Holdout opened: yes (already used)
Short answer: not in our test. Fading every touch of the Standard Error Bands on 2-minute ES bars, with the middle line as the target, made about nothing before costs (-$2.32 a trade with a 1:1 stop), so the average trade lost about the full $30.76 of costs over 32,145 trades from 2020 to 2026. All three versions were buried.
00The verdict in three lines
- The idea, from a popular post on Reddit's r/FuturesTrading in April 2025: on 2-minute charts, when price touches the upper or lower Standard Error Band, trade against it and take profit at the middle line. The post gave no stop, so the rules here are ours, written and frozen before the run: a limit order at the band, the target at the middle line, a stop as far as the target (SEB-1) or twice as far (SEB-2), and a version with a trend filter (SEB-1F), on ES futures from 2020 to September 2026 with $30.76 of costs a trade.
- All three versions were buried, and all three lost money even before costs: -$2.32, -$1.58 and -$0.17 a trade gross. With costs, SEB-1 lost $1,063,360 per contract over 32,145 trades, about 19 a day, and every version lost in every year.
- A high win rate did not help: with the stop twice as far as the target, 65.1% of trades won, and the average before costs was still slightly negative (-0.004 R a trade). The real trades showed no advantage over the same trades moved to other days: the 1:1 version did worse than most control runs (percentile 13.4), and the other two landed close to the control median.
01The bands and our rules
Standard Error Bands: for each 2-minute bar, fit a straight line to the last 21 closes by least squares; the middle line is that line's value at the latest bar, and the bands are two standard errors of the fit above and below it; all three are then averaged over the last 3 bars. They look like Bollinger Bands but follow a regression line instead of a moving average. The bands use every trading hour, as a chart does; a trade uses the bands of the last 2-minute bar completed before its minute.
| Part | Our rule |
|---|---|
| Entry | When flat, a buy limit at the lower band and a sell limit at the upper band, from 09:46 New York to 15 minutes before the session close (15:45 on normal days); one position at a time. A position can be opened again the minute after a stop, and more than a third of the 1:1 version's trades were such re-entries. |
| Target | The middle line at the entry, fixed for the trade. |
| Stop | SEB-1 and SEB-1F: as far beyond the entry as the target is; SEB-2: twice as far. |
| Trend filter (SEB-1F) | No entry when the regression line moved more over its 21 bars than the width of the band. |
| Exit | The target, the stop, or the session close (16:00; 13:00 or 13:15 on early-close days). |
Band reversals have been tested before on this site (Bollinger Bands and VWAP bands on ES), so the development t-statistic needed is 2.5.
02Data and costs
ES futures, NinjaTrader's back-adjusted 1-minute history, January 2020 to 25 September 2026, built into 2-minute bars; 1,737 trading days. Periods: development 2020 to 2023, validation January 2024 to March 2025, holdout April 2025 to September 2026, already used by earlier ES tests. Costs: $30.76 a round trip per contract ($5.76 of commission and one tick of slippage on each fill), 0.62 points, as in every ES test on the site; this is a conservative cost model, not a reconstruction of the slippage on each fill. Limit fills at the band and at the middle line may get less slippage in reality; on the other hand the test assumes that a limit order fills as soon as price touches it, which is optimistic, since in a real queue a touch often does not fill. Either way, even at zero cost the versions were negative. Engine check: seb_selftest.js checked the bands against a hand calculation, hand-built minutes (fills, both bands in one minute, stops, targets, gaps, the close, the entry window, the filter), and all three versions trade by trade against an independent re-implementation (seb_selftest_result.txt).
03Results
Results in dollars per ES contract ($50 a point). The 95% range is the Wilson interval for the win rate.
| Variant | Version | Trades | Net after costs | Net per trade | Gross per trade | Winners (95% range) | Profit factor | Drawdown on closed trades | Verdict |
|---|---|---|---|---|---|---|---|---|---|
| SEB-1 | stop as far as the target (1:1) | 32,145 | -$1,063,360 | -$33.08 | -$2.32 | 49.3% (49% to 50%) | 0.80 | -$1,067,428 | Buried |
| SEB-2 | stop twice as far as the target | 18,610 | -$601,881 | -$32.34 | -$1.58 | 65.1% (64% to 66%) | 0.85 | -$609,313 | Buried |
| SEB-1F | 1:1 with a trend filter | 23,273 | -$719,896 | -$30.93 | -$0.17 | 49.7% (49% to 50%) | 0.82 | -$720,733 | Buried |
Cumulative net result by month, dollars per contract. * Holdout already used by earlier ES tests.
By period
| Variant | Development (trades) | Validation (trades) | Holdout* (trades) | Development t | Validation PF |
|---|---|---|---|---|---|
| SEB-1 | -$613,419 (18,956) | -$233,720 (6,218) | -$216,222 (6,971) | -12.59 | 0.77 |
| SEB-2 | -$388,429 (10,965) | -$128,000 (3,573) | -$85,453 (4,072) | -7.54 | 0.82 |
| SEB-1F | -$449,368 (13,826) | -$165,294 (4,418) | -$105,234 (5,029) | -10.33 | 0.78 |
04Win rate against break-even
| Variant | Winners | Break-even before costs | Target | Stop | Closed at the session close | Before costs, per trade | After costs, per trade |
|---|---|---|---|---|---|---|---|
| SEB-1 | 49.3% | 50.0% | 48.9% | 50.0% | 1.1% | -0.008 R | -0.172 R |
| SEB-2 | 65.1% | 66.7% | 64.2% | 31.9% | 3.9% | -0.004 R | -0.085 R |
| SEB-1F | 49.7% | 50.0% | 49.2% | 49.5% | 1.3% | -0.001 R | -0.156 R |
A touch of the band was followed by a return to the middle line about as often as by a move to the stop. With a 1:1 stop that is a coin toss; with a stop twice as far, the win rate rises to 65.1%, which looks good. For a trade that ends only at the target or at a stop twice as far, the break-even win rate before costs is 66.7%; 3.9% of these trades ended at the session close instead, with other results, so the real test is the average per trade, and before costs it was slightly negative (-0.004 R).
05What the costs do to a scalp
| Variant | Trades a day | Median target, points | Costs as a share of the target | Gross per trade | Net per day |
|---|---|---|---|---|---|
| SEB-1 | 18.5 | 4.71 | 13.1% | -$2.32 | -$612 |
| SEB-2 | 10.7 | 4.78 | 12.9% | -$1.58 | -$347 |
| SEB-1F | 13.4 | 4.96 | 12.4% | -$0.17 | -$414 |
The bands on 2-minute bars sit only a few points from their middle line, so the target is small and the cost of each round trip is a large share of it. With nothing before costs, the average trade loses about the cost, and many trades a day turn that into a large daily loss.
06April 2025, the month of the post
| Variant | Trades in April 2025 | Net | Net per trade | Net per trade, all other months |
|---|---|---|---|---|
| SEB-1 | 444 | -$18,851 | -$42.46 | -$32.95 |
| SEB-2 | 248 | +$4,722 | +$19.04 | -$33.04 |
| SEB-1F | 275 | -$15,916 | -$57.88 | -$30.61 |
The idea was posted in April 2025, a month of very large swings in US stocks. Only the version with the wide stop made money that month; the other two lost more per trade than in the other months.
07By year
| Year | SEB-1 trades | SEB-1 net | SEB-2 trades | SEB-2 net | SEB-1F trades | SEB-1F net |
|---|---|---|---|---|---|---|
| 2020 | 4,852 | -$102,769 | 2,841 | -$78,836 | 3,496 | -$107,591 |
| 2021 | 4,548 | -$176,357 | 2,585 | -$111,111 | 3,268 | -$115,847 |
| 2022 | 4,675 | -$191,652 | 2,711 | -$115,301 | 3,522 | -$140,628 |
| 2023 | 4,881 | -$142,641 | 2,828 | -$83,181 | 3,540 | -$85,302 |
| 2024 | 5,053 | -$187,158 | 2,958 | -$98,783 | 3,609 | -$128,497 |
| 2025 | 4,818 | -$154,156 | 2,747 | -$99,827 | 3,420 | -$78,990 |
| 2026 | 3,318 | -$108,627 | 1,940 | -$14,842 | 2,418 | -$63,041 |
2026 counted to 25 September.
08Longs, shorts and the best trades
| Variant | Longs: trades / gross | Shorts: trades / gross | 10 best trades | Net without them |
|---|---|---|---|---|
| SEB-1 | 16,805 / +$12,128 | 15,340 / -$86,708 | +$44,417 | -$1,107,777 |
| SEB-2 | 9,589 / +$23,684 | 9,021 / -$53,122 | +$40,662 | -$642,543 |
| SEB-1F | 12,082 / +$23,572 | 11,191 / -$27,591 | +$32,848 | -$752,744 |
09Is it the bands or the market?
The benchmark is a moved-day control: each day's real trades (their minutes, directions and distances) are moved, all days together, by one random offset of at least 5% of the days, and entered on the real day at the market, with the same targets, stops, close and costs. 500 runs with fixed seeds; the bar is the 95th percentile of the average net result per trade. The real trades did no better than the same trades on other days.
| Variant | Trades | Real average per trade | Control median | Control 5th to 95th | Percentile (95 needed) |
|---|---|---|---|---|---|
| SEB-1 | 32,145 | -$33.08 | -$30.95 | -$34.04 to -$27.80 | 13.4 |
| SEB-2 | 18,610 | -$32.34 | -$32.40 | -$36.99 to -$27.18 | 50.8 |
| SEB-1F | 23,273 | -$30.93 | -$31.07 | -$34.83 to -$27.55 | 51.6 |
10The gates
| Variant | Trades | 1. PF ≥ 1.2 in validation | 2. ≥ 50 trades in each period | 3. t ≥ 2.5 on development | 4. Above the 95th percentile of the control | 5. Positive without the 10 best trades | 6. Holdout net positive (already used) |
|---|---|---|---|---|---|---|---|
| SEB-1 | 32,145 | fail | pass | fail | fail | fail | fail |
| SEB-2 | 18,610 | fail | pass | fail | fail | fail | fail |
| SEB-1F | 23,273 | fail | pass | fail | fail | fail | fail |
11Verdict by variant
| Variant | Cause | Gates failed | Verdict |
|---|---|---|---|
| SEB-1 | No proven edge | 1, 3, 4, 5, 6 | Buried |
| SEB-2 | No proven edge | 1, 3, 4, 5, 6 | Buried |
| SEB-1F | No proven edge | 1, 3, 4, 5, 6 | Buried |
All three were slightly negative before costs, so by the protocol's definitions the cause is No proven edge, not Costs; the costs turned a result near zero into a large loss.
Not tested: other stops and targets, other band settings, discretionary filters such as levels marked by hand, other markets.
TWhat this shows, and what to take into your own tests
What the results show
- Before costs, fading a touch of the Standard Error Bands on ES 2-minute bars earned about nothing: between -$2.32 and -$0.17 a trade.
- With the stop twice as far as the target, 65.1% of trades won after costs (65.3% before costs), still below the 66.7% that this shape needs just to break even before costs.
- At 19 trades a day, $30.76 of costs a trade added up to $988,780 per contract over the period for the 1:1 version; with a small loss before costs, it lost $1,063,360 in all.
What remains unknown
- Other stops, targets beyond the middle line, or other band settings.
- Discretionary filters, such as key levels marked by hand, which cannot be tested as written.
- Lower costs: even at zero cost the versions were slightly negative before costs, so lower costs alone would not make them profitable.
Why it failed
The target is small: the median distance from the fill to the middle line was 4.7 points, so the 0.62 points of commission and slippage a round trip took about 13.1% of the median target (about 16% of the target on average). With a 1:1 stop, price came back to the middle line about as often as it went on to the stop, so there was nothing before costs to pay for them.
What you can apply to your own tests
- Check the win rate against the break-even of the trade's shape: 65% winners lose money when the stop is twice the target.
- Count the trades per day: a small loss per trade times many trades a day is a large loss.
- Express the cost as a share of the target before trading a scalp: here it was more than a tenth.
A note on the numbers: drawdown figures are measured on closed trades unless a table says it includes open losses. Open losses inside a trade are not counted in a closed-trade drawdown, so real account risk is higher, especially for systems with no stop. Backtests are not live trading.
FAQCommon questions
What are Standard Error Bands?
Bands around a linear regression line: for each bar, a straight line is fitted to the last 21 closes, and the bands sit two standard errors of that fit above and below its latest value, usually smoothed over 3 bars. They look like Bollinger Bands but follow a regression line instead of a moving average.
Does the Standard Error Bands scalping strategy work?
Not in our test on ES futures: with a 1:1 stop, price returned to the middle line about as often as it went on to the stop, so the average trade lost about the cost. With a 1:1 stop it won 49.3% of the time, and over 32,145 trades the version lost $1,063,360 per contract.
Why does a 65% win rate still lose money?
Because the stop was twice as far as the target: a trade that risks two to make one and ends only at the target or the stop needs a win rate of 66.7% just to break even before costs. Our version won 65.1%, some trades ended at the session close instead, and its average before costs was slightly negative.
How was the strategy tested?
On ES 1-minute data from 2020 to 2026 built into 2-minute bars, with a limit at the band, the middle line as the target, three versions fixed in advance (a stop as far as the target, one twice as far, and the first with a trend filter), $30.76 of costs a trade, rules written and dated before the data was run, results split into development, validation and holdout periods (the holdout already used), a control that moves each day's trades to another day as the benchmark, and every variant reported. Read the protocol.
12Check our arithmetic
seb_spec.md
seb_lib.js · seb_ref.js · seb_selftest.js · seb_run.js
control_audit_lib.js · em_lib.js · fx_data.js · gh_lib.js · hourly_lib.js · ma_lib.js · na_lib.js · rb_lib.js · rsi2_protocol.js
seb_selftest_result.txt · seb_results.txt · seb_summary.json
Code provenance: our own code. No third-party source code is used or published.
13Data notes
Holes. Trades open across a known hole in the data are removed in a second count; no verdict changes:
| Variant | Trades | Removed | Net per trade | Verdict |
|---|---|---|---|---|
| SEB-1 | 32,145 | 0 | -$33.08 → -$33.08 | Buried → Buried |
| SEB-2 | 18,610 | 1 | -$32.34 → -$32.45 | Buried → Buried |
| SEB-1F | 23,273 | 0 | -$30.93 → -$30.93 | Buried → Buried |
Back-adjustment. The bands and targets are price differences inside a day, which back-adjustment does not change.
14Corrections
9 Nov 2026, the day of publication, corrections after a review: the break-even of the version with the 2:1 stop is now explained with its session-close exits (66.7% holds only for trades that end at the target or the stop; its average before costs was slightly negative); the comparison with the control is given by version (the 1:1 version did worse than most control runs, the other two were close to the median); the cost section now says that one tick on every fill is a conservative model and that the touch fill of limit orders is optimistic. No number or verdict changed.
+More tests and guides
- Vwap strategy backtest
- Bollinger bands strategy backtest
- Trading costs
- Day trading strategies backtested: this test next to the other day-trading tests
- Free prop firm challenge calculator
- What all the backtests found so far
- The backtesting protocol
- How to backtest a trading strategy without fooling yourself
- Backtesting glossary