Risk & Money Management
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 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 = \120$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 that maximises expected log-growth for a bet with win probability , loss probability , and payoff ratio (win = per unit staked, loss = 1 per unit). Start from the growth objective . (6 marks)
(b) A strategy wins of the time with an average win of and average loss of (so ). 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 . (3 marks)
(b) An account peaks at \80{,}000$62{,}000$. Compute the drawdown percentage. (3 marks)
(c) You set a daily loss limit (circuit breaker) at of a \50{,}0001%$. 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 , loss probability , and equal-sized bets, write the risk-of-ruin approximation style formula where is the edge and the number of units. Define and . (4 marks)
(b) A trader has edge (i.e. advantage of per unit) and capital of units. Estimate the risk of ruin. (3 marks)
(c) Explain out loud how reducing bet size (increasing ) 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 , but three are highly correlated (correlation ). Explain out loud why your effective risk is not simply , 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 , volatilities , and correlation . Show what happens to portfolio risk as . (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:
- 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 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: Differentiate and set to zero: Cross-multiply:
- 2 marks objective/derivative, 2 marks algebra, 2 marks final closed form. Second-derivative < 0 (concave) confirms max.
(b) : So full Kelly = 25% of equity. (3)
(c) Half-Kelly . (1) Reason: full Kelly maximises long-run growth but has large drawdowns and is highly sensitive to estimation error in ; fractional Kelly sacrifices a little growth for much lower volatility / drawdown. (2)
Question 3 (10 marks)
(a) Maximum drawdown: i.e. the largest peak-to-trough decline as a fraction of the running peak. (3)
(b) . (3)
(c) Daily limit =3\%\times50{,}000=\1{,}500=1%=$5001500/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) , where = the trader's edge/advantage per unit ( in a simple even-money model), and = number of betting units of capital (capital ÷ risk-per-bet). (4)
(b) : (3) (accept ~2%).
(c) Increasing (smaller bets per unit of capital) raises the exponent, driving toward exponentially — so with a positive edge, betting smaller dramatically cuts ruin probability. The 1–2% rule keeps large (50–100 units), making ruin negligible while preserving the edge. (3)
Question 5 (10 marks)
(a) With correlation , the three positions move together, so they act like one large position of . Effective risk nominal — but the simultaneous loss risk of the block is in one event, not diversified. Naive sum of understates the concentrated downside because correlated risks don't diversify away. (4)
(b) As : , which can reach if — 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 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 * factorMark 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)"}
]