Markets › Futures · NQ futures, 1-minute
Change of Character (ChoCh) Strategy Backtest: Market Structure Shift After a Liquidity Sweep on NQ
“Wait for the sweep, then the change of character.” It may be the most taught day-trading template in smart money concepts (SMC) and ICT. We made it mechanical, with displacement and a true lower high, and ran it on every NQ session from 2020 to 2026.
Buried · No proven edgeThe character changed 678 times. The odds did not.
Variants tried: 4 · Passed every gate: 0 · Best: 2 of 6 · Holdout opened: yes (already used)
Short answer: not in our test. A liquidity sweep followed by a change of character with displacement, traded mechanically on NQ futures from 2020 to 2026, ended at -$10 a trade after costs entering on the shift (634 trades); entering on the retest ended at +$75 a trade but did not beat random days by enough and lost in the latest period. Four versions, none with a proven edge.
00The verdict in three lines
- Does the change of character strategy work? Not in our test. The classic version (price sweeps the overnight or previous day's high or low, a 1-minute candle with displacement closes beyond the last lower high, enter at once, stop behind the sweep, 2R) ended at -$10 a trade over 634 NQ trades, +$6 before costs.
- Entering on the retest looked better (+$75 a trade over 494 trades) but passed only 2 of our 6 gates: no better than random days by enough, a loss in the most recent period, and negative without its 10 best trades.
- Buried, no proven edge in any of four versions. The same idea on EUR/USD, in our order block test, lost after costs as well.
01The template: liquidity sweep, then a change of character
- Liquidity: obvious highs and lows, where stop orders rest. Price runs through one (a liquidity sweep), taking those stops.
- Change of character (ChoCh), or market structure shift (MSS): on a lower timeframe (1 or 5 minutes), the structure was falling into the sweep (lower highs); then an impulsive candle (“displacement”) closes above the last lower high. That first break against the trend is the signal that the move has turned.
- Entry: at once, or on a retest of where the shift came from. Stop: behind the new extreme made by the sweep. Target: 2R. Sells are the mirror image.
Change of character vs market structure shift: teachers use the two names for the same event; many keep “MSS” for a shift with displacement. We required displacement, so this test is the stricter of the two. Change of character vs break of structure: a break of structure (BOS) goes with the trend, a change of character against it; we required the broken swing to be a lower high (a higher low for a sell).
02How we made the rules mechanical
- Liquidity levels: the previous day's regular-session high and low and the overnight high and low (18:00 to 09:30 New York). A previous-day level already taken overnight is not used that day.
- Sweep: from 09:30 to 11:30 New York, a bar trades beyond an unused level. The sweep extreme follows price as long as it keeps going.
- Structure: swing highs and lows of 3 bars on each side, on 1-minute or 5-minute bars from 07:00. The swing to break is the last one before the sweep extreme, and it must be a lower high (for a buy).
- Change of character: a close beyond that swing, with a candle body at least one average true range (14 bars) long, within 60 minutes of the sweep and by 11:30.
- Entries: at the next minute's open (“shift”), or a limit order at the broken swing for 30 minutes, until 12:00 (“retest”), cancelled if price reaches the 2R target or the stop first. Stop one tick behind the sweep extreme, target 2R, one trade a day, out at the session close.
These definitions were fixed and dated before any level or swing was computed (choch_spec.md).
03How we tested it
NQ (E-mini Nasdaq-100 futures), NinjaTrader 1-minute history with the overnight session, back-adjusted, January 2020 to 25 September 2026: 1,734 usable sessions. Costs: $15.76 a round trip per contract (commission plus one tick of slippage on each fill), as in all our futures tests, with 1.5 and 2.5 times that shown too. Periods: 2020 to 2023, 2024 to March 2025, and a holdout from April 2025 already used by our earlier NQ tests; because smart money and sweep ideas have been tried several times on this site, the first-period bar is t ≥ 2.5. Control: every trade moved to another day at the same minute, same direction and stop distance, 500 times. Engine check: 17 groups of hand-made days (levels taken overnight, ties, a sweep extreme that moves, a broken high that is not a lower high, a close without displacement, the time windows, every way the retest order fills or is cancelled, both sides on one day, an early close) and an independent re-implementation that matched every trade of all four versions (choch_selftest_result.txt).
04Results: does the change of character strategy work?
| Variant | Version | Trades | Win rate (95% range) | Gross per trade | Net per trade | Net total, 1 contract | Profit factor | Verdict |
|---|---|---|---|---|---|---|---|---|
| CH-1M-MKT | 1-minute structure, enter on the shift | 634 | 38.2% (34% to 42%) | +$6 | -$10 | -$6,237 | 0.99 | Buried |
| CH-1M-RET | 1-minute structure, enter on the retest | 494 | 37.4% (33% to 42%) | +$91 | +$75 | +$37,040 | 1.12 | Buried |
| CH-5M-MKT | 5-minute structure, enter on the shift | 162 | 46.9% (39% to 55%) | +$157 | +$141 | +$22,802 | 1.15 | Buried |
| CH-5M-RET | 5-minute structure, enter on the retest | 109 | 44.0% (35% to 53%) | +$98 | +$82 | +$8,987 | 1.10 | Buried |
Cumulative net dollars per contract by month. * Holdout already used before this test.
Change of character win rate: how the trades ended
| Variant | Hit 2R target | Stopped | Closed at the session close | Median risk | Cost per trade | Median minutes held | Days with a trade |
|---|---|---|---|---|---|---|---|
| CH-1M-MKT | 24.1% | 55.0% | 20.8% | 60.00 pts (+$1,200) | 0.016 R | 70 | 36.6% |
| CH-1M-RET | 29.6% | 58.3% | 12.1% | 44.25 pts (+$885) | 0.021 R | 35 | 28.5% |
| CH-5M-MKT | 16.0% | 40.7% | 43.2% | 94.25 pts (+$1,885) | 0.010 R | 261 | 9.3% |
| CH-5M-RET | 22.9% | 47.7% | 29.4% | 66.00 pts (+$1,320) | 0.013 R | 116 | 6.3% |
The classic version won 38.2% of its trades; a fifth of them were still open at the close, which is why the win rate needed is not exactly one in three. The 5-minute versions traded on only 9.3% and 6.3% of days: a clean 5-minute lower high, broken with displacement within the hour, is rare.
05How often does a change of character follow a sweep?
On 85.8% of sessions price swept at least one level between 09:30 and 11:30, almost always the overnight high or low (1,652 of 1,757 sweeps on the 1-minute chart; a previous-day level alone 53 times, because the previous day's high or low had usually been taken overnight already). A change of character followed 38.6% of sweeps on the 1-minute structure and 9.4% on the 5-minute structure. Another 204 sweeps saw a displaced close beyond a swing that was not a lower high (an ordinary break of structure, not taken), and 499 saw a close beyond the lower high without displacement first.
06Change of character or random entry?
| Variant | Trades | Real net per trade | Random days, median | Random, 5th to 95th | Percentile (95 needed) |
|---|---|---|---|---|---|
| CH-1M-MKT | 634 | -$10 | -$2 | -$115 to +$106 | 46.2 |
| CH-1M-RET | 494 | +$75 | -$12 | -$110 to +$96 | 89.8 |
| CH-5M-MKT | 162 | +$141 | -$13 | -$255 to +$249 | 82.6 |
| CH-5M-RET | 109 | +$82 | -$7 | -$255 to +$279 | 70.2 |
The control places every trade on another day at the same minute, same direction, same stop distance and 2R target. The classic version did no better than the median random run (the 46.2th percentile). The retest version came closest, at the 89.8th: better than most random runs, but about one random run in ten did as well, short of the 95 we require.
07By period and by year
| Variant | 2020 to 2023 (trades) | 2024 to Mar 2025 (trades) | Holdout* Apr 2025 to Sep 2026 (trades) | t, first period | PF, second period |
|---|---|---|---|---|---|
| CH-1M-MKT | +$12,226 (374) | +$6,242 (122) | -$24,705 (138) | 0.37 | 1.07 |
| CH-1M-RET | +$26,067 (294) | +$15,823 (95) | -$4,850 (105) | 1.03 | 1.28 |
| CH-5M-MKT | +$34,612 (103) | +$312 (24) | -$12,122 (35) | 1.45 | 1.01 |
| CH-5M-RET | +$13,049 (67) | +$6,677 (17) | -$10,739 (25) | 0.85 | 1.66 |
| Year | CH-1M-MKT net (trades) | CH-1M-RET net (trades) | CH-5M-MKT net (trades) | CH-5M-RET net (trades) |
|---|---|---|---|---|
| 2020 | +$34,936 (77) | +$14,535 (52) | +$22,271 (19) | +$8,020 (13) |
| 2021 | -$8,084 (91) | -$6,294 (77) | -$8,535 (33) | -$4,264 (19) |
| 2022 | -$178 (103) | +$24,644 (87) | +$6,394 (28) | +$1,526 (18) |
| 2023 | -$14,448 (103) | -$6,819 (78) | +$14,483 (23) | +$7,767 (17) |
| 2024 | +$21,644 (100) | +$14,555 (79) | -$1,508 (17) | +$9,710 (13) |
| 2025 | -$44,881 (87) | -$17,350 (66) | -$3,424 (25) | -$9,856 (15) |
| 2026 (to 25 Sep) | +$4,775 (73) | +$13,768 (55) | -$6,878 (17) | -$3,916 (14) |
* The holdout months were already used by our earlier NQ tests.
Every version ended the most recent period with a loss. The 5-minute versions had fewer than 50 trades in the second and third periods, too few to judge them there (gate 2). For the classic version, longs ended at +$18,537 (260 trades) and shorts at -$24,774 (374); NQ rose strongly over these years, which favours any long side.
08Costs: why NQ is not EUR/USD here
| Variant | Before costs | $15.76 (base) | x1.5 | x2.5 |
|---|---|---|---|---|
| CH-1M-MKT | +$6 | -$10 | -$18 | -$33 |
| CH-1M-RET | +$91 | +$75 | +$67 | +$51 |
| CH-5M-MKT | +$157 | +$141 | +$133 | +$117 |
| CH-5M-RET | +$98 | +$82 | +$75 | +$59 |
The stop goes behind the sweep extreme, a long way from a 1-minute entry on NQ (a median of 60 points, +$1,200 a contract), so $15.76 is only 0.016 R a trade. Even at two and a half times our cost no verdict changes. The problem is not costs; it is that the setup did not pick better moments than chance.
09Change of character on EUR/USD and on NQ
Our order block and fair value gap test on EUR/USD used a 5-minute sweep and break of structure without asking for a lower high; after publication we labelled its trades, and those that were a true change of character (7,322 trades, entering at the zone) made +0.004 R a trade before costs and -0.294 R after them. On NQ, with displacement and named liquidity levels, the classic version made +0.021 R before costs in R terms (+$6 a trade). Two markets, two readings of the template, the same picture: about zero before costs, and no better than random days.
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 moved-entry control | 5. Positive without the 10 best trades | 6. Holdout net positive (already used) |
|---|---|---|---|---|---|---|---|
| CH-1M-MKT | 634 | fail | pass | fail | fail | fail | fail |
| CH-1M-RET | 494 | pass | pass | fail | fail | fail | fail |
| CH-5M-MKT | 162 | fail | fail | fail | fail | fail | fail |
| CH-5M-RET | 109 | pass | fail | fail | fail | fail | fail |
| Variant | Cause | Gates failed | Verdict |
|---|---|---|---|
| CH-1M-MKT | Costs | 1, 3, 4, 5, 6 | Buried |
| CH-1M-RET | Fragile | 3, 4, 5, 6 | Buried |
| CH-5M-MKT | Fragile | 1, 2, 3, 4, 5, 6 | Buried |
| CH-5M-RET | Fragile | 2, 3, 4, 5, 6 | Buried |
The data-gap check removed 6, 4, 1, 1 trades; no verdict changed. Costs (the classic version): a small gross gain of +$6 a trade turned into a loss. Fragile (the other three): positive overall, but negative without the 10 best trades and in the latest period. Together: no proven edge. This does not prove that no discretionary trader can use the idea; it shows that these mechanical readings, traded every day, did not.
TWhat this shows, and what to take into your own tests
What the results show
- The change of character after a liquidity sweep, made mechanical on NQ futures from 2020 to September 2026, did not show an edge in any of four versions. The classic one (a 1-minute shift with displacement, entry at once) ended at -$10 a trade after costs over 634 trades, +$6 before them.
- The best-looking version, entering on the retest of the broken swing, ended at +$75 a trade, but it was no better than the same trades on random days (the 89.8th percentile, 95 needed), lost in the latest period and was negative without its 10 best trades.
- Costs were not the problem on NQ: a stop behind the sweep extreme is wide (a median of 60 points on the classic version), so the cost was 0.016 R a trade. On EUR/USD 5-minute bars the same idea paid close to a third of its risk in costs.
What remains unknown
- Discretion: which liquidity "matters", which shift is "clean", the higher-timeframe bias. Teachers apply these by eye; we could not code them, so we did not test them.
- Other definitions: a different swing size, displacement measured another way, a 15-minute structure, other liquidity levels (London or Asian session highs and lows), other targets.
- Other markets. We tested NQ, where the template is most often shown, and the EUR/USD version is in our order block test.
Why it was buried
None of the four versions passed the development bar (t 1.45 at best, 2.5 needed) or beat random days by enough, all four lost in the most recent period, and every one turned negative without its 10 best trades. The results moved with a handful of big days, not with the setup.
What you can apply to your own tests
- Count every sweep, not the ones that worked: on NQ a level was swept on most days, and a clean shift followed only a minority of them.
- Compare with the same trade on random days at the same time. If the setup does not beat that, the setup is not doing the work.
- Check what is left without your ten best trades. Here, the ten best trades of each version were worth more than its whole result.
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
Does the change of character (ChoCh) strategy work?
Not in our backtest on NQ futures. The classic version (a 1-minute change of character after a sweep of the overnight or previous day's high or low, entry at once, stop behind the sweep, 2R) won 38.2% of 634 trades and ended at -$10 a trade after costs, no better than the same trades on random days.
What is a change of character in trading?
In smart money concepts (SMC) and ICT, the first break of market structure against the trend: in a falling market, a candle closes above the last lower high. It is read as the sign that the trend has turned, usually after price has swept a previous low.
Change of character vs market structure shift: what is the difference?
Mostly the name. Many teachers call a change of character with an impulsive candle (displacement) a market structure shift (MSS). We required displacement: a candle body at least one average true range long.
How often does a change of character follow a liquidity sweep?
On NQ from 2020 to 2026, a level was swept between 09:30 and 11:30 New York on 85.8% of sessions, and a 1-minute change of character with displacement followed 38.6% of those sweeps within the hour.
How was the change of character strategy tested?
On NQ 1-minute data from 2020 to 2026, overnight session included, with fixed definitions of the liquidity levels, swings, lower highs and displacement written down before any result, one contract and $15.76 a round trip, and rules written and dated before the data was run, costs included on every trade, results split into development, validation and holdout periods, a random-entry control as the benchmark, and every variant reported. Read the protocol.
11Check our arithmetic
choch_spec.md
choch_lib.js · choch_ref.js · choch_selftest.js · choch_run.js
control_audit_lib.js · em_lib.js · gh_lib.js · hourly_lib.js · ma_lib.js · rb_lib.js · rsi2_protocol.js
choch_selftest_result.txt · choch_results.txt · choch_summary.json
Code provenance: our own code, written from the template as commonly taught and the readings in the specification. We have no connection with any course or teacher.
12Data notes
Source. NinjaTrader NQ 1-minute history, back-adjusted continuous contract, on the New York clock, overnight session included; prices differ from a single contract month by the roll adjustments, not in the size of intraday moves. Known gaps in the file are listed in our data audit and never filled. Fills: market entries at the next minute's open; retest entries at the limit, or at a minute's open if it opened through it; stops and targets at their level or the minute's open if it gapped through; one tick of slippage per fill is in the cost.
13Corrections
None since publication.