Level 3 — ProductionWhen to Trade — Timing & Sessions

When to Trade — Timing & Sessions

45 minutes60 marksprintable — key stays hidden on paper

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.Itgapsupandthefirst15minuteopeningrangeisHigh. It gaps up and the first 15-minute opening range is High =$104,Low, Low =$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.(4)(c)Theaccountis. **(4)** (c) The account is $50{,}000andriskpertradeiscappedatand risk per trade is capped at1%$. 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 \50overnight.Historyshowsovernightgapsforthisstockareroughlynormallydistributedwithmeanovernight. History shows overnight gaps for this stock are roughly normally distributed with mean0%andstandarddeviationand standard deviation2%$.

(a) Compute the 1σ1\sigma dollar gap exposure on the position. (3)
(b) Estimate the dollar loss at a 2σ-2\sigma 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.Percentofpriorclose. Percent of prior close =2.50/100=2.5%$. (1+1+1)

(b) Entry at OR high =104=104, stop at OR low =101.50=101.50 → risk =104-101.50=\2.50/share.Reward/share. Reward =108-104=$4.R:R. R:R =4/2.5=1.6$. (2 for risk, 2 for R:R)

(c) Risk budget =1\%\times50000=\500.Shares. Shares =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 =3.8%3.5%=+0.3%=3.8\%-3.5\%=+0.3\%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:

  1. Fed rate decision — sets the discount rate for all assets, market-wide repricing.
  2. Monthly CPI — primary inflation driver of rate-path expectations.
  3. Minor regional Fed survey — narrow, low market weight, rarely moves index.
  4. 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_earnings

Marking: correct 3rd-Friday logic 4, fomc flag 2, earnings flag 2, comments/why 2.


Question 5 (10 marks)

(a) Position value =300\times50=\15{,}000.. 1\sigma=2%0.02\times15000=$300$. (1+1+1)

(b) 2σ=4%-2\sigma=-4\% → 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):

  1. Midday lull (11:30–14:00) — thin volume → false breakouts and whipsaws.
  2. Minutes around a major scheduled release (CPI/FOMC) — spreads blow out, spikes both ways, stops get run.
  3. First few seconds after 09:30 — chaotic price discovery, unreliable prints.
  4. Holding a name into earnings/overnight before an event — binary gap risk stops can't cover.
  5. 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"}
]