4A.2 Support and resistance
Motivation
"Support" and "resistance" are prices where a fall or a rise has stopped before and is expected to stop again. As folklore this is unfalsifiable: any level eventually breaks and any level is sometimes respected. As a definition plus a null hypothesis it becomes testable, and there is one serious body of evidence (in foreign exchange) explaining why such levels can matter.
4A.2.1Defining a level#
Definition 4A.3swing pivots, confirmed
With half-width , bar is a swing high if and for , and a swing low if and for . A swing pivot at is known only at bar , its confirmation bar. (M04 · 4.1.2 flags marking pivots at as the commonest look-ahead bug in pattern code.)
Definition 4A.4level
Fix a tolerance in price units, typically a fraction of ATR (4A.7). At bar , collect the prices of all pivots confirmed by within a look-back window. Sort them and split the sorted list wherever two neighbours differ by more than (single-linkage clustering). Each cluster is a level; its price is the cluster mean and its strength the number of pivots in it. Variants weight pivots by the volume traded near them (a volume-at-price or volume profile level) or by recency.
This definition is computable (m04a_levels.levels_asof), has no look-ahead, and has three parameters (, , look-back). Each parameter you tune is another trial in the sense of M04 · 4.6.
4A.2.2Levels under the null#
What a random walk does near a level Before asking whether levels "work", compute what they do when nothing is there.
Proposition 4A.2touches and bounces under the null
Let the log price be with , and let a level sit at distance above .
(a) The probability that the price touches the level within time is .
(b) Conditional on a touch at the stopping time , for any the probability that the price next falls by (a "rejection") before rising by (a "break") is exactly .
Proof
(a) Reflection principle: for , . Put . (b) is a stopping time, so by the strong Markov property is a standard Brownian motion independent of . For a driftless Brownian motion started at 0, the probability of hitting before is (Proposition 4A.6 below with ).∎
Worked example 4A.1how often a round number gets "tested"
Nifty at 24,000, resistance claimed at the round number 24,500, daily volatility 1%. Then , and the probability of touching 24,500 within 10 trading days under a driftless random walk is . Half the time the level is "tested" within two weeks, and by (b), each test is a fair coin between "resistance held" and "breakout". A chart book full of levels that held is therefore no evidence: you must count the tests that failed, at levels chosen before the fact.
4A.2.3Evidence and mechanism#
The evidence
- Osler (2000), "Support for resistance: technical analysis and intraday exchange rates", Federal Reserve Bank of New York Economic Policy Review 6(2), 53–68. She took support and resistance levels that six firms published to their customers for the major currency pairs, and compared intraday exchange-rate behaviour at those levels with behaviour at 10,000 sets of artificial levels chosen at random. Published levels predicted intraday trend interruptions better than the random levels, the effect persisted for at least five business days after publication, and it varied across currencies and firms. The design is exactly Proposition 4A.2(b) turned into a test: compare the bounce rate at claimed levels with the bounce rate at arbitrary levels.
- Osler (2003), "Currency orders and exchange rate dynamics: an explanation for the predictive success of technical analysis", Journal of Finance 58(5), 1791–1819. Using about 9,700 stop-loss and take-profit orders at a large dealing bank (September 1999 to April 2000), she found that take-profit orders cluster at round numbers, and stop-loss orders cluster just beyond round numbers. Clustered take-profit orders are liquidity that absorbs a move, so trends tend to stall at round numbers; clustered stops are market orders that fire once a level is crossed, so moves accelerate after a break. These are the two chartist predictions, given a microstructure mechanism.
- Kavajecz and Odders-White (2004), "Technical analysis and liquidity provision", Review of Financial Studies 17(4), 1043–1071, find on NYSE limit-order-book data that support and resistance levels coincide with peaks in book depth. Technical levels are partly a map of where resting liquidity sits.
A minimal mechanism Suppose resting sell orders of total size sit at level , and net market buying arrives as a Brownian order flow. The price stops at until the cumulative net buying since arrival exceeds . If net order flow is a driftless Brownian motion with variance per unit time, the time spent pinned at before a break has the law of the first passage of that flow to , which is heavy-tailed (density , mean infinite). Depth turns a level into a place where price lingers, without any predictive content about the direction of the eventual exit. That is the logic of Proposition 4A.2(b) again, and it is why the clustering evidence predicts stalling and acceleration, not reversal.
Practitioner notes
- The Osler mechanism needs a reason for orders to cluster at a price: round numbers, the prior day's high and low, the opening range, a published level, a big option strike (M09A discusses pinning at option strikes on expiry day). Prefer levels with a mechanism to levels found by eye.
- Stops "just beyond" an obvious level are exactly where other traders' stops sit. A stop placed at 24,495 under support at 24,500 sits in the cluster that accelerates the break. Place stops where the thesis is wrong, at a distance set by volatility (4A.7), not at the most popular price.
- Test a level rule as Osler did: fix the level-generating algorithm in advance, compute the bounce rate at its levels and at random levels with the same distance distribution, and bootstrap the difference. Problem 4A.16 sizes such a test.