返回目錄
A
量化投資策略:理論到實踐的全景指南 - 第 6 章
第6章:風險管理與績效評估
發布於 2026-03-03 06:32
# 第6章:風險管理與績效評估
> **關鍵字**:VaR、CVaR、夏普比率、信息比率、回撤、風險因子、分散化、交易成本、滑點、監控。
本章聚焦於量化投資中的風險度量與績效評估,說明如何從數學模型到實務落地,全面掌控策略的風險收益特徵。除了傳統的風險度量(VaR、CVaR)外,我們也會討論因子拆解、分散化效果及交易成本對績效的影響,並以實際 Python 例子說明如何在回測框架中執行。
---
## 6.1 風險度量概念
| 風險度量 | 定義 | 適用場景 | 主要參數 |
|---|---|---|---|
| **VaR** | 在給定置信水平下,投資組合在單日內可能遭受的最大損失 | 日常風險管理、資本充足率 | 置信水平 (α)、時間窗口、估計方法 |
| **CVaR** | 在 VaR 限制之外,超過 VaR 的平均損失(又稱條件風險值) | 對尾部風險更敏感的策略、風險控制 | 置信水平 (α)、時間窗口 |
| **回撤 (Drawdown)** | 從峰值到低點的最大跌幅 | 風險容忍度評估、資金管理 | 峰值、低點、持倉期間 |
| **夏普比率** | 超額報酬率與波動率之比 | 投資組合績效比較 | 無風險利率、報酬率、波動率 |
| **信息比率** | 超額報酬率與跟蹤誤差之比 | 因子投資、主動管理績效 | 超額報酬、跟蹤誤差 |
> **提醒**:不同度量適用於不同管理階段。VaR 主要面向資本充足率,夏普比率則適合長期策略評估;而回撤則能直接呈現投資者心理層面的風險。
---
## 6.2 VaR 與 CVaR 的計算
### 6.2.1 參數定義
- **α**:置信水平(常用 95% 或 99%)
- **T**:時間窗口(如 1 天、10 天)
- **r_t**:日收益率序列
### 6.2.2 歷史模擬法(Historical Simulation)
最直觀、最易實作,直接使用歷史收益率排序。
python
import pandas as pd
import numpy as np
# 假設 df['return'] 是每日收益率
alpha = 0.01 # 99% VaR
var_hs = np.percentile(df['return'], 100*alpha)
print(f"99% VaR (歷史法): {var_hs:.2%}")
# CVaR
cvar_hs = df['return'][df['return'] <= var_hs].mean()
print(f"99% CVaR (歷史法): {cvar_hs:.2%}")
### 6.2.3 機率分布法(Parametric / Variance-Covariance)
假設收益率服從正態分布,利用均值與標準差。
python
mu = df['return'].mean()
sigma = df['return'].std()
var_param = mu + sigma * norm.ppf(alpha)
print(f"99% VaR (正態假設): {var_param:.2%}")
> **實務提示**:在高頻或波動率突變的市場中,正態假設往往低估尾部風險。建議結合歷史法或極值理論(Extreme Value Theory, EVT)進行補償。
---
## 6.3 回撤分析
### 6.3.1 最大回撤 (Max Drawdown)
python
# 假設 df['cumulative'] 是累積報酬率
peak = df['cumulative'].cummax()
drawdown = (df['cumulative'] - peak) / peak
max_dd = drawdown.min()
print(f"最大回撤: {max_dd:.2%}")
### 6.3.2 回撤期間 (Duration)
python
# 找回撤的起點與終點
start = drawdown[drawdown == max_dd].index[0]
end = peak[peak == df['cumulative'].loc[start]:].index[-1]
print(f"回撤期間: {start.date()} - {end.date()}")
> **風險管理中的回撤**:通常把最大回撤與資金規模掛鉤,設定「可承受回撤比例」以制定止損或資金重新配置策略。
---
## 6.4 夏普比率與信息比率
### 6.4.1 夏普比率計算
python
rf = 0.02 # 1 年無風險利率 2%
annualized_ret = df['return'].mean() * 252
annualized_vol = df['return'].std() * np.sqrt(252)
sharpe = (annualized_ret - rf) / annualized_vol
print(f"夏普比率: {sharpe:.3f}")
### 6.4.2 信息比率計算
信息比率需要基準指數或模型預測。
python
# 假設 benchmark['return'] 為基準報酬率
excess_ret = df['return'] - benchmark['return']
tracking_error = excess_ret.std() * np.sqrt(252)
annualized_excess = excess_ret.mean() * 252
info_ratio = annualized_excess / tracking_error
print(f"信息比率: {info_ratio:.3f}")
> **說明**:夏普比率衡量 *單位風險的報酬*;信息比率則衡量 *策略超越基準的報酬*,更適合主動管理者。
---
## 6.5 風險因子拆解與分散化
### 6.5.1 風險因子模型
- **單因子**:市場因子(β)
- **多因子**:Fama‑French 三因子、Carhart 四因子、AQR 風格因子
#### 6.5.1.1 例:Fama‑French 三因子模型
python
import statsmodels.api as sm
X = df[['Mkt-RF', 'SMB', 'HML']]
X = sm.add_constant(X)
model = sm.OLS(df['return'] - rf, X).fit()
print(model.summary())
> **風險因子敞口**(β)說明了策略對各風險因子的敏感度,利於因子暴露的調整與對沖。
### 6.5.2 分散化效應
- **資產多樣化**:增加獨立性降低波動
- **因子多樣化**:利用不同風格因子(價值、質量、動量)降低共變
#### 6.5.2.1 例:投資組合分散化模擬
python
# 假設有 10 筆資產的日報酬率矩陣
cov = asset_returns.cov()
# 均等權重
weights = np.ones(len(asset_returns.columns)) / len(asset_returns.columns)
port_vol = np.sqrt(weights.T @ cov @ weights)
print(f"均等權重組合波動率: {port_vol:.2%}")
# 重新加權以最小化波動
inv_vol = 1 / np.sqrt(np.diag(cov))
weights_opt = inv_vol / inv_vol.sum()
port_vol_opt = np.sqrt(weights_opt.T @ cov @ weights_opt)
print(f"波動率最小化權重組合: {port_vol_opt:.2%}")
> **結論**:透過因子拆解與多樣化,策略不僅降低波動,也提升風險調整後的報酬。
---
## 6.6 交易成本、滑點與績效
| 成本項 | 定義 | 估算方法 |
|---|---|---|
| **固定成本** | 交易手續費、清算費 | 交易所公開標準或歷史交易費率 |
| **變動成本** | 滑點、流動性成本 | 以交易深度、平均成交價差推估 |
| **隱性成本** | 預期報酬下降、風險提升 | 透過模擬滑點後策略表現 |
### 6.6.1 滑點模型
python
# 滑點率假設為 0.05% of price
slippage_pct = 0.0005
slippage = df['price'] * slippage_pct
adjusted_ret = df['return'] - slippage / df['price']
### 6.6.2 成本校正後的績效
python
# 成本校正後夏普比率
adj_vol = adjusted_ret.std() * np.sqrt(252)
adj_ret = adjusted_ret.mean() * 252
sharpe_adj = (adj_ret - rf) / adj_vol
print(f"成本調整後夏普比率: {sharpe_adj:.3f}")
> **實務建議**:在策略回測階段加入「滑點 + 成本」模擬,可避免在實盤出現「假績效」的情況。
---
## 6.7 風險監控與風險限額
| 監控指標 | 觸發條件 | 行動 |
|---|---|---|
| **每日損失限額** | > 1% 以上 | 停盤或縮減倉位 |
| **持倉風險比例** | > 10% | 調整權重或對沖 |
| **滑點偏差** | > 50% 以上 | 檢查交易執行或更換交易路徑 |
| **流動性風險** | 買賣價差 > 1% | 暫停交易或轉向低流動性標的 |
> **自動化監控**:可利用 `freqtrade` 或 `QuantConnect` 的風險管理模組,結合警報(Slack、Email)實現即時反饋。
---
## 6.8 小結
- **風險度量**:VaR、CVaR、回撤是風險管理的基石;應結合因子拆解以深入理解風險來源。
- **績效指標**:夏普比率、信息比率提供風險調整後的績效評估,幫助策略選擇與調整。
- **成本考量**:滑點、交易成本不可忽視,需在回測時預先模擬以避免績效失真。
- **分散化策略**:透過資產與因子多樣化,降低組合波動,提升穩定性。
- **風險監控**:實盤風險限額、即時警報是保護資本的重要手段。
> **實務建議**:在開發任何量化策略前,先完成「完整風險框架」的搭建,確保風險與績效的可測量、可控。策略的持續優化不僅依賴模型,亦需不斷調整風險控制參數,確保在不同市場環境下都能保持穩健。
---
> **閱讀延伸**:
> - Jorion, P. (2007). *Value at Risk: The New Benchmark for Managing Financial Risk*.
> - Alexander, C. (2001). *Market Risk Analysis: Applications of Simulation, Econometrics and Statistical Techniques*.
> - Kelly, J. (2021). *Python for Quantitative Finance*.
---
**結語**:風險管理與績效評估不僅是策略測試的「收尾工作」,更是策略持續迭代的核心動力。掌握並靈活運用上述工具,能夠為量化投資者構建堅實的風險基礎,並在競爭激烈的市場中脫穎而出。