13 — Sharpe Ratio, Drawdown, and Benchmark Basics¶
Free learning pack¶
- MIT OCW Portfolio Theory I–III
https://ocw.mit.edu/courses/15-401-finance-theory-i-fall-2008/pages/video-lectures-and-slides/portfolio-theory/ - CFA Portfolio Risk and Return Part I
https://www.cfainstitute.org/insights/professional-learning/refresher-readings/2026/portfolio-risk-return-part-1 resources/portfolio_foundations.mdresources/active_management.md
Do not search for more material until these are insufficient.
PREDICT (Sharpe)¶
A strategy returns +2%, +2%, +2% every month — no variation at all. Its mean monthly return equals a second strategy that returns +6%, -2%, +2% over the same three months. Which strategy has the higher Sharpe ratio, and why?
import numpy as np
monthly_returns = np.array([0.02, 0.04, 0.03, -0.01, 0.05, 0.00, 0.02, 0.03, -0.02, 0.04, 0.01, 0.02])
risk_free_rate = 0.0
periods_per_year = 12
# MANUAL FIRST:
# compute excess returns, their mean and sample std (ddof=1),
# then the annualized Sharpe ratio.
sharpe = None
print(sharpe)
PREDICT (Drawdown)¶
A portfolio returns +10%, -20%, +5% over three periods. Is the max drawdown the same magnitude as the single worst period return? Why or why not?
Formula¶
Wealth path: W_t = prod(1+r_s) for s<=t
DD_t = W_t / max(W_0..W_t) - 1
Max drawdown = min(DD_t)
import numpy as np
period_returns = np.array([0.10, -0.20, 0.05])
# MANUAL FIRST:
# build the cumulative wealth path, the running peak, the drawdown series,
# and the max drawdown.
max_dd = None
print(max_dd)
Benchmark basics¶
No new code here — this is vocabulary you need before Phase 3 (active management).
- Benchmark weight
w_bvs portfolio weightw_p - Active weight:
a = w_p - w_b - Active return:
r_p - r_b
Read reference/concepts/benchmark_basics.md in full, then answer:
PREDICT (Benchmark)¶
A portfolio is 60% US equity / 40% international equity. Its benchmark is 50% / 50%. Without calculating, is the portfolio's active return positive or negative in a period where US equity outperforms international equity?
Experiment¶
After your hand implementations work:
- Re-order the three periods in the drawdown example (e.g.
-0.20, 0.10, 0.05). Does the max drawdown change even though total return doesn't? - Hold the mean of
monthly_returnsfixed but increase its volatility. Watch the Sharpe ratio fall.
Reference¶
reference/concepts/sharpe_ratio.md
reference/concepts/drawdown.md
reference/concepts/benchmark_basics.md
Promote¶
Use src/pm/returns.py (sharpe_ratio, max_drawdown) and src/pm/active.py (active_return) only after your own implementation.
Test¶
pytest tests/test_returns.py tests/test_active.py
ORAL CHECK¶
Explain to a PM why two strategies with identical Sharpe ratios can have very different max drawdowns, and why that matters for a client who cannot tolerate a 20% loss.