Level 5 — MasteryTrading vs Investing & Styles

Trading vs Investing & Styles

90 minutes60 marksprintable — key stays hidden on paper

Level 5 — Mastery (Cross-Domain: Finance + Mathematics + Coding) Time Limit: 90 minutes Total Marks: 60

Instructions: Answer all three questions. Show full working. Use ...... notation for mathematics. Code may be in Python-like pseudocode or valid Python. Justify all modelling assumptions.


Question 1 — Style Selection Under Capital & Time Constraints (20 marks)

A retail trader has ₹5,00,000 capital and can dedicate only 45 minutes per day (before market open). Broker charges a round-trip cost of 0.05% of turnover per trade. Consider four styles with the following per-trade statistics:

Style Trades/day Avg gross edge/trade Hold time
Scalping 40 0.08% seconds–minutes
Intraday 4 0.35% hours
Swing 0.2 (1 per 5 days) 3.0% days–weeks
Positional 0.05 (1 per 20 days) 9.0% weeks–months

(a) Define net edge per trade as gross edge minus round-trip cost. Compute the net edge for each style and identify which styles are rendered unprofitable by costs. (6 marks)

(b) Assuming full capital deployed each trade and net edges compound multiplicatively over trades, derive an expression for the expected daily net return rdr_d for each style. Compute rdr_d numerically for Scalping and Intraday. (6 marks)

(c) Given the trader's time constraint (45 min/day, pre-market only), argue rigorously which single style is feasible AND profitable. Reference both the quantitative results and the qualitative demands of each style. (5 marks)

(d) State the personality/discipline mismatch risk if this trader forced themselves into scalping despite the time constraint. (3 marks)


Question 2 — Mean-Reversion vs Momentum: Build & Prove (22 marks)

Consider a de-trended price series modelled as an Ornstein–Uhlenbeck (mean-reverting) process in discrete form:

xt+1=xt+θ(μxt)+εt,εtN(0,σ2)x_{t+1} = x_t + \theta(\mu - x_t) + \varepsilon_t, \qquad \varepsilon_t \sim \mathcal{N}(0, \sigma^2)

with θ=0.3\theta = 0.3, μ=100\mu = 100, σ=2\sigma = 2.

(a) Prove that the expected value E[xt+1xt]\mathbb{E}[x_{t+1}\mid x_t] moves toward μ\mu whenever 0<θ<10 < \theta < 1, and state the condition on θ\theta for the deterministic part to be stable (non-oscillating, non-diverging). (6 marks)

(b) A mean-reversion trader buys when xt<μkσx_t < \mu - k\sigma and sells at μ\mu. A momentum trader buys when xt>μ+kσx_t > \mu + k\sigma expecting continuation. Using the OU structure, explain mathematically why the mean-reversion signal has positive expected edge on this series while the momentum signal has negative expected edge. (6 marks)

(c) Write a coded backtest (Python) that: simulates N=10000N=10000 steps, applies the mean-reversion rule with k=1k=1, and returns the average per-trade return. Your code must define an entry/exit loop. (6 marks)

(d) Explain how the SAME market, in a trending regime (μ\mu itself drifting upward at rate gg per step), would flip the sign of edge — favouring momentum. Give the modified drift equation. (4 marks)


Question 3 — Realistic Return Expectations & Risk of Ruin (18 marks)

A day-trader claims a system with win rate p=0.55p = 0.55, average win =1R= 1R, average loss =1R= 1R, risking a fixed fraction f=0.02f = 0.02 of capital per trade.

(a) Compute the expectancy per trade in RR-multiples and state whether the edge is positive. (4 marks)

(b) Using the Kelly criterion for a symmetric 1:11:1 payoff, f=2p1f^* = 2p - 1, compute the optimal fraction. Comment on why the trader's chosen f=0.02f = 0.02 is far below Kelly and why that is rational for realistic return targets. (5 marks)

(c) The trader claims "I will double my account every month (≈20 trading days) with this system." Using expectancy and f=0.02f=0.02, compute the expected geometric monthly growth and evaluate the realism of the doubling claim. (6 marks)

