Backtest evidence

Does a horizontal line at a price that has already held work, and does a line with more touches hold better?

Do Support and Resistance Lines Work? 5,184 Backtests

Finding

The touch count did not matter. Splitting the bounce signals by how many times the line had already held gives 50.13% for three touches, 49.24% for four and 50.10% for five or more on the 15-minute long side. Of the four settings that define what counts as a line, the touch count moved the median year least (357.9 pips for the bounce reading, against 1,000.9 for the tolerance band). Price sits inside a line's tolerance on 41.40% to 65.75% of bars, so being at a level is not a special state. The break reading wins 25.45% to 31.08% of its trades and left 58 of 108 settings profitable in both years on the hourly chart; the bounce wins 38.26% to 42.80% and left 19.

Key results

Touch count against the bounce rate
Three touches 50.13%, four 49.24%, five or more 50.10% on the 15-minute long side
Which of the four settings mattered least
The touch count, moving the median year by 357.9 pips
Bars where price sits inside a line's tolerance
41.40% to 65.75%
Settings profitable in both years
Break 58 of 108 hourly; bounce 19 of 108
Win rates
Break 25.45% to 31.08%, bounce 38.26% to 42.80%
Against a reshuffled series
The real series won on hit rate in 5 of 6 cells
Engine fixes
The condition had never taken a single trade, for two separate reasons

Scope

  • Instrument: USD/JPY
  • Period: 2024-01-01 to 2025-12-31, with 2025 also split in halves
  • Timeframes: 15-minute, 1-hour, 4-hour
  • Conditions: 2 readings x 108 definitions of a line

Method

The engine's srLevel condition confirms swing highs and lows, clusters prices within an ATR-multiple tolerance, and offers a cluster as a line once its touch count reaches a minimum. Two readings: bounce (reached the line and closed back on its own side) and break (closed through the line it was under). Swept: lookback 100, 200 and 400; swing strength 2, 3, 5 and 8; tolerance 0.25, 0.5 and 1.0 ATR; minimum touches 2, 3 and 4. 2 readings x 3 x 4 x 3 x 3 = 216 settings, on three timeframes, four windows and two spreads (0.3 pips and 0) = 5,184 runs. Two controls: the same test run at prices 1.5, 2 and 3 ATRs away from the line, and the same calculation on a series whose close-to-close changes were reshuffled. Every figure is checked in research/sr-verify.run.ts.

Limitations

  • One pair over two years.
  • Fills at the close, a fixed spread and no slippage, so live results will differ.
  • The condition draws nothing on the chart; these are lines inside the backtester.
  • The offset control matches the distance at the moment of the signal but fires on 7.8% to 41.6% as many bars.