返回目錄
A
數據驅動的投資決策:從基礎統計到量化交易 - 第 6 章
第六章:風險管理與資產配置
發布於 2026-02-22 01:09
# 第六章:風險管理與資產配置
本章將從理論與實務兩個面向,說明如何透過數學模型、統計方法與程式碼實現高效的風險管理與資產配置。
## 6.1 現代投資組合理論(MPT)
### 6.1.1 基本假設
1. 投資者以**期望報酬**和**方差**為衡量指標。
2. 資產報酬服從**多元正態分布**。
3. 投資者只能配置資產、調整權重,無其他限制。
### 6.1.2 效率前緣(Efficient Frontier)
| 變數 | 說明 |
|---|---|
| φ | 投資組合權重向量(\[\sum_i\phi_i = 1\]) |
| \mu | 資產期望報酬向量 |
| \Sigma | 資產協方差矩陣 |
| R_p | 投資組合期望報酬 = \phi^T\mu |
| σ^2_p | 投資組合方差 = \phi^T\Sigma\phi |
目標:
math
\min_{\phi} \phi^T\Sigma\phi \quad\text{s.t.}\quad \phi^T\mu = R_p, \; \sum_i\phi_i = 1, \; \phi_i \ge 0
#### 6.1.2.1 求解方法
- **Lagrange 乘子**:將約束加入 Lagrangian,求導得到關係式。
- **線性規劃**(若允許負權重)或 **凸優化**(cvxpy、quadprog)。
python
import numpy as np
import cvxpy as cp
# 示例資料
mu = np.array([0.12, 0.08, 0.10])
Sigma = np.array([[0.04, 0.006, 0.004],
[0.006, 0.09, 0.02],
[0.004, 0.02, 0.07]])
# 目標報酬
R_target = 0.10
# 變數
phi = cp.Variable(3)
# 目標函數與約束
objective = cp.Minimize(cp.quad_form(phi, Sigma))
constraints = [mu @ phi == R_target,
cp.sum(phi) == 1,
phi >= 0]
prob = cp.Problem(objective, constraints)
prob.solve()
print('最優權重:', phi.value)
### 6.1.3 風險度量
| 指標 | 公式 | 直覺 |
|---|---|---|
| 波動率 (σ) | \(\sqrt{\phi^T\Sigma\phi}\) | 把投資組合波動化為標準差 |
| VaR (Value at Risk) | \(\phi^T\mu - z_{\alpha}\sqrt{\phi^T\Sigma\phi}\) | 置信水準 \(\alpha\) 下可能損失 |
| CVaR / ES (Conditional VaR) | 期望損失在 VaR 之上的分布 | 更保守的風險量化 |
## 6.2 資產配置模型
### 6.2.1 CAPM (Capital Asset Pricing Model)
CAPM 透過市場因子解釋資產報酬:
math
E[R_i] = R_f + \beta_i (E[R_m] - R_f)
- **\(R_f\)**:無風險利率。
- **\(\beta_i\)**:資產對市場的敏感度。
- **\(E[R_m]\)**:市場平均報酬。
CAPM 可作為預測期望報酬的基礎。
### 6.2.2 Fama‑French 三因子模型
加入規模 (SMB) 與價值 (HML) 因子:
math
E[R_i] = R_f + \beta_i (E[R_m] - R_f) + s_i \cdot SMB + h_i \cdot HML
- **SMB**:小型股減去大型股。
- **HML**:高價值股減去低價值股。
此模型提升預測精度,常用於風險調整報酬分析。
### 6.2.3 Black‑Litterman 模型
將投資者主觀預期(\(\pi\))與市場均衡預期(\(\mu_{eq}\))結合。
math
\mu_{BL} = [\tau\Sigma^{-1} + P^T\Omega^{-1}P]^{-1}[\tau\Sigma^{-1}\mu_{eq} + P^T\Omega^{-1}\tilde{q}]
- **\(P\)**:觀測矩陣(對應投資者觀點)。
- **\(\Omega\)**:觀測誤差協方差。
- **\(\tilde{q}\)**:投資者對特定策略的期望收益。
Black‑Litterman 可直接產生 **\(\mu_{BL}\)** 用於 Markowitz 最優化。
## 6.3 風險限額與動態配置
### 6.3.1 風險限額 (Risk Limits)
| 限額類型 | 目的 | 例子 |
|---|---|---|
| **單一資產** | 防止單一風險集中 | 風險敞口 ≤ 10% |
| **部門/產業** | 分散行業風險 | 某產業持倉 ≤ 15% |
| **因子敞口** | 控制市場、風格因子風險 | Beta ≤ 0.8 |
| **整體風險** | 遵守整體 VaR/ES | VaR ≤ 5% |
### 6.3.2 動態配置(Dynamic Asset Allocation)
- **滑動窗口平均**:根據近期報酬調整預期。
- **貝葉斯更新**:用市場觀測資訊更新 \(\mu\) 和 \(\Sigma\)。
- **Monte Carlo 風險管理**:模擬多條歷史路徑,計算潛在損失。
python
# 簡易貝葉斯更新範例
import numpy as np
# 原始估計
mu_prior = np.array([0.08, 0.07])
Sigma_prior = np.array([[0.05, 0.01], [0.01, 0.04]])
# 觀測資料(如近期報酬)
obs_returns = np.array([0.10, 0.05])
# 觀測誤差協方差
Omega = np.diag([0.02, 0.02])
# 更新公式
Sigma_post = np.linalg.inv(np.linalg.inv(Sigma_prior) + np.linalg.inv(Omega))
mu_post = Sigma_post @ (np.linalg.inv(Sigma_prior) @ mu_prior + np.linalg.inv(Omega) @ obs_returns)
print('更新後期望報酬:', mu_post)
## 6.4 風險平價(Risk‑Parity)與風險預算
### 6.4.1 風險平價定義
每個資產對整體波動率的貢獻相等。
math
\frac{\phi_i \sigma_i}{\sqrt{\phi^T\Sigma\phi}} = \text{常數}
### 6.4.2 實作
python
import cvxpy as cp
# 風險貢獻矩陣
sigma_vec = np.sqrt(np.diag(Sigma))
# 目標:各資產風險貢獻相等
risk_contrib = sigma_vec @ phi
objective = cp.Minimize(cp.sum_squares(risk_contrib - risk_contrib.mean()))
constraints = [cp.sum(phi) == 1, phi >= 0]
prob = cp.Problem(objective, constraints)
prob.solve()
print('風險平價權重:', phi.value)
## 6.5 因子風險管理(Factor‑Based Risk Management)
### 6.5.1 典型因子
- **市場因子 (MKT)**:\(R_m - R_f\)
- **SMB / HML**:Fama‑French。
- **Momentum**:最近 12‑month 回報。
- **Volatility**:短期波動率。
### 6.5.2 因子回歸實作
python
import pandas as pd
import statsmodels.api as sm
# 讀取資料
prices = pd.read_csv('prices.csv', index_col='Date', parse_dates=True)
returns = prices.pct_change().dropna()
# 產生因子(以簡化示例為例)
mkt = returns.mean(axis=1) # 市場報酬
smb = returns.apply(lambda x: np.where(x>returns.mean(), -1, 1), axis=0).mean(axis=1)
hml = returns.apply(lambda x: np.where(x>0, 1, -1), axis=0).mean(axis=1)
factors = pd.DataFrame({'MKT': mkt, 'SMB': smb, 'HML': hml})
# 迴歸
y = returns['Asset_A']
X = sm.add_constant(factors)
model = sm.OLS(y, X).fit()
print(model.summary())
## 6.5 風險管理流程示例
| 步驟 | 內容 |
|---|---|
| 1 | 蒐集歷史報酬、因子資料 |
| 2 | 計算期望報酬 \(\mu\)(可用 CAPM / Fama‑French / Black‑Litterman) |
| 3 | 推估協方差矩陣 \(\Sigma\)(滑動窗口、貝葉斯、樣本方差) |
| 4 | 進行 Markowitz 或 Black‑Litterman 最優化,得到權重 \(\phi\)。 |
| 5 | 檢查並調整風險限額(單一、部門、因子、整體)。 |
| 6 | 進行動態調整:每週/每月更新 \(\mu, \Sigma\),重新優化並控制交易成本。 |
## 6.6 實務應用小結
1. **建立資料管道**:利用 API(Yahoo‑Finance、Quandl)即時下載價格、因子。
2. **數值優化**:採用 `cvxpy`、`quadprog` 或 `PyPortfolioOpt` 等套件。
3. **風險報表**:用 `pandas`, `matplotlib`, `seaborn` 產生效率前緣、分散效益圖。
4. **自動化交易**:將配置結果送至量化交易平台(IB API、Alpaca、QuantConnect)。
> **提示**:在實務中,**交易成本**、**稽核限額**、**資料延遲**等因素往往決定策略能否落地。務必先在歷史資料上做充分回測,確認策略在不同市場環境下的穩定性。
---
**本章學習目標**
- 掌握 Markowitz 效率前緣與其實作。
- 能夠使用 CAPM、Fama‑French、Black‑Litterman 等模型預測期望報酬。
- 理解並實現風險限額、風險平價、動態配置。
- 能在 Python 中結合資料科學工具(pandas, numpy, cvxpy, statsmodels)完成完整的資產配置流程。