(d) Contrast the realistic annual return expectation of this active day-trader with a long-term index investor, in one paragraph, citing the trade-off between effort, drawdown risk, and consistency. (3 marks)


END OF PAPER

Answer keyMark scheme & solutions

Question 1

(a) Net edge = gross edge − round-trip cost (0.05%) (6 marks)

  • Scalping: 0.08%0.05%=0.03%0.08\% - 0.05\% = 0.03\% ✓ (1)
  • Intraday: 0.35%0.05%=0.30%0.35\% - 0.05\% = 0.30\% ✓ (1)
  • Swing: 3.0%0.05%=2.95%3.0\% - 0.05\% = 2.95\% ✓ (1)
  • Positional: 9.0%0.05%=8.95%9.0\% - 0.05\% = 8.95\% ✓ (1)

Rendered unprofitable: None are outright negative, BUT scalping's net edge (0.03%) is razor-thin — the slightest slippage/latency makes it negative. Award (2) for identifying scalping as marginal/fragile (cost consumes 62.5% of gross edge). (2)

(b) Expected daily net return (6 marks)

Compounding nn trades each with net edge ee: (1+e)n1ne(1+e)^n - 1 \approx n\cdot e for small ee. Full derivation credit (2).

  • Scalping: rd=(1.0003)4010.01207=1.207%r_d = (1.0003)^{40} - 1 \approx 0.01207 = 1.207\%/day ✓ (2)
  • Intraday: rd=(1.003)410.01205=1.205%r_d = (1.003)^{4} - 1 \approx 0.01205 = 1.205\%/day ✓ (2)

(Note: nearly identical daily return — but achieved with radically different effort.)

(c) Feasible & profitable style (5 marks)

  • Scalping requires continuous full-session screen presence, instant execution, low-latency infrastructure — impossible in 45 min pre-market. (2)
  • Intraday needs monitoring through the day → also violates constraint. (1)
  • Swing trading fits: entries/reviews done pre-market in ~45 min; positions held days needing no intraday monitoring; net edge 2.95% is robust to costs. Swing is the answer. (2)

(d) Personality/discipline mismatch (3 marks) Forcing scalping under a time constraint means entering/exiting hurriedly without focus → execution errors, missed stops, overtrading, and emotional tilt. Scalping demands sustained concentration and rapid decision-making that a 45-min distracted window cannot supply, converting a thin +0.03% edge into net losses. (3)


Question 2

(a) Proof of mean reversion (6 marks)

E[xt+1xt]=xt+θ(μxt)=(1θ)xt+θμ\mathbb{E}[x_{t+1}\mid x_t] = x_t + \theta(\mu - x_t) = (1-\theta)x_t + \theta\mu Distance to mean: E[xt+1]μ=(1θ)(xtμ)\mathbb{E}[x_{t+1}] - \mu = (1-\theta)(x_t - \mu). (3) Since 0<θ<10<(1θ)<10<\theta<1 \Rightarrow 0<(1-\theta)<1, the gap shrinks by factor (1θ)(1-\theta) → moves toward μ\mu. (2) Stability condition: need 1θ<10<θ<2|1-\theta|<1 \Rightarrow 0<\theta<2; for non-oscillating (monotone) decay require 0<θ<10<\theta<1. (1)

(b) Sign of edge (6 marks) Mean-reversion buy at xt=μkσx_t = \mu - k\sigma: expected next-step drift =θ(μxt)=θkσ>0= \theta(\mu - x_t) = \theta k\sigma > 0 → price expected to rise toward μ\mupositive edge. (3) Momentum buy at xt=μ+kσx_t = \mu + k\sigma: expected drift =θ(μxt)=θkσ<0= \theta(\mu - x_t) = -\theta k\sigma < 0 → price expected to fall → negative edge (trend continuation contradicts the pull-to-mean). (3)

(c) Backtest code (6 marks)

import numpy as np
np.random.seed(0)
theta, mu, sigma, N, k = 0.3, 100.0, 2.0, 10000, 1.0
x = mu
xs = [x]
for _ in range(N):
    x = x + theta*(mu - x) + np.random.normal(0, sigma)
    xs.append(x)
 
rets, in_pos, entry = [], False, 0.0
for xt in xs:
    if not in_pos and xt < mu - k*sigma:   # entry
        in_pos, entry = True, xt
    elif in_pos and xt >= mu:              # exit at mean
        rets.append((xt - entry)/entry)
        in_pos = False
 
print("avg per-trade return:", np.mean(rets))

Marks: simulation loop (2), entry/exit logic (2), return calc + positive result (2). Expected avg per-trade return ≈ +2% (positive), confirming edge.

(d) Trending regime flips edge (4 marks) Modified drift with mean itself rising: μt=μ0+gt\mu_t = \mu_0 + g\,t, so xt+1=xt+θ(μ0+gtxt)+εt.x_{t+1} = x_t + \theta(\mu_0 + g\,t - x_t) + \varepsilon_t. Now E[Δx]=θ(μtxt)+\mathbb{E}[\Delta x] = \theta(\mu_t - x_t) + the moving-target term; a price above the old mean may still lie below the rising mean, so buying strength (momentum) captures the drift gg. When gg is large relative to θσ\theta\sigma, momentum edge > mean-reversion edge. (4)


Question 3

(a) Expectancy (4 marks) E=p(+1R)+(1p)(1R)=0.550.45=0.10R per tradeE = p(+1R) + (1-p)(-1R) = 0.55 - 0.45 = 0.10R \text{ per trade} (3) Positive edge (+0.10R). ✓ (1)

(b) Kelly (5 marks) f=2p1=2(0.55)1=0.10=10%f^* = 2p - 1 = 2(0.55) - 1 = 0.10 = 10\% (2) Trader's f=0.02f=0.02 is 1/51/5 of Kelly ("fifth-Kelly"). Rational because: full Kelly gives brutal drawdowns (~50%+), estimation error in pp overshoots, and psychological tolerability + capital preservation matter more than maximal growth for realistic sustainable targets. (3)

(c) Doubling claim (6 marks) Per-trade expected geometric growth with f=0.02f=0.02, symmetric RR: Growth factor per trade pln(1+f)+(1p)ln(1f)\approx p\ln(1+f) + (1-p)\ln(1-f) (log-utility) or arithmetically 1+fE=1+0.02(0.10)=1.0021 + f\cdot E = 1 + 0.02(0.10) = 1.002. (2) Over 20 trades: (1.002)2010.0408=4.08%(1.002)^{20} - 1 \approx 0.0408 = 4.08\% expected monthly. (2) Doubling (+100%) requires either ff near Kelly with huge variance or is simply unrealistic — the honest expectation is ~4% monthly (~60% annualized before variance drag), NOT 100%/month. The claim is fantasy. (2)

(d) Realistic contrast (3 marks) The day-trader might realistically target ~2–5%/month (30–60% annual) if skilled, but with high effort, steep drawdown risk, and inconsistency — most fail. The index investor accepts ~10–12% annual passively, with far lower effort and drawdown, and high consistency. The trade-off is effort + risk for higher potential return that is neither guaranteed nor easily sustained. (3)

[
  {"claim":"Scalping net edge = 0.03%","code":"result = round(0.08-0.05,2)==0.03"},
  {"claim":"Scalping daily return approx 1.207%","code":"result = round(((1.0003)**40-1)*100,3)==1.207"},
  {"claim":"Intraday daily return approx 1.205%","code":"result = round(((1.003)**4-1)*100,3)==1.205"},
  {"claim":"OU gap shrinks by (1-theta)=0.7","code":"result = (1-0.3)==0.7"},
  {"claim":"Expectancy = 0.10R","code":"result = round(0.55-0.45,2)==0.10"},
  {"claim":"Full Kelly = 10%","code":"result = 2*0.55-1==Rational(1,10)"},
  {"claim":"Monthly expected growth ~4.08%","code":"result = round(((1+0.02*0.10)**20-1)*100,2)==4.08"}
]