聊天視窗

數據驅動的投資決策:從基礎統計到量化交易 - 第 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)完成完整的資產配置流程。