When to Trade — Timing & Sessions
Level 3 — Production Paper (from-scratch derivations, code-from-memory, explain-out-loud)
Time limit: 45 minutes
Total marks: 60
Instructions: Show all working. Where code is requested, write it from memory (pseudocode or Python acceptable). "Explain out loud" prompts expect a clear structured verbal-style answer written in prose.
Question 1 — Session phases & liquidity map (10 marks)
From memory, derive a full intraday timeline for a regular US equity session (09:30–16:00 ET). For each phase — opening range, morning trend, midday lull, power hour, close — state (a) the approximate clock window, (b) expected relative liquidity/volatility, and (c) one behavioural reason why that phase looks the way it does. Present as a labelled table.
Question 2 — Opening-range gap & sizing math (12 marks)
A stock closed yesterday at \100=$104=$101.50$.
(a) Compute the opening-range height and express it as a percentage of the prior close. (3)
(b) A trader uses an opening-range breakout: entry on a break above the OR high, stop at the OR low. Compute the per-share risk and the reward-to-risk ratio if the profit target is \108$50{,}0001%$. Derive the maximum position size (shares). (3)
(d) Explain out loud why opening-range strategies deliberately wait for the first 15–30 minutes rather than trading the 09:30 print. (2)
Question 3 — Economic calendar & news-impact reasoning (10 marks)
(a) You are handed a raw economic-calendar row: CPI | Actual 3.8% | Forecast 3.5% | Previous 3.2%. Explain out loud how you read the "surprise" and predict the likely first-reaction direction for equities, and state the sign of the surprise. (5)
(b) Rank these by expected volatility impact (high→low) and justify each in one line: Fed rate decision, minor regional Fed survey, monthly CPI, a scheduled company dividend date. (5)
Question 4 — Expiry & volatility windows, code-from-memory (10 marks)
Write, from memory, a function is_high_risk_window(date, event_flags) that returns True when a date should be flagged as an elevated-volatility trading window. It must account for: monthly options expiry (third Friday), a fomc flag, and an earnings flag. Include brief comments explaining the why of each rule.
Question 5 — Overnight & gap risk quantification (10 marks)
A trader holds 300 shares bought at \500%2%$.
(a) Compute the dollar gap exposure on the position. (3)
(b) Estimate the dollar loss at a downside gap. (3)
(c) Explain out loud two structural reasons overnight risk cannot be managed with an intraday stop-loss. (4)
Question 6 — Times/days to avoid, synthesis (8 marks)
Construct a short "when NOT to trade" checklist of four distinct situations drawn from this chapter, and for each give the one-sentence mechanism (the why) that makes it hazardous for a discretionary intraday trader.
Answer keyMark scheme & solutions
Question 1 (10 marks)
| Phase | Window (ET) | Liquidity/Volatility | Why |
|---|---|---|---|
| Opening range | 09:30–10:00 | Highest volume, highest volatility | Overnight orders, gap resolution & news get absorbed; price discovery is violent. |
| Morning trend | 10:00–11:30 | High liquidity, directional | Institutions execute; trend from opening imbalance persists. |
| Midday lull | 11:30–14:00 | Lowest volume/volatility | Lunch, desks step back; fewer participants → choppy, whippy, false breaks. |
| Power hour | 14:00–15:30 | Volume rising, volatility increasing | Institutions reposition before close; MOC imbalances build. |
| Close | 15:30–16:00 | Very high volume | Market-on-close orders, index rebalancing, EOD settlement. |
Marking: ½ per correct window (2.5), ½ per correct liquidity (2.5), ½ per valid "why" (5). Award full for any reasonable equivalent windows.
Question 2 (12 marks)
(a) Height =104-101.50=\2.50=2.50/100=2.5%$. (1+1+1)
(b) Entry at OR high , stop at OR low → risk =104-101.50=\2.50=108-104=$4=4/2.5=1.6$. (2 for risk, 2 for R:R)
(c) Risk budget =1\%\times50000=\500=500/2.50=200$ shares. (1 budget +1 division +1 answer)
(d) The 09:30 print is noise — gap fill, overnight order flush and thin spreads make it unreliable; waiting 15–30 min lets a range form so the breakout has a defined level and confirmed liquidity/direction. (2)
Question 3 (10 marks)
(a) Surprise Actual Forecast → positive (hotter) surprise. Hotter-than-expected CPI implies stickier inflation → higher rate expectations → typically equities sell off on first reaction. Previous (3.2%) shows inflation accelerating, reinforcing the hawkish read. (2 surprise sign/value, 2 direction logic, 1 use of Previous)
(b) Ranking high→low:
- Fed rate decision — sets the discount rate for all assets, market-wide repricing.
- Monthly CPI — primary inflation driver of rate-path expectations.
- Minor regional Fed survey — narrow, low market weight, rarely moves index.
- Scheduled dividend date — mechanical, priced-in, ~zero surprise/volatility.
Marking: correct order 3 marks (2 if one swap), justifications 2 marks.
Question 4 (10 marks)
from datetime import date
def is_high_risk_window(d, event_flags):
# event_flags: dict like {"fomc": bool, "earnings": bool}
# Rule 1: monthly options expiry = 3rd Friday.
# Why: dealer gamma hedging + pinning + expiry unwinds spike volatility.
is_friday = (d.weekday() == 4) # Monday=0 ... Friday=4
third_week = 15 <= d.day <= 21 # 3rd Friday always falls 15th-21st
is_monthly_expiry = is_friday and third_week
# Rule 2: FOMC decision day.
# Why: rate decision repriced across all assets -> large directional swings.
is_fomc = event_flags.get("fomc", False)
# Rule 3: earnings for held name.
# Why: binary event -> large post-report gaps; intraday stops don't protect.
is_earnings = event_flags.get("earnings", False)
return is_monthly_expiry or is_fomc or is_earningsMarking: correct 3rd-Friday logic 4, fomc flag 2, earnings flag 2, comments/why 2.
Question 5 (10 marks)
(a) Position value =300\times50=\15{,}0001\sigma=2%0.02\times15000=$300$. (1+1+1)
(b) → loss =0.04\times15000=\600$. (3)
(c) Two structural reasons (2 each):
- Stops execute only during market hours; a gap opens past the stop, so the fill happens at the (much worse) opening price, not the stop price.
- The move happens with zero tradable liquidity overnight — you cannot exit between close and open regardless of price, so the risk is unhedgeable intraday.
Question 6 (8 marks)
Any four (2 marks each = mechanism + validity):
- Midday lull (11:30–14:00) — thin volume → false breakouts and whipsaws.
- Minutes around a major scheduled release (CPI/FOMC) — spreads blow out, spikes both ways, stops get run.
- First few seconds after 09:30 — chaotic price discovery, unreliable prints.
- Holding a name into earnings/overnight before an event — binary gap risk stops can't cover.
- Options expiry Friday / triple witching — pinning and hedging distort price.
[
{"claim":"OR height percent of prior close = 2.5%", "code":"height=104-101.5; pct=height/100*100; result=(height==2.5 and pct==2.5)"},
{"claim":"Reward-to-risk ratio = 1.6", "code":"risk=104-101.5; reward=108-104; rr=reward/risk; result=(rr==1.6)"},
{"claim":"Position size at 1% risk = 200 shares", "code":"budget=0.01*50000; shares=budget/2.5; result=(shares==200)"},
{"claim":"CPI surprise is +0.3 (hotter)", "code":"surprise=3.8-3.5; result=(abs(surprise-0.3)<1e-9 and surprise>0)"},
{"claim":"1-sigma gap exposure = 300 dollars, -2sigma loss = 600 dollars", "code":"val=300*50; s1=0.02*val; loss2=0.04*val; result=(s1==300 and loss2==600)"},
{"claim":"Third Friday always falls between day 15 and 21", "code":"import datetime as dt; ok=True;\nfor y in range(2020,2031):\n for m in range(1,13):\n d=dt.date(y,m,1);\n while d.weekday()!=4: d+=dt.timedelta(days=1)\n d+=dt.timedelta(days=14)\n if not (15<=d.day<=21): ok=False\nresult=ok"}
]