How to Backtest the CRT Strategy (Candle Range Theory), Step by Step
How to backtest Candle Range Theory properly: the fields to log for a CRT trade, how to isolate the confirmation rule, how to segment results by edge and session, and the sample size a CRT test actually needs.
Most traders never actually test their strategy. They read about a setup, take a few live trades, and let a couple of wins or losses decide whether it "works." That's not data — it's a coin flip with commentary.
This guide is about testing Candle Range Theory (CRT) specifically. Not backtesting in general — there's a separate guide on the general method and one on the mistakes that wreck a test. This one is about the parts of a CRT test that are different from any other: which fields you have to log, which single variable is doing most of the work, and how to slice the results so the answer is actionable instead of just a win rate.
If you need the concept itself first, the CRT reference entry is the short version and CRT explained in plain English is the long one. From here on I'll assume you know the range → sweep → expansion sequence.
Why CRT needs a different test design
A generic backtest asks one question: does this setup make money? A CRT test has to answer that, but it can't get there in one step, because "CRT" isn't a single strategy — it's a family of them.
Change which timeframe sets the range and you have a different strategy. Change what counts as a confirmed sweep and you have a different strategy again. Require price to be in premium before you short and you've filtered out a third of your sample. Each of those is a separate testable rule, and traders routinely change two or three of them mid-test and then wonder why their numbers don't stabilise.
So the first job isn't testing. It's pinning the model down hard enough that the same chart would produce the same trade twice.
Step 1: Write the rules until they're unambiguous
Before you look at a single chart, write down the answers to these. Not in your head — in a document you can look at while you test.
- Which candle sets the range? Name the timeframe. "Higher timeframe" is not an answer.
- Which candle do you enter on? Name that timeframe too.
- Which ranges qualify? Every candle has a range. Most aren't worth trading. What makes one eligible — its size relative to recent candles, its position at a prior high or low, the session it formed in?
- What counts as a sweep? A wick through the edge? A close beyond it? By how much — any amount, or a minimum distance?
- What confirms the reversal? This is the big one. A rejection candle, a shift in lower-timeframe structure, a return to the swept edge? Be specific about how many candles you'll wait.
- Where exactly is the stop? Beyond the sweep's extreme, plus what buffer?
- What's the target? The opposite edge, equilibrium first then the opposite edge, or a fixed R multiple?
- What voids the setup before entry? A time limit, a close back inside, a competing setup in the other direction?
A useful test: hand that list to someone else and have them mark up a chart. If their trades match yours, the rules are tight enough to test. If they don't, you'd be measuring your own judgement, and judgement doesn't produce a number you can trust next month. If your rules don't survive that test yet, how to write trading rules you can actually backtest walks through the rewrite.
Step 2: Log the fields a CRT trade actually has
This is where most CRT tests quietly fail. People log entry, stop, target and outcome — the same four fields you'd log for any strategy — and end up with a win rate and nothing else. A win rate tells you whether to keep going. It doesn't tell you what to fix.
For a CRT test, log these on every single setup:
| Field | Why it earns its place |
|---|---|
| Date and time of the sweep | Lets you segment by session later |
| Range candle timeframe | Confirms you didn't drift mid-sample |
| Which edge was swept — high or low | The single most revealing split in the whole dataset |
| Price vs equilibrium at entry | Premium or discount; tests whether the midpoint filter is real |
| Sweep depth beyond the edge | Distinguishes a clean poke from a deep run |
| Candles from sweep to confirmation | Tells you if your confirmation window is too tight or too loose |
| Confirmation type | If you allow more than one, you need to know which fired |
| Outcome in R | Not dollars — R, so trades across instruments are comparable |
| Furthest favourable excursion (MFE) in R | Reveals targets you're leaving on the table |
| Furthest adverse excursion (MAE) in R | Reveals stops that are wider than they need to be |
| Did price reach the opposite edge? | The model's core claim, measured directly |
That last one deserves emphasis. CRT's central premise is that after a sweep, price expands to the opposite side of the range. You can measure that claim on its own, independently of whether your entry happened to be good. If the opposite edge is reached 60% of the time, the model is sound and your execution needs work. If it's reached 25% of the time, no entry technique is going to save you — and you've learned that in a week instead of a year.
MFE and MAE are the two fields traders skip and then wish they had. Together they tell you whether your losses were near-misses or clean invalidations, and whether your winners ran well past your target before you closed them. Both are fixable problems, but only if they're in the log.
Step 3: Replay it candle by candle
Step forward one candle at a time so you only ever see what you'd have seen live. No scrolling ahead, no hindsight.
This matters more for CRT than for most models, because the entire setup hinges on a moment of genuine ambiguity: at the instant of the sweep, you cannot know whether it's a liquidity grab or a real breakout. That uncertainty is the strategy. If you can see the next three candles while you're deciding, you're not testing CRT — you're testing your ability to read a chart you've already read, and it will hand you a win rate you can never reproduce.
Replay is also the only honest way to log the sweep-to-confirmation field, because you have to actually sit through the wait to know how long it was.
You can put in that screen time in the CRT strategy backtester for free — it steps bar by bar across real historical data, so the next candle stays hidden until you commit.
Step 4: Test one variable at a time
Once you have a baseline sample, the temptation is to change five things at once because the results were mediocre. Don't. Change one rule, re-run, compare.
The variable worth isolating first is almost always the confirmation rule, because it's where the two failure modes live. Confirm too loosely and you're entering on sweeps that were real breakouts, which produces a stream of full-stop losses. Confirm too strictly and you miss the entries where price reversed immediately and never came back — the best trades in the sample.
Run the same set of ranges with a tight confirmation and a loose one and compare not just win rate but how many setups each version even produced. A rule that wins 60% on 40 trades may well be worse than one that wins 45% on 160.
The second variable worth isolating is the equilibrium filter — only shorting sweeps of the high while price is in premium, only buying sweeps of the low while in discount. It's widely repeated as a rule and it's cheap to test, because you already logged the field. Filter your existing sample instead of running a new one.
Step 5: Segment the results — this is where the answer is
Aggregate numbers hide almost everything useful. With the fields above, slice your sample at least four ways:
By swept edge. Sweeps of the high and sweeps of the low often behave completely differently on the same instrument, especially on indices with a long-run upward drift. If one side carries the whole edge, you've just halved your workload and doubled your quality.
By session. A sweep during a kill zone is a different event from a sweep in thin Asian-session liquidity — there's real volume behind one and not the other. Segment by the session the sweep happened in. If the edge concentrates in one window, you have a schedule as well as a strategy. The session and kill zone clock converts those windows to your own timezone.
By position relative to equilibrium. This directly tests the premium/discount filter rather than assuming it.
By sweep depth. Group shallow pokes against deep runs. Deep sweeps often mean genuine displacement in the other direction; shallow ones are more often the classic trap. That split alone can turn an unprofitable sample into a profitable subset.
Segmenting is also how a "failed" test becomes a strategy. A model that's flat overall but strongly positive on sweeps of the low, during the New York session, from discount, isn't a failure — it's a specification. The aggregate number was hiding it.
The obvious warning: every extra slice shrinks your sample and raises the odds you're staring at noise. Which is the next problem.
How big does a CRT sample need to be?
Bigger than you want it to be, and the reason is specific to CRT: setup frequency is low. If your range candle is a daily, one instrument gives you at most one setup per day, and once you apply an eligibility filter it's realistically two or three a week. A hundred setups is most of a year on a single market.
The general guidance on sample size is in how many backtests before trusting a strategy. The CRT-specific version:
- Under 30 setups — you know nothing. Genuinely nothing. A run of five wins is unremarkable at any win rate.
- 50 to 100 — you can see whether the opposite edge gets reached often enough for the premise to hold. Treat the win rate as a rough range, not a number.
- 200 or more — segmentation starts to mean something, because each slice still has enough trades in it to matter.
Two ways to get there faster without cheating. Test the same rules across several instruments — the markets pages cover indices, majors, gold and crypto, and a model that only works on one of them is a fact worth knowing early. Or drop to a lower range timeframe, where a 4-hour range gives you six times the setups a daily does. Just don't mix them in one sample and call it 200 trades.
What you cannot do is run 30 setups, get a good number, and treat it as proof. That's not a small sample producing a rough answer — it's a small sample producing a random one. If you want the number rather than the rule of thumb, put your win rate and average R into the backtest sample size calculator — it will tell you how many CRT setups your particular edge needs before the result clears zero, and whether the sample you already have does.
Reading the result honestly
You'll finish with one of three outcomes.
It works. Positive expectancy across a large enough varied sample. Now the job is trusting it through the drawdowns, which is much easier when you already know from the data how long a losing streak can run at your win rate.
It works in a subset. The most common and most useful result. Write the subset into the rules and re-test it as its own model on fresh data. Be honest that a filter found by searching your own sample needs confirming on data you didn't search.
It doesn't work. Before discarding it, check whether the model failed or your entry did. If the opposite edge is being reached at a good rate but you're losing, the premise is fine and the problem is your confirmation, stop placement or timing. That's a fixable problem. If the opposite edge isn't being reached, the premise doesn't hold on that instrument and timeframe, and no amount of entry tuning will change it.
Run the numbers before you commit either way: a risk/reward calculator will tell you the win rate your average setup needs to break even, which is the bar your results have to clear.
Turn testing into a habit
A backtest isn't a one-time exam — it's how you build conviction. The traders who trust their setup under pressure are the ones who've already watched it play out hundreds of times in replay. When a losing streak hits live, they know it's variance rather than a broken edge, because the data told them what to expect.
That's the whole point of testing before you trade: you stop guessing and start knowing.
FAQ
How many trades do I need to backtest CRT? At least 50 to 100 setups to judge whether the premise holds, and 200 or more before you segment by session or swept edge. CRT has low setup frequency — a daily range candle produces at most one setup per day per instrument — so reaching a useful sample usually means testing across several markets or dropping to a lower range timeframe.
What should I record for each CRT trade? Beyond entry, stop, target and outcome in R: which edge was swept, whether price was in premium or discount at entry, how deep the sweep went past the edge, how many candles passed before confirmation, the session it happened in, and whether price ultimately reached the opposite edge of the range. Those fields are what let you diagnose a bad result instead of just observing it.
Can I backtest CRT on TradingView? You can step through history with bar replay, but you have to log every trade manually and it's easy to peek at the next candle. Any tool works as long as it hides future price and you record the CRT-specific fields — the discipline matters far more than the software.
What's the most common mistake when backtesting CRT? Changing the rules mid-sample. Because CRT has several tunable parts — range timeframe, sweep definition, confirmation, equilibrium filter — it's easy to adjust one halfway through and end up with a sample that measures two different strategies. Fix the rules, run the whole sample, then change exactly one thing and re-run.
How do I know if CRT itself works, or just my entry? Measure them separately. Log whether price reached the opposite edge of the range on every setup, regardless of whether your trade won. If the opposite edge is reached often but you're still losing, the model holds and your entry, stop or timing is the problem. If it isn't reached, the premise doesn't hold in that market and no entry technique will fix it.
Should I backtest CRT on one market or several? Several, but keep the samples separate. Running the same rules across indices, majors, gold and crypto tells you whether you've found a real behaviour or a quirk of one instrument. Pooling them into a single sample hides exactly that difference.
Does the equilibrium (50%) filter actually improve results? That's an empirical question about your market and timeframe, not a universal rule — which is why it's worth logging premium/discount on every setup. Once it's in the log you can filter your existing sample both ways and compare, without running a second test.
Backtest it yourself — free.
Replay real market history candle by candle across 38 markets. No card required.
Start free →Keep reading
How Long Does It Take to Backtest a Strategy?
The honest arithmetic of manual backtesting: why most of the hours go on candles where nothing happens, and the three levers that actually cut them down.
How to Backtest a Trading Strategy (The Complete Method)
A complete, honest method for backtesting a trading strategy by hand — writing testable rules, choosing a sample, replaying bar by bar, logging trades, and reading the result without fooling yourself.
What to Log in a Trading Journal (The Fields That Actually Change Anything)
Most trading journals record what happened and change nothing. The fields that actually improve your trading — R, MFE, MAE, skipped setups, rule adherence — and how to read them.