Support, Resistance & Price Action
Level 3 — Production (from-scratch derivations, code-from-memory, explain-out-loud) Time limit: 45 minutes Total marks: 60
Instructions: Show all derivations. Where code is asked, write it from memory (pseudocode or Python accepted). "Explain out loud" prompts require reasoning in full sentences, not one-liners.
Question 1 — Pivot Point Derivation from Scratch (12 marks)
A stock closes a session with:
- High
- Low
- Close
(a) From memory, write the formula for the classic (floor-trader) Pivot Point , and compute it. (2)
(b) Derive and compute the first support , first resistance , second support , and second resistance . State each formula before substituting. (6)
(c) Explain out loud why and are constructed as reflections around the pivot, and what trading meaning the pivot itself carries. (4)
Question 2 — Role Reversal & Retests (10 marks)
(a) Explain out loud the concept of role reversal of support and resistance. Use the idea of trapped market participants in your explanation. (4)
(b) A resistance level sits at \50$53$50.10$, holds, then rallies. Label each phase (breakout, retest, confirmation) against the price points and state what a trader concludes at each phase. (6)
Question 3 — Breakout vs False Breakout Classifier (12 marks)
You are given a resistance level R and a series of candles, each with high, low, close.
(a) From memory, write a function classify_breakout(candles, R) that returns "breakout", "false_breakout", or "no_break". Define your own rule (e.g. close beyond R = confirmed break; wick beyond but close back inside = false break). State your rules in comments. (8)
(b) Explain out loud two market reasons a false breakout occurs. (4)
Question 4 — Swing Highs / Swing Lows Algorithm (10 marks)
(a) Define, from scratch, what constitutes a swing high and a swing low using a lookback window of n bars on each side. (3)
(b) Write pseudocode/Python find_swing_highs(highs, n) that returns the indices of swing highs. (5)
(c) Explain why the last n bars can never yet be confirmed as swing points. (2)
Question 5 — Psychological Round Numbers & Demand Zones (8 marks)
(a) Explain out loud why round numbers (e.g. , ) tend to act as S/R. Give two behavioural causes. (4)
(b) Contrast a line of support with a demand zone. Why do professionals often prefer zones? (4)
Question 6 — Price Action Without Indicators (8 marks)
Explain out loud how a trader can define trend, support, resistance, and entry timing using only raw price action (no indicators). Structure your answer around: (i) swing structure for trend, (ii) horizontal levels for S/R, (iii) candle behaviour at levels for timing. (8)
Answer keyMark scheme & solutions
Question 1 (12 marks)
(a) Formula (1 mark), computation (1 mark):
(b) Each formula + value = 1.5 marks (×4 = 6):
Marking: correct formula (0.75) + correct value (0.75) each.
(c) (4 marks):
- and are reflections of the low and high across the pivot: and , i.e. equal distances above/below . (2)
- The pivot represents the "average traded price" / consensus value of the prior session; trading above it = intraday bullish bias, below = bearish bias. It acts as the intraday equilibrium/decision point. (2)
Question 2 (10 marks)
(a) (4 marks):
- Once a level breaks, participants who traded against the move are trapped (e.g. sellers at old resistance now in loss). (2)
- On a pullback, these trapped traders exit at breakeven (creating buying) while breakout traders add; supply exhausted at the old level now becomes demand → resistance becomes support. Symmetric logic for broken support becoming resistance. (2)
(b) (6 marks — 2 each):
- Breakout: price moves from ≤53 → conviction the level is broken; trader watches for follow-through. (2)
- Retest: pullback to 50) tests whether it now holds as support. (2)
- Confirmation: it holds (50, no close back below) and rallies → role reversal confirmed; higher-probability long entry with stop below $50. (2)
Question 3 (12 marks)
(a) (8 marks) — example solution:
def classify_breakout(candles, R):
# Rules:
# - A candle "pierces" R if its high > R.
# - Confirmed breakout: a candle CLOSES above R.
# - False breakout: high pierces R but close falls back <= R.
# - No break: high never exceeds R.
pierced = False
for c in candles:
if c['high'] > R:
pierced = True
if c['close'] > R:
return "breakout" # closed beyond -> confirmed
if pierced:
return "false_breakout" # wicked above but never closed above
return "no_break"Marking: clear stated rules (2); loop/pierce detection (2); breakout condition on close (2); false-breakout & no-break returns (2). Any consistent rule set earns full marks.
(b) (4 marks, 2 each):
- Liquidity grab / stop hunt: larger players push price beyond the level to trigger stop-loss and breakout orders, then reverse. (2)
- Lack of follow-through volume: insufficient real demand/supply to sustain the move; price returns inside the range. (2)
Question 4 (10 marks)
(a) (3 marks):
- A swing high at index : and for all . (1.5)
- A swing low at index : and for all . (1.5)
(b) (5 marks):
def find_swing_highs(highs, n):
swings = []
for i in range(n, len(highs) - n):
left = all(highs[i] > highs[i-k] for k in range(1, n+1))
right = all(highs[i] > highs[i+k] for k in range(1, n+1))
if left and right:
swings.append(i)
return swingsMarking: correct loop bounds n .. len-n (2); left comparison (1); right comparison (1); collect index (1).
(c) (2 marks): The last bars lack the required future bars to their right, so the right-side condition cannot be evaluated yet — a swing point is only confirmable in hindsight.
Question 5 (8 marks)
(a) (4 marks, 2 each):
- Anchoring / cognitive salience: round numbers are memorable reference prices; traders cluster orders and targets there. (2)
- Order clustering: institutions place limit/stop and options strike-related orders at round levels, creating real supply/demand and self-fulfilling reactions. (2)
(b) (4 marks):
- A line is a single price; a demand zone is a price range (e.g. the base a strong rally launched from). (2)
- Zones are preferred because exact turning prices rarely repeat; a zone accommodates noise/wicks, reduces premature stop-outs, and better reflects where accumulation actually occurred. (2)
Question 6 (8 marks)
Award ~2.5 per pillar (i)–(iii) + 0.5 coherence:
- (i) Trend via swing structure: higher highs + higher lows = uptrend; lower highs + lower lows = downtrend; ranging = flat swings. (≈2.5)
- (ii) S/R via horizontal levels: mark prior swing highs/lows and areas of repeated reaction; these become S/R and can role-reverse. (≈2.5)
- (iii) Timing via candle behaviour at levels: rejection wicks, engulfing candles, or holds at a level signal entries; breakout+retest confirms; stops placed beyond the level. (≈2.5)
- Coherent integration of all three without indicators. (0.5)
[
{"claim":"Pivot P = 140","code":"H,L,C=148,132,140; P=(H+L+C)/3; result=(P==140)"},
{"claim":"R1=148, S1=132","code":"H,L,C=148,132,140; P=(H+L+C)/3; R1=2*P-L; S1=2*P-H; result=(R1==148 and S1==132)"},
{"claim":"R2=156, S2=124","code":"H,L,C=148,132,140; P=(H+L+C)/3; R2=P+(H-L); S2=P-(H-L); result=(R2==156 and S2==124)"},
{"claim":"R1 and S1 are equidistant from P","code":"H,L,C=148,132,140; P=(H+L+C)/3; R1=2*P-L; S1=2*P-H; result=((R1-P)==(P-L) and (P-S1)==(H-P))"}
]