Level 3 — ProductionRisk & Money Management

Risk & Money Management

45 minutes60 marksprintable — key stays hidden on paper

Chapter: 4.7 Risk & Money Management Level: 3 — Production (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 (Python-style pseudocode accepted if syntax is consistent). Round money to the nearest whole unit unless told otherwise.


Question 1 — Position Sizing from Stop Distance (10 marks)

You run a 50,00050{,}000 account and follow the 1% risk-per-trade rule.

(a) State the general formula for position size (shares) in terms of account equity, risk fraction, entry price, and stop price. (3 marks)

(b) You buy a stock at entry = \120withastopatwith a stop at$114$. Compute your dollar risk, the per-share risk, and the number of shares you may buy. (4 marks)

(c) Explain out loud (in 2–3 sentences) why sizing off stop distance rather than a fixed share count keeps risk constant across trades. (3 marks)


Question 2 — Kelly Criterion Derivation (12 marks)

(a) Derive the Kelly fraction ff^* that maximises expected log-growth for a bet with win probability pp, loss probability q=1pq=1-p, and payoff ratio bb (win = bb per unit staked, loss = 1 per unit). Start from the growth objective G(f)=pln(1+bf)+qln(1f)G(f)=p\ln(1+bf)+q\ln(1-f). (6 marks)

(b) A strategy wins 55%55\% of the time with an average win of 1.5R1.5R and average loss of 1R1R (so b=1.5b=1.5). Compute the full-Kelly fraction. (3 marks)

(c) State what half-Kelly would be here and give one reason practitioners prefer fractional Kelly. (3 marks)


Question 3 — Maximum Drawdown & Daily Loss Limits (10 marks)

(a) Define maximum drawdown precisely as a formula over an equity curve EtE_t. (3 marks)

(b) An account peaks at \80{,}000thenfallstothen falls to$62{,}000$. Compute the drawdown percentage. (3 marks)

(c) You set a daily loss limit (circuit breaker) at 3%3\% of a \50{,}000account,andeachtraderisksaccount, and each trade risks1%$. How many full losing trades trigger the halt? Explain out loud why a daily limit matters beyond per-trade sizing. (4 marks)


Question 4 — Risk of Ruin (10 marks)

(a) For a simplified fixed-fraction model with win probability pp, loss probability qq, and equal-sized bets, write the risk-of-ruin approximation R=(q/p)R = \left(\frac{q/p \cdot \dots}{}\right) style formula R=(1A1+A)UR=\left(\frac{1-A}{1+A}\right)^{U} where AA is the edge and UU the number of units. Define AA and UU. (4 marks)

(b) A trader has edge A=0.1A=0.1 (i.e. advantage of 10%10\% per unit) and capital of U=20U=20 units. Estimate the risk of ruin. (3 marks)

(c) Explain out loud how reducing bet size (increasing UU) affects risk of ruin, and why this connects to the 1–2% rule. (3 marks)


Question 5 — Portfolio Exposure & Correlation Risk (10 marks)

(a) You hold 4 positions each risking 1%1\%, but three are highly correlated (correlation 1\approx 1). Explain out loud why your effective risk is not simply 4%4\%, and estimate the effective risk if the three correlated positions behave as one. (4 marks)

(b) Write the formula for the variance of a two-asset position with weights w1,w2w_1,w_2, volatilities σ1,σ2\sigma_1,\sigma_2, and correlation ρ\rho. Show what happens to portfolio risk as ρ1\rho \to -1. (4 marks)

(c) State one hedging instrument you could use to reduce net long exposure and why it lowers portfolio variance. (2 marks)


Question 6 — Code From Memory: Dynamic Sizing (8 marks)

Write a function position_size(equity, risk_pct, entry, stop) that returns the integer number of shares to trade, and a helper adjust_risk(base_risk, win_streak, loss_streak) that scales risk up on wins and down on losses (size up/down with performance). Include guard against division by zero and negative sizes. (8 marks)


Answer keyMark scheme & solutions

Question 1 (10 marks)

(a) Position size: Shares=Equity×Risk fractionEntryStop\text{Shares} = \frac{\text{Equity} \times \text{Risk fraction}}{|\text{Entry} - \text{Stop}|}

  • 1 mark numerator (dollar risk), 1 mark denominator (per-share risk), 1 mark correct assembly.

(b)

  • Dollar risk = 50{,}000 \times 0.01 = \500$. (1)
  • Per-share risk = 120 - 114 = \6$. (1)
  • Shares =500/6=83.3383= 500 / 6 = 83.33 \Rightarrow 83 shares (round down to not exceed risk). (2)

(c) Sizing off stop distance means a wider stop → fewer shares, a tighter stop → more shares, so the dollar loss if stopped out is always the fixed $500 (1% of equity). Fixed share count would let dollar risk swing wildly with volatility/stop width. (3 for the constant-dollar-risk reasoning)


Question 2 (12 marks)

(a) Derivation: G(f)=pln(1+bf)+qln(1f)G(f)=p\ln(1+bf)+q\ln(1-f) Differentiate and set to zero: G(f)=pb1+bfq1f=0G'(f)=\frac{pb}{1+bf}-\frac{q}{1-f}=0 Cross-multiply: pb(1f)=q(1+bf)pb(1-f)=q(1+bf) pbpbf=q+qbfpb - pbf = q + qbf pbq=pbf+qbf=bf(p+q)=bfpb - q = pbf + qbf = bf(p+q)=bf f=pbqb=p(b+1)1bf^*=\frac{pb-q}{b}=\frac{p(b+1)-1}{b}

  • 2 marks objective/derivative, 2 marks algebra, 2 marks final closed form. Second-derivative < 0 (concave) confirms max.

(b) p=0.55, q=0.45, b=1.5p=0.55,\ q=0.45,\ b=1.5: f=0.55(1.5)0.451.5=0.8250.451.5=0.3751.5=0.25f^*=\frac{0.55(1.5)-0.45}{1.5}=\frac{0.825-0.45}{1.5}=\frac{0.375}{1.5}=0.25 So full Kelly = 25% of equity. (3)

(c) Half-Kelly =0.125=12.5%=0.125=12.5\%. (1) Reason: full Kelly maximises long-run growth but has large drawdowns and is highly sensitive to estimation error in p,bp,b; fractional Kelly sacrifices a little growth for much lower volatility / drawdown. (2)


Question 3 (10 marks)

(a) Maximum drawdown: MDD=maxt(maxstEsEtmaxstEs)\text{MDD}=\max_{t}\left(\frac{\max_{s\le t}E_s - E_t}{\max_{s\le t}E_s}\right) i.e. the largest peak-to-trough decline as a fraction of the running peak. (3)

(b) 80,00062,00080,000=18,00080,000=0.225=22.5%\dfrac{80{,}000-62{,}000}{80{,}000}=\dfrac{18{,}000}{80{,}000}=0.225=22.5\%. (3)

(c) Daily limit =3\%\times50{,}000=\1{,}500;eachloss; each loss =1%=$500;; 1500/500=3$ losing trades trigger the halt. (2) Out-loud: per-trade sizing controls one trade, but a bad day (tilt, correlated stops, news) can stack many losses; a daily circuit breaker caps cumulative damage and forces a cooldown before emotional revenge-trading compounds losses. (2)


Question 4 (10 marks)

(a) R=(1A1+A)UR=\left(\dfrac{1-A}{1+A}\right)^{U}, where AA = the trader's edge/advantage per unit (A=pqA=p-q in a simple even-money model), and UU = number of betting units of capital (capital ÷ risk-per-bet). (4)

(b) A=0.1, U=20A=0.1,\ U=20: R=(0.91.1)20=(0.81818)200.01841.8%R=\left(\frac{0.9}{1.1}\right)^{20}=(0.81818\ldots)^{20}\approx 0.0184 \approx 1.8\% (3) (accept ~2%).

(c) Increasing UU (smaller bets per unit of capital) raises the exponent, driving RR toward 00 exponentially — so with a positive edge, betting smaller dramatically cuts ruin probability. The 1–2% rule keeps UU large (50–100 units), making ruin negligible while preserving the edge. (3)


Question 5 (10 marks)

(a) With correlation 1\approx 1, the three positions move together, so they act like one large position of 3%3\%. Effective risk 3%(correlated block)+1%(independent)=4%\approx 3\% (\text{correlated block}) + 1\% (\text{independent}) = 4\% nominal — but the simultaneous loss risk of the block is 3%3\% in one event, not diversified. Naive sum of 4%4\% understates the concentrated downside because correlated risks don't diversify away. (4)

(b) σp2=w12σ12+w22σ22+2w1w2ρσ1σ2\sigma_p^2 = w_1^2\sigma_1^2 + w_2^2\sigma_2^2 + 2w_1w_2\rho\sigma_1\sigma_2 As ρ1\rho\to-1: σp2(w1σ1w2σ2)2\sigma_p^2 \to (w_1\sigma_1 - w_2\sigma_2)^2, which can reach 00 if w1σ1=w2σ2w_1\sigma_1=w_2\sigma_2 — perfect hedge, risk cancels. (4)

(c) Buy index put options / short index futures (or an inverse ETF) against a long book: the hedge has negative correlation to the long exposure, reducing the cross term 2w1w2ρσ1σ22w_1w_2\rho\sigma_1\sigma_2 and thus portfolio variance. (2)


Question 6 (8 marks)

def position_size(equity, risk_pct, entry, stop):
    risk_dollars = equity * risk_pct           # e.g. risk_pct = 0.01
    per_share = abs(entry - stop)
    if per_share == 0:                         # guard div-by-zero
        return 0
    shares = int(risk_dollars // per_share)    # round down
    return max(shares, 0)                       # no negative sizes
 
def adjust_risk(base_risk, win_streak, loss_streak):
    # size up with wins, down with losses; clamp to sane band
    factor = 1 + 0.1 * win_streak - 0.2 * loss_streak
    factor = max(0.25, min(factor, 2.0))       # floor/ceiling
    return base_risk * factor

Mark scheme: correct dollar-risk & per-share (2), div-by-zero guard (1), int floor (1), non-negative guard (1), adjust scales up on wins / down on losses (2), clamping band (1).

[
  {"claim":"Position size for Q1b is 83 shares", "code":"risk=50000*0.01; per=120-114; shares=int(risk//per); result=(shares==83)"},
  {"claim":"Full Kelly fraction is 0.25 for p=0.55,b=1.5", "code":"p=Rational(55,100); q=1-p; b=Rational(3,2); f=(p*b-q)/b; result=(f==Rational(1,4))"},
  {"claim":"Drawdown from 80000 to 62000 is 22.5%", "code":"dd=(80000-62000)/80000; result=(dd==Rational(225,1000))"},
  {"claim":"Daily 3% limit / 1% risk = 3 losing trades", "code":"n=(0.03*50000)/(0.01*50000); result=(int(n)==3)"},
  {"claim":"Risk of ruin approx 1.8% for A=0.1,U=20", "code":"R=(Rational(9,10)/Rational(11,10))**20; result=(abs(float(R)-0.0184)<0.002)"}
]