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.