What makes a support or resistance level real?
A level is real to the extent that a large number of participants can see it and would act at it, which in practice means it has to be derivable by a simple rule rather than by judgement.
That is a stricter standard than it sounds. A trend line drawn through two points has infinite alternatives; a horizontal level at a swing high has one. The horizontal level is testable and the trend line is an argument, which is why almost all rigorous work on levels uses horizontals.
The rule also has to be causal. A swing high identified using bars that came after it is not available at the time those earlier bars were being traded, so a backtest that uses it is quietly using the future. The fix is to require confirmation — a swing high is only a level once N bars have closed below it — and to accept that this delays every level by N bars, including in the test.
Finally, the rule should say when a level dies. Levels that never expire accumulate until the chart is a grid and every price is near one, at which point the concept has stopped distinguishing anything.
How do you backtest support and resistance without hindsight?
Generate the levels programmatically as the test walks forward, so that at every bar the set of active levels contains only what was derivable from bars already closed.
This is the single most important structural decision in level testing, and it is the one most spreadsheet-based analyses get wrong. Computing all swing points across the whole dataset first and then walking through it is convenient and invalid, because the level list at bar 500 will contain levels that were not identifiable until bar 900.
With the walk-forward generation in place, the measurement is simple. For each level, record every time price came within a defined proximity, and grade what happened next over a fixed horizon: rejected, broken, or neither within the window. The three-way grade matters — a two-way grade that quietly drops inconclusive cases will report a much cleaner result than reality supports.
Then compare against a null. Run the same measurement against levels drawn at random prices in the same range. If a randomly placed line rejects price about as often as a swing high does, the structure was not contributing anything, and the apparent effect was a property of how often price turns around in general.
Does a level get stronger or weaker with each touch?
The conventional claim is that levels strengthen with each successful test, and the opposing claim is that each test consumes the orders that made the level meaningful. Both are stated confidently in trading education, and they cannot both be right, which is a good sign that the question deserves measurement rather than assertion.
The measurable version of the question is straightforward. Bucket every approach by how many prior touches the level had, and compare rejection rates across buckets while holding everything else constant. The comparison has to control for how much time has passed as well, because an old level with five touches differs from a fresh one in two ways at once.
In our own testing of level behaviour, the more consistent pattern was about freshness rather than touch count — recent structure behaved differently from structure that had been sitting on the chart for a long time. We treat that as a working finding rather than a law, and it is one of several reasons the platform grades levels by age and by what has happened to them since they formed.
The practical takeaway is not to adopt either slogan. It is to stop treating 'the level has held three times' as evidence of anything until you have measured whether the third hold behaved differently from the first.
How close is close enough to a level?
Proximity has to be defined as a fraction of current volatility rather than a fixed pip distance, because a twenty-pip approach means something entirely different on a quiet day than during a volatile session.
The usual approach is to express the zone in ATR: price is considered to be interacting with the level when it comes within some multiple of the average true range. This makes the definition portable across instruments, which matters if you intend to apply the same rule to EUR/USD and to gold.
The width of the zone is itself a parameter, and a consequential one. Too narrow and you miss most genuine interactions; too wide and the zone swallows so much price action that everything is near a level. Because it is a parameter, it has to be counted as one — testing five widths and reporting the best is a search.
A useful discipline is to fix the width using one part of the history and never adjust it again. The temptation to widen the zone slightly because it improves the numbers is exactly the mechanism by which a level study becomes a curve fit.
Should you trade the bounce or the break?
Both are testable strategies with different characteristics, and the honest answer is that the choice should follow the measurement on your instrument and timeframe rather than a general preference.
Trading the bounce means entering as price rejects the level, with the stop beyond it. These trades tend to have a higher hit rate and a smaller average win, and they suffer badly when a level finally gives way — which every level eventually does.
Trading the break means entering as price closes through the level, with the stop back inside. These tend to have a lower hit rate and larger wins, and they suffer from false breaks, which are common enough that a naive break strategy usually needs a filter to be viable at all.
The reason to test rather than argue is that the two are not symmetrical across market conditions. Bounce trades do better in ranges; break trades do better in trends; and a strategy tested only in one regime has never met the other. Any comparison that does not span both is describing a period rather than a method.