夏普、崔諾、詹森指標
1️⃣ 夏普指標(Sharpe Ratio)
定義
衡量每承擔一單位總風險(標準差 σ)所得到的超額報酬。 用來比較投資組合的風險調整後報酬。
公式
\[
Sharpe = \frac{E(R_p) - R_f}{\sigma_p}
\]
- \(E(R_p)\):投資組合的期望報酬率
- \(R_f\):無風險利率
- \(\sigma_p\):投資組合報酬率的標準差(總風險)
特點
- 風險衡量方式:總風險(標準差 σ)
- 適合比較分散程度不同的投資組合
- 越高越好 → 每單位風險獲得更多報酬
2️⃣ 崔諾指標(Treynor Ratio)
定義
衡量每承擔一單位系統風險(β)所得到的超額報酬。 假設投資組合已經高度分散,非系統風險可忽略。
公式
\[
Treynor = \frac{E(R_p) - R_f}{\beta_p}
\]
- \(E(R_p)\):投資組合的期望報酬率
- \(R_f\):無風險利率
- \(\beta_p\):投資組合的 β 值(系統風險)
特點
- 風險衡量方式:系統風險(β)
- 適合比較已經分散化的投資組合
- 越高越好 → 每單位市場風險獲得更多報酬
3️⃣ 詹森指標(Jensen’s Alpha)
定義
衡量投資組合的實際報酬率與 CAPM 預測報酬率的差異。 反映基金經理是否「創造超額報酬」。
公式
\[
\alpha_p = E(R_p) - [R_f + \beta_p \cdot (E(R_M) - R_f)]
\]
- \(E(R_p)\):投資組合的期望報酬率
- \(R_f\):無風險利率
- \(E(R_M)\):市場組合的期望報酬率
- \(\beta_p\):投資組合的 β 值
特點
- α > 0 → 表示經理人有正超額報酬(跑贏市場)
- α < 0 → 表示經理人表現不如市場
- 基於 CAPM 模型 計算
4️⃣ 三者比較表
| 指標 | 公式 | 風險衡量方式 | 適用情境 | 判斷依據 |
|---|---|---|---|---|
| Sharpe | \(\frac{E(R_p) - R_f}{\sigma_p}\) | 總風險(σ) | 組合未必分散完善 | 高 → 風險調整後報酬好 |
| Treynor | \(\frac{E(R_p) - R_f}{\beta_p}\) | 系統風險(β) | 組合已分散化 | 高 → 市場風險利用效率好 |
| Jensen’s α | \(E(R_p) - [R_f + \beta_p (E(R_M) - R_f)]\) | 系統風險(β) | 檢驗經理績效 | α > 0 表示超額報酬 |
5️⃣ 考試口訣(選擇題速記)
Sharpe 總風險 → 適用未分散
Treynor \(\beta\) 風險 → 適用已分散
Jensen \(\alpha\) → 與CAPM比較
6️⃣ 範例程式碼
# Create two figures in English with Matplotlib (no custom colors), and save them for download.
import numpy as np
import matplotlib.pyplot as plt
# ---------- Common parameters ----------
Rf = 0.02 # Risk-free rate
ER_M = 0.10 # Market expected return
# ---------- Figure 1: CML & Sharpe (risk = sigma) ----------
sigma = np.linspace(0.0, 0.30, 200)
sigma_M = 0.18
CML = Rf + (ER_M - Rf) / sigma_M * sigma
# Example portfolio P (on the CML for illustration)
sigma_p = 0.12
ER_p = Rf + (ER_M - Rf) / sigma_M * sigma_p # keeps P on CML so the Sharpe equals CML slope
plt.figure(figsize=(7,5))
plt.plot(sigma, CML, linewidth=2, label="CML (Capital Market Line)")
plt.scatter([0.0], [Rf], label="Risk-free (Rf)")
plt.scatter([sigma_p], [ER_p], label="Portfolio P")
plt.xlabel("σ (Total Risk, Std Dev)")
plt.ylabel("E(R) (Expected Return)")
plt.title("Sharpe Ratio on CML (slope from Rf to P)")
# Draw the Sharpe slope line (same as CML slope here, from Rf to P)
plt.plot([0.0, sigma_p], [Rf, ER_p], linestyle="--", label="Sharpe Ratio line (Rf→P)")
# Annotate Sharpe value
sharpe = (ER_p - Rf) / sigma_p
plt.annotate(f"Sharpe = (E[R_P]-Rf)/σ_P ≈ {sharpe:.2f}",
xy=(sigma_p, ER_p),
xytext=(sigma_p*0.55, ER_p+0.03),
arrowprops=dict(arrowstyle="->"))
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.savefig("/mnt/data/CML_Sharpe.png", dpi=200)
plt.show()
# ---------- Figure 2: SML, Treynor & Jensen's Alpha (risk = beta) ----------
beta = np.linspace(0.0, 2.0, 200)
SML = Rf + beta * (ER_M - Rf)
# Example portfolio P with actual return not exactly on SML
beta_p = 1.20
ER_p_capm = Rf + beta_p * (ER_M - Rf)
ER_p_actual = 0.14 # actual return
alpha_p = ER_p_actual - ER_p_capm # Jensen's alpha
plt.figure(figsize=(7,5))
plt.plot(beta, SML, linewidth=2, label="SML (Security Market Line, CAPM)")
plt.scatter([0.0], [Rf], label="Risk-free (Rf)")
plt.scatter([beta_p], [ER_p_capm], label="CAPM-predicted return")
plt.scatter([beta_p], [ER_p_actual], label="Portfolio P (actual)")
plt.xlabel("β (Systematic Risk)")
plt.ylabel("E(R) (Expected Return)")
plt.title("Treynor Ratio (slope Rf→P) and Jensen's Alpha (vertical gap)")
# Treynor line: slope from Rf to the actual portfolio point
plt.plot([0.0, beta_p], [Rf, ER_p_actual], linestyle="--", label="Treynor line (Rf→P)")
# Jensen's alpha annotation (vertical distance)
plt.annotate(f"Alpha = {alpha_p:.2%}",
xy=(beta_p, ER_p_actual),
xytext=(beta_p+0.1, ER_p_actual+0.01),
arrowprops=dict(arrowstyle="->"))
plt.legend()
plt.grid(True)
plt.tight_layout()
plt.savefig("/mnt/data/SML_Treynor_Jensen.png", dpi=200)
plt.show()
# Provide computed values for reference
print(f"Sharpe (P): {sharpe:.4f}")
print(f"Treynor (P): {(ER_p_actual - Rf)/beta_p:.4f}")
print(f"Jensen's alpha (P): {alpha_p:.4%}